软件状态管理范文

2024-05-23

软件状态管理范文(精选5篇)

软件状态管理 第1篇

关键词:用户状态,动态管理,策略,方法,性能

1 引言

开发一套即时通信软件,软件采用C/S结构,服务器端采用VC++,客户端使用C#.NET,数据库使用Access,充分利用Access数据库灵活轻便的特点,通过仔细设计和规划,可以满足软件系统的需求。

即时通信软件最核心的技术难点是用户状态的动态管理,用户在线、离线、头像显示、通信等功能都以之为基础。对几种常用的实现策略和方法进行比较和分析,选择了适合本套软件系统的策略和方法。

2 用户状态需求分析

客户端要能及时显示联系人的状态信息;而服务器端需要维护所有用户的状态信息。

由于用户之间并非采用P2P模式通信,而是通过服务器中转来处理,服务器端则成为一个关键点:

首先,它维护的用户状态信息,要能及时更新,以反映当前全部用户的状态;

第二,服务器端维护的用户状态信息,要尽量与实际的用户状态一致,误差要尽量小,并要有自动纠错能力,及时自动纠正错误的状态信息。

第三,服务器端要能高效的维护和使用用户状态信息,并能高效地为客户端提供用户状态信息。

2.1 客户端用户状态需求

IM客户端软件,从用户登录到用户退出,都需要及时获得与之相关的用户当前的状态信息,并且将自己的状态信息通知服务器。

2.2 服务器端用户状态需求

服务器端维护所有用户的状态信息,并为用户提供这些信息。服务器不仅需要被动地向用户提供信息,当用户状态变化时,还需及时将这些信息反馈给相关用户。

服务器端用户状态管理需求图如图1所示,用户登录/退出处理、用户间通信和用户状态自动维护模块,都需要维护和使用用户状态。要高效进行用户状态管理,需要妥善解决以下几个问题:

(1)用户状态如何保存,保存在哪里。

(2)维护全部用户状态,还是仅维护在线用户状态。

(3)对用户状态的保存和更新,采用静态管理,还是动态管理。

(4)查询用户状态,使用哪种算法。

(5)如何为客户端提供用户状态信息。

3 用户状态管理策略和方法

上面提出的几个问题,可以有多种选择,比较常用的选择如下:

(1)用户状态的保存,有两种选择,一种是保存在数据库中,这种方法实现简单,但数据库操作开销大;另外一种是保存在内存中,这种方法实现复杂,但是速度快。

(2)用户状态的维护策略,数据库中保存的用户状态维护比较容易。对内存中的用户状态表,可以选择静态维护,维护全部用户的状态,这种方法空间的开销比较大,但实现逻辑比较简单;也可以选择动态维护,仅维护上线用户的状态,这种方法空间开销比较小,实现逻辑复杂。

(3)查询用户状态使用的算法,依赖前面的策略,可以有多重选择,数据库查询、顺序查询、二分查询、链表查询等等。

(4)如何为客户端提供用户状态信息,直接影响整个系统的效率和用户的体验。服务器可以从数据库中取得用户状态,也可以从维护的用户状态表中取得,将之提供给用户。

策略和方法选择的原则:首先考虑用户使用的感受,以提高用户使用的流畅度为首要目标,优化用户感受比较直观的环节;其次,优化服务器负载,提高整个系统性能。

3.1 用户状态保存方式

通过分析用户使用IM软件的整个生命周期,每个用户在登录时,需要等待服务器的身份验证,若通过,还要从服务器取得联系人信息,并初始化IM客户端界面,这一段等待时间,对用户来说是可以容忍的,但登录时间也不能太长。

在服务器端,对用户的登录至少需要一次数据库查询操作,以比较该用户是否为合法用户、该用户的口令是否正确;而用户通过验证后,又需要为用户提供他的联系人列表里的联系人信息,包括状态信息。

由上分析,用户登录时,服务器一次性将联系人信息和状态信息从数据库中取得,并传给用户,比较合理。故数据库中需要保存一份用户状态信息。

在用户使用过程中,不论是用户自己登录退出,还是联系人上线下线,服务器都需要将此信息通知给相关用户;此外,用户间通信由服务器转发,那么服务器经常需要查询用户状态及相关的网络通信信息。显然完全依靠数据库进行频繁的查询是不可取,服务器的响应因为磁盘会变得很慢。因此需要在内存建立一份用户状态表,用来存放与用户的相关信息,并应对频繁的查询操作。

由上可知,需要在数据库中保存全部用户的在线状态的基本信息,还需在内存中保存用户的基本信息和其他相关信息。

3.2 用户状态的维护策略

由于在数据库和内存保存了两份用户状态信息。除了维护各自的用户状态信息外,还需维护两者信息的一致性。数据库中的维护比较简单,根据用户状态更新即可,比较复杂的是内存中的用户状态维护和两者间用户状态信息的同步。

3.2.1 内存中用户状态维护策略

内存中可以只存放在线用户的状态信息,这样比较节省空间,考虑用户量不大,在内存中存放所有用户的状态信息也是可行的;另外,内存中的用户状态表可以采用数组索引的静态管理法,也可以采用链表方式的动态管理法。

3.2.2 内存与数据库中的用户状态同步

当用户登录、退出时,首先向数据库更新该用户的状态,成功后再向内存中更新用户的状态。

对非正常掉线用户,服务器程序有自动维护模块,定时检测用户的是否在线,当用户不在线而内存状态为在线时,则更新内存和数据库中的用户状态为不在线。

依靠这两条同步策略,在允许的时间差内,可以保证内存和数据库中的状态一致,同时也可以保证服务器中保存的用户状态与实际的用户状态一致。

3.3 内存中用户状态维护策略的选择

内存中维护用户状态,可以使用数组的方式,也可以采取为用户动态分配内存的方式。下面分析和比较索引数组和动态分配内存的链表两种方法,从中选择出一个比较适合本系统的方法。

3.3.1 索引数组

索引数组是在服务器启动时,事先在内存中为用户分配数组,这些数组大小和数量一直是不变的。索引数组也有两种策略,一种是为全部用户都预分配空间,并预留一定数量,应当近期用户增长,为用户分配唯一索引;另一种是分配一定数量空间,仅在线用户使用。

第一种策略,每个用户需要分配一个唯一的索引,服务器端需要维护这些索引信息,并且每个用户的好友列表里,也需要获得这些索引信息。当因员工退休、离职等原因,要删除一个用户时,还需重构索引信息。这些因素使得服务器端需要经常停止服务进行维护,不利于后期持续运行。

所以,索引数组采用第二种策略,分配的内存仅保存在线用户的状态信息。用户在里面无固定索引。这就涉及对该数组的管理,这里采用了两个索引指针,分别是最小未用索引MIN_INDEX、最大已用索引MAX_INDEX,通过维护这两个索引指针,可以加快维护用户数组的速度。

采用索引指针的原理是:当用户登录时,直接将用户信息存放在MIN_INDEX所指的位置,然后比较MIN_INDEX和MAX_INDEX的大小,将MAX_INDEX更新为两者较大的值,最后从MIN_INDEX处向后查找一个空位后,更新MIN_IN-DEX索引指针;当用户退出或检测到用户断线时,将用户占用的空间清空,然后比较MIN_INDEX和该用户的索引指针,将MIN_INDEX更新为两者的较小值,最后比较MAX_INDEX和该用户的索引指针,若相等,则从MAX_INDEX位向前搜索第一个已用数组位,将MAX_INDEX更新为该数组位的索引值,如图2所示。

3.3.2 动态分配内存

此种策略服务器维护一个链表结构,当用户上线时,为该用户分配一块内存,并放入链表尾部;当有用户下线时,将用户项从链表中取下,释放内存。

链表可以采用单向链表,也可以采用双向链表,查询算法可以采用顺序查找,对双向链表,也可以采用二分查找。不采用动态调整链表的算法,因为对各个在线用户来说,被查找的几率是一样,动态调整意义不大。

链表结构中,用户内存需要经常分配和释放,容易产生内存碎片,速度也没静态内存快,查询算法也未占多大优势。

通过比较,针对本系统应用环境,选用预分配的内存的索引数组方案比较好。

4 索引数组上的算法

索引数组,初始状态最小空元素索引和最大使用的元素索引都指在数组的0位置,随着系统运行,两个索引值都在变动,并且指向对应位置。通过两个索引,可以加速数组的查找,主要体现在:

(1)新上线用户,可以根据最小空元素索引,立刻找到存储位置。

(2)查找在线用户,不会查找大于最大使用元素索引指示的位置。

结合索引数组维护算法,需要顺序查找的情况有3种:

(1)最小空元素索引位置被占用后,向后顺序查找空位,更新索引,此种情况最坏查找次数不超过MAX_INDEX的大小。

(2)最大使用元素索引位置用户退出后,向前顺序查找第一个使用位,最坏查找次数不超过MAX_INDEX-1的大小。

(3)当用户好友列表中,携带的在线好友索引信息与服务器索引数组中的不一致时,及好友上线后还未及时更新列表中的好友状态时,也无好友索引信息,与好友通信时,都需要查询顺序查询索引数组,以确定好友是否在线,并得到好友信息,最大查找次数不大于MAX_INDEX的大小。

采用顺序查找的情况下,通过上面分析,可以看出采用索引数组,结合一些索引指针和算法,牺牲一些内存空间,可以获得良好的性能,如果采用二分查找等其他高级查找算法,那么在用户量加大几倍的情况下,也可以维持不错的性能。

5 结语

系统分析了即时通信软件用户状态管理策略和方法,如果单纯采用数据库记录用户状态,则无需考虑这些策略,仅需仔细提高数据库性能和速度即可。由于在内存中保存和维护用户状态信息,那么管理的策略和方法就非常重要,对用户量不是非常大的情况下,内存中管理用户状态是一个不错的选择,可以加快用户间通信的响应时间,提高整体的运行效率。

参考文献

[1]Batini C,Lenzerini M,Navathe S.A comparative analysis ofmethodologies for database schema integration[J].ACMComputing Surveys,1998,18:323-364.

[2]郑若忠,宁洪,阳国贵.数据库原理[M].长沙:国防科技大学出版社,1998:310-314.

[3]Neil Matthew,Richard Stones.Linux程序设计[M].北京:机械工业出版社,2002.

[4]Jeffrey Richter.WINDOWS核心编程[M].北京:清华大学出版社出版,2000.

财富管理——实现从容的人生状态 第2篇

因为身体原因,张女士在2006年辞去工作后,依靠房子的租金,加上过往积累的一些储蓄,生活上还算富裕。经历了中国房地产的黄金10年,张女士的房产也得到了大幅升值,市场价约1250万元。

张女士当年投资房产的决定,从财富的积累角度看无疑是成功的。但随着中国经济体制的不断转变,人们积累以及管理财富的模式也在不断改进。房产等有形资产是否能够跟过去一样作为财富积累以及传承的主要角色,是我们每个人都要仔细思考的问题。

2011年,随着精诚理财提出财富管理的理念,经过对张女士资产的深度分析,以及与张女士的深入沟通,决定对其财富进行重新配置。主要是卖掉2002年投资的房产,重新再配置一套住房约580万元,剩余资金用于在资本市场的重新配置。配置前后的资产状况分别见表1、2。张女士对配置的方案非常认同,决定逐步执行。

为什么要做财富管理

可以很明显看出,在配置前,房产占到张女士家庭总资产的98%以上,其属性直接决定其家庭总资产的规划合理性,这就面临着以下几个问题。

安全性房屋本身面临着火灾、地震、水淹以及自身的折旧等自然风险。

增殖性房价受政策、市场的影响较大,过去的黄金十年已成为历史,且房屋租赁本身也会受到市场、大规模流行病的影响出现空租等,且随着科技的发展,房屋建材、格局等也会不断变化,10年前的房子,现在很多年轻人已不再居住。

流通性房屋作为实物,本身是家庭的固定性资产,其变现能力本身相对于银行、证券市场等相对较差。

资产转移未来的赠予、遗产等税负也是张女士不得不提前考虑的问题。

房子是否进行重新规划,除了看房子目前的状况外,关键看有无更合适的规划方案。

从感性胜利到理性胜利

财富管理包括现金储蓄及管理、债务管理、个人风险管理、投资组合管理、退休计划及遗产安排等。 其主要功能是帮助我们制定及达成财务目标。通过财富管理,不但可以增加我们的投资收入,而且更可以累积更多的财富,提供更大保障,从而提高我们的生活水平和改善我们的生活品质。张女士的资产重新配置后具有以下优势。

安全性分析房产、固定收益类信托、金裕人生(养老储蓄)以及银行储蓄,共1090万元,占比70.3%,家庭资产足够安全。

收益性分析房产8%,PE投资年化保守估计30%,阳光私募10%,固定收益10%,金裕人生4%,每年收益280万元,相当于总资产年化收益12.8%。

灵活性分析银行活期储蓄60万元可随时支配用作日常生活,万能险和其他保险解决人生突发风险,遇其他问题紧急用款时可利用保单和房屋贷款、高额信用卡、阳光私募赎回等,足以应对人生任何问题,且各种投资之间根据市场变动可随时做调整。

税赋规划金裕人生分3年储蓄,共计150万元,开通投连资金池,PE等信托资金随时进入,合理规避各种税赋。

给张女士资产配置的原则是运用多种金融工具,使财富在安全的基础上,实现稳定的保值、增值,以期达到配置后整体资产实现安全性、灵活性和收益性的兼顾。产品涉及PE股权产品、阳光私产品,固定收益信托、投资连结、养老年金保险、疾病意外保险、高端医疗保险等;攻守兼备,长短相济。

经过上述规划后,张女士说:“当时的房产投资到今天为我积累了人生的一大笔财富。那时是没有什么把握的,回头来看,虽然也做过多方面了解,但整体应该是感性的行为。看看身边的朋友有的现在还在为生活努力工作,真的很有感触。如果说9年前的买房是感性的成功,那么今天的卖房就是理性的胜利!”

用好各类金融工具

不仅张女士需要财富管理。当今社会,人们的物质需求越来越高,为了过上更好的生活,很多人都会努力奋斗。但到最后却发现还是没钱,于是便统统归咎于通胀严重、物价高、工资低、房价增长快、医疗费用高、教育费用不堪忍受、未来养老生活不确定等。其实,这一切都是可以通过财富管理合理规划的,关键是我们要了解不同金融工具的特定属性。

保险其杠杆原理不仅可以解决高额医疗费用的问题,还可以释放出冰山储蓄,用于更好的投资,获取更大的收益。对于普通家庭,一份医疗保障本身,并不能阻止疾病、意外等风险的发生,也不能完全消除因此带给家人和自己的心灵伤痛,但一份及时的、足额的现金保障,却是我们和最亲近的家人共同度过人生艰难时刻的重要资源和支撑。对于高收入阶层,一份保单,就可以释放出我们储备的大量医疗费用,让这笔资金可以放心地用于其他的投资规划等。

在这里要提醒大家的是,在购买保险时不仅要注重保障的额度,还要注意保障范围。一般身故、重疾和伤残属于赔付类,而门诊、住院、手术等属于报销类,两者齐全才算一份完整的保单。其实人生也罢,理财也罢,我们既要考虑如何更好,也要考虑如何不至于更坏,这既是人生的基本智慧,也是理财的基本原理。

银行通过存款、贷款、汇兑、储蓄等业务,承担信用中介的金融机构。它主要的业务范围是吸收公众存款、发放贷款以及办理票据贴现等。其灵活性和安全性在家庭理财中扮演着重要角色。近几年银行充分利用其渠道优势,也开始代售、发行很多短期理财产品,可以使客户的部分资金在保持安全灵活的基础上,也获得一定的收益。

信托作为银监会监管下的非银行金融业务,信托近几年也逐渐进入主流财富管理市场。信托按产品分类可以简单地分为固定收益类、证券投资类、PE股权类、定向增发类以及房地产投资类等。不同的类型,安全性、收益性、收益机制以及时间长短都不等。信托的理财优势有很多。一是投资领域十分广泛。信托公司(受托人)依托信托制度成为唯一能够跨越货币市场、资本市场、实业市场、实物市场的理财机构。二是财富管理功能十分强大。它可以综合创造、积累、保护、运用、传承财富的五大方面,这是其他理财方式所不能同时具备的。三是能够满足高端理财、个性化理财需求。特定利益信托能够满足客户的个性化需求,以弥补市场上标准化投资产品的不足。

其他的金融工具还包括证券、期货、外汇以及黄金、艺术品等,都是财富管理可能涉及到的。

软件状态管理 第3篇

在软件设计过程中, 经常会遇到当软件某个功能进入工作状态后, 由于其完成需要较长时间, 这时软件进入“忙状态”, 给用户的感觉是软件此时无响应, 键盘和鼠标等外部设备也停止了工作。对于这种情况, 一般的解决方法有两种:方法一:新建一个工作线程, 将该功能模块从主线程移到新建的工作线程中;方法二:通过特定界面, 为用户提供相应的状态提示, 使其明确此时软件正在干什么, 从而避免认为软件“死机”。

针对以上情况, 给出一个基于VC的动态链接库, 当软件进入“忙状态”时, 开发人员通过调用接口函数, 在屏幕中央位置出现一个长条状的显示面板, 告诉用户目前软件正在干什么, 当“忙状态”结束, 再通过接口函数关闭该面板, 从而避免了用户的误解。

2 实现

2.1 设计思想

动态链接库InfoPanel采用VC实现。只提供一个stdcall调用的API接口SetInfoText, 原型为:void SetInfoText (const char*lpszText) ;参数lpszText为要在面板上显示的“忙”信息。调用流程如图1所示。

当应用程序需要启动面板时, 调用InfoPanel.dll的输出函数SetInfoText。这时dll将启动用户界面线程ThreadFunc, 线程为用户显示面板窗体, 并显示相应的“忙”信息。当应用程序“忙状态”结束, 只需再次调用SetInfoText, 并将其中的参数lpszText设置为空字符串, 这时dll将关闭面板窗体, 退出用户界面线程, 一次完整的调用结束。应用程序可继续后续功能。

2.2 具体实现

2.3 调用

这里给出在VB.Net中的调用示例。

声明如下:

以上代码在VS2003中调试通过。

3 结语

通过动态链接库将软件“忙状态”信息显示处理逻辑进行了封装, 使开发人员可以将主要精力用于软件主体功能开发, 提高开发效率;对用户而言, 也可在软件处于“忙”状态时, 从界面信息显示上知道软件在干什么, 避免不必要的误解。该设计在使用后取得了良好的效果。

摘要:给出基于VC的软件运行时“忙状态”信息显示面板的动态链接库实现, 并给出该链接库在VB.Net下的调用示例。

从授权书看中国软件业生存状态 第4篇

丢失或被篡改了加密狗, 对正规合法的软件开发商来说, 意味着一种难言的痛, 很受伤, 财富由此不断流失;而当市场出现了大量没有被正式授权经营、使用的软件产品时, 对正规合法的软件开发商来说, 同样是很受伤, 企业知识产权被践踏了, 甚至会影响企业的生存。

“变色”的软件狗引发贪渎大案

作为国内最早老牌OA厂商、行业标杆、拥有上万家用户单位的福建A软件公司对此深有感触, 甚至可以说是“深受其害”。

A软件公司老总说:“今年随着案件调查的不断深入, 现发现自2005—2011年, 约有850—1000个软件狗以身份锁的名义领出, 再以各种方式销售给经销商、代理商和用户, 给公司造成3千多万元的经济损失, 手段之离奇, 金额之巨大, 在软件行业可谓闻所未闻。这些内部贪渎行为, 即使对我们这样老牌、实力型的领先企业, 其冲击力也是不小的, 让我们差点‘马失前蹄’。”

A软件公司候总工对此进行了剖析。A软件公司主要开发和销售各种OA办公软件, 客户主要是党政机关和企事业单位, 主要产品有A智能办公系统和A8协同办公系统, 产品在国内业界以品质稳定、客户众多而著称, 产品价格根据版本和用户数量, 每套价格从几万到几十万元不等。销售方式主要由A公司批发给全国各个代理商, 再由代理商销售给最终用户。

候总工进一步介绍, 国内管理软件主要是由一个软件加密锁和一张光盘组成, 光盘可以任意复制, 但没有软件加密锁软件则无法支持运行文件。软件加密锁是A软件公司的核心部分, 决定了软件的版本和用户数以及价格, 一个软件加密锁的价格从几万到几十万元不等。A软件公司还为用户提供了身份加密琐, 方便用户登录时进行身份认证, 但身份加密锁售价是180元/个。

软件加密锁和身份加密锁同为A软件公司委托指定北京某软件公司开发的, 术语统称为加密锁。两者技术一致, 外形基本一样, 只是内码有差异, 其中对应软件内码的加密锁写入密码后就成为了软件加密锁。而对应的身份密码的加密锁不用写密码, 作为身份加密锁直接销售。

为了便于区分, A软件公司通常把其主打产品之一IOA内码的加密锁定为红色, 身份加密锁的包装则为蓝色。红色包装的加密锁经过程序写入密码, 就成为软件加密锁。红色软件加密锁写入密码后, 身价就“扶摇直上”, 可以卖几万到几十万元不等, 而蓝色的身份加密锁的售价一直是180元/个。A公司的老总或IT高手都掌握用程序写密码的能力与通道。

近几年, A公司内部个别销售人员看到公司产品热销, 但产品收发货管理却不严, 觉得有机可乘, 遂起贪占之心, 以客户需要购买身份锁为理由, 联合公司内部指定的定货人员 (如技术部) 在向北京某软件公司定购加密锁时, 预定的是软件加密锁的内码, 但要求颜色用身份加密锁的蓝色, 这样公司只能按照180元的身份锁来记数。销售人员以180元每个买走后, 由具有写密码或破码能力的人写进软件加密狗的密码, 身份加密锁就变成了软件加密狗, 身价也由180元摇身一变成了几万元了, 一套无限用户数的OA甚至可卖到几十万元。而销售人员再以不带发票的方式批发给全国代理, 从中牟取暴利。单此原因, A公司这五六年至少损失一千多万元。

软件授权书是防止软件被盗用的关键捍卫者

“其实, 软件狗被盗密、篡改、挪用并不是最可怕的, 它只是被打开的第一道门, 如果每个软件代理者、终端用户单位都认准软件授权书, 以是否有软件授权书来经营代理或应用推广软件为根本依据的话, 软件狗被盗用的危害将被控制在最小范围内。近几年, A公司不同种类的OA软件能流向上千家没有被A软件公司正式授权的代理商、机关企业事业单位, 主要原因就是这些单位著作权意识薄弱, 没有很好保护知识产权。”A软件公司老总表示, “在欧美发达国家, 即使破解软件或知道了加密锁密码, 但如果没有正式相关的软件开发商的应用授权书, 也没有单位敢用, 因为使用没有授权书的软件产品, 是会触犯民事、刑事责任的。但在中国就大不一样, 为了节约费用、省钱, 许多单位和个人爱用盗版, 乐用破解版, 致使破解版、破解补丁在网上满天飞, 盗版盛行, 造成中国软件业市场生存状态十分的恶劣。”

我们知道, 软件授权书其实就是正版软件开发方授权给使用方的一种书面文件, 表示授权方认可被授权方可以使用该软件, 许可证号则是软件开发商申请向有关部门申证的、有许可证号的软件才可以进行销售应用。在国外, 在政府软件采购招标中, 通常要求投标人 (指开发商的各地代理商) 在使用他人产品时, 必须要取得制造开发厂商对其的授权证明, 即制造开发厂商同意该投标人使用其产品, 并保证提供相应服务的证明。这样做的目的主要有两个:一是保护招标人 (买方) 能得到正规合法的产品及相应的技术支持和售后服务;二是保护制造开发厂商的权益, 不致造成冒牌、盗用、水货现象泛滥, 鱼龙混杂。目前我国各地政府在采购招标也逐渐采用国际通行惯例。

购买正版软件的使用授权, 如同企业用电用油需要付费一样, 乃是最基本的商业良知, 是每个企业在经营过程中必须支付的成本。根据《中华人民共和国著作权法》《计算机软件保护条例》保护知识产权、打击盗版不仅针对那些生产、经营盗版的企业, 还规定:任何单位在其计算机系统中不得使用未经授权的计算机软件, 也就是说, 最终用户使用未经授权的软件也是违法的。尤其是企业在已经得到软件原厂商方面提醒的情况下, 更应自觉检查和清理企业计算机系统中的未经授权的计算机软件, 否则就是违法的侵权行为。

使用没有正式授权书的软件将是“双输”的局面

那么, 如何识别合法、正版与盗版、冒牌的OA等软件产品呢?再以A软件公司为例, 正版A公司的OA软件均有精美包装盒、彩色封皮说明书、软件授权书、光盘等, 软件授权书上贴有正版软件序列号标签, 凭该序列号可到A网站首页用户服务区注册, 从而验证真伪。任何没有软件授权书和序列号的软件版本, 均不能享受A公司提供的软件升级和服务。

在五六年的时间里, 有850—1000个A公司的加密狗以身份锁的名义被领出, 再以各种方式销售给的经销商、代理商和用户。外面市场, 还有不少AOA破解版, 一些软件开发人员出于爱好或非法盈利目的, 通过不正常的技术手段, 反编译有关PHP代码, 去除版权保护的有关程序, 去除或重写有关核心程序, 或利用注册机算号, 从而达到去除注册限制、去除用户数限制的目的。这些现象, 首先说明了A公司的OA市场是颇受欢迎, 也是值得破解的, 因为存在较高的使用价值或获取暴利的可能。

但是不管是外部破解版, 还是企业内外人员擅自编程篡改软件加密程序, 都是未经授权非法的行为, 看似省钱, 实际得不偿失, 最终害人又害己。不管是OA软件, 还是CRM、ERP, 它们都是有一系列的版权保护机制的, 包括用户注册机制、序列号验证机制、版本控制机制、自动防护机制、自动升级检测机制等, 试想一个未经严格测试、验证的破解补丁或未经正式授权使用的软件产品, 软件公司是不可能对破解版提供技术支持和升级服务的, 且用户在使用中容易出现各类问题, 也无法得到及时解决。未被正式授权经营、应用的软件产品一旦积累了重要的企业数据, 它无异于变成了一个危险的定时炸弹。曾经有不少企业, 当时IT主管随意安装了破解版或被盗用加密狗的OA软件, 当其离职后, 就留下一个烂摊子, 系统故障频发而无法运行, 让企业管理者头疼不已。

有授权证书的正版软件的实施, 对于规范企业运营、提高企业效率、降低办公成本, 有着巨大的提升作用, 是极具投资价值的。设想, 如果应用一个正版的OA软件, 每年能为企业创造十万、数十万元的价值, 而使用破解版或被盗用加密狗的软件产品, 虽然可以节省几万元的前期投入, 但带来的是严重的潜在风险, 那省这几万元的意义何在呢?

一个不完全统计数据显示:目前国内约有30%的中小企业正在使用未经正式授权的各种软件, 其中很多企业的老总并不知情, 如一旦企业的IT技术主管、管理方式发生变化, 将导致企业管理系统瘫痪, 企业管理者将手足无措。

知识经济的灵魂产业就是软件产业。加强保护知识产权, 并严厉打击盗用、盗版软件对国内软件产业的生存和发展就显得尤其重要。否则, 支撑中国软件产业发展的资金和人才就可能不断消退或转移, 中国软件产业便没有明天。

中国工程院士倪光南说, 任何未经软件开发商正式授权的软件, 无论它是从任何渠道而来, 都是彻底的冒牌盗版的产品, 将对中国整个软件产业造成重大的不利影响。首先, 从经济角度来看, 可能产生的问题包括软件产品贬值和对软件供应商的收入造成负面影响等。其次, 软件企业所作的努力和投入的资源也可能付之东流。再者, 潜在着重大网络安全性危险。非授权软件可能包括恶意软件, 往往得不到最新的更新或补丁, 用户的电脑、数据可能经常会受到安全性威胁。另外, 打击软件开发与创新积极性。非授权软件产品的散布、泛滥可能导致软件业的创造与创新积极性严重受挫, 尤其是在个人电脑软件领域的产品开发方面。还有, 从用户企业经营的风险看, 在企业未100%实现软件正版化之前, 随时都面临着承担行政责任和民事责任的诉讼风险。

软件状态管理 第5篇

桥式起重机作为一种物料搬运设备,对于企业生产活动中的重型物料搬运,和生产活动的有序进行具有重要意义。传统的桥式起重控制系统主要采用继电器接触器进行控制,采用交流绕线串电阻的方法进行启动和调速[1],这种控制系统存在可靠性差, 操作复杂,故障率高的缺点,并且造成电能浪费。近年来,由于变频器在起重领域的广泛应用,改善了传统控制系统的一些缺点, 大部分变频器必须配合PLC控制器使用,但PLC的IO刷新一般在整个程序的单次循环结束以后,可能会造成实时性偏弱并且可能由此造成潜在的逻辑风险; 另外,PLC程序编制过程中对于时序逻辑的保证完全依赖于程序员个人的逻辑严谨程度,没有安全的机制保证。普通的单片机程序也存在类似的问题,由于大量地使用了散落在程序各个部分的相互关联的条件分支,系统反应部分的代码显得凌乱不堪,这些都使得程序对于保证严格的时序逻辑存在潜在的风险[2]。

1桥式起重机控制系统特性分析及方案

1.1桥式起重机机构及运行特性分析

桥式起重机桥架两端通过运行装置直接支撑在高架轨道上, 通常用于生产车间内的物料搬运。桥式起重机的基本机构类别有以下两种:

( 1) 起升机构是实现重物上升或下降的机构,根据起吊重物吨位的不同分为主起升机构和副起升机构。

( 2) 运行机构是桥式起重机平行移动的机构,它分为大车走行机构和小车走行机构。

起升机构是位能性负载。其特点是: 重物上升时,电动机克服各种阻力作功,属于阻力负载; 重物下降时,重物本身的重力是下降的动力,电动机成为了能量的接受者,故属于动力负载。起重机的运行机构都是阻力负载[3]。

通过对各机构运行过程的分析可以抽象出一些共性逻辑即每一个独立机构都存在电机正反转、多段速切换、速度限位保护和极限限位保护等相似逻辑。对于应用变频调试的起重设备而言,控制的关键在于变频器起制动过程与机械制动器动作的配合,这个逻辑的合理与否直接关乎变频器运行寿命以及桥式起重机的安全性。起升机构运行开始前抱闸处于闭合状态,要起动运行就要开抱闸,如果开闸过早变频器未建立足够的转矩就会发生溜钩; 反之如果开闸过晚则可能出现磨闸一方面影响制动器寿命和变频器逆变器寿命,另一方面容易引起变频器过流保护系统停止运行[4]。制动器是机械抱闸装置,该装置释放需要时间,在制动器释放过程中变频器不宜加速,否则也会出现磨闸,并且电机堵转时变频器输出频率偏高,造成释放瞬间电机速度过高引起振动。起升机构停止命令发出后,制动器要闭合,同样制动器闭合也需要时间,在此过程中变频器必须保持转矩,否则也会溜钩。

1.2桥式起重机控制系统硬件方案设计

桥式起重机整体结构由中控室、主起升机构、副起升机构、大车行走机构和小车行走机构五大部分组成,由驾驶室人员在驾驶室内通过操作杆给出各机构运行的方向和段速,这些信号通过通信总线给到每一机构,而和每一机构相关的故障及报警等保护逻辑点就近接入该机构控制器,这样整个系统的走线可以最简,调试和检修更加方便。整机电气控制系统如图1所示。

由图1可看出每一机构的IO控制CPU要给出控制逻辑的运行结果需要从三个方面得到输入信息,即从主控室信号采集板处通过CAN通信取到运行方向标志和段速标志,从和本机构相关的保护和控制触点处得到限位、报警、故障以及抱闸信号,从变频器CPU通过串口通信取得变频器故障、允许给速度信号和张闭闸信号,综合以上信号由IO控制CPU计算相应的速度曲线, 给到变频器连续的运行速度,同时给出相应控制输出。

1.3桥式起重机控制系统软件方案设计

高性能的桥式起重机各机构在启动和停止瞬间对于逻辑要求非常高,因为这对起重机运行安全性和寿命均有相当重要的意义,因此必须寻求一种机制以保证运行状态的安全和精确切换。 美国Miro Samek博士提出的量子平台QP( Quantum Platform) 是一种关于反应式的系统,这种系统类比了量子力学中的基本概念,建立了QF( Quantum Frame) 框架以及状态、事件、信号以及状态间的跃迁条件等,这种系统使用事件驱动的方法达到与环境不断交互的目的,非常适合用于嵌入式软件领域[5],特别是应用于工业控制系统的程序设计。本文采用量子平台状态机机制建立桥式起重机控制系统程序框架,确保控制逻辑中各项任务的调度,从而满足桥式起重机对高安全性和高性能方面的要求。

2基于量子平台的桥式起重机电气控制系统的具体设计实现

2.1量子平台状态机机制

量子平台由Miro Samek博士提出,借鉴了量子力学中量子在各种能量态之间跃迁的描述手段来描述嵌入式软件中的编程模型。量子平台本身实际上较为系统地提出了嵌入式系统中状态机的编程模型。量子框架QF提供了更快速、更安全和更可靠的开发并发任务的方法,基于QF的应用不需要直接操作临界区、信号量和其他类似的机制,在编程时不用担心竞争条件、死锁以及优先级反转等带来的风险,但是却可以获得多线程的所有好处。

状态机工程中必须包含状态机内核,这个内核可以以库的形式包含在工程中,由该内核完成状态的跃迁、信号的发送及调度机制。每个工程中可以包含若干个状态机,每个状态机中包含了若干个状态,这些状态可以存在层次包含,在每个状态机中任何时候都只有个状态是活动的,每个状态机都有个属于其自身的消息队列,这个消息队列由事件触发并由QF框架完成消息分发, 并由该状态机中的唯一活动的状态进行响应。每个状态机在初始化的时候可以指定状态机的优先级,量子内核根据设定的优先级进行状态机响应函数的调度。在每状态机中均唯一维护了属于自身的结构体变量,由量子内核利用该结构体完成响应处理过程的参数传递。

2.2桥式起重机机构运行状态抽象

本文中的量子平台状态机基于Miro Samek设计的量子框架, 根据前面所作分析,桥式起重机每个机构的逻辑都可以抽象为应用逻辑和驱动逻辑,应用逻辑和驱动逻辑都对设备运行的稳定性、可靠性和安全性加以保证,据此可将其抽象为应用逻辑状态机App Ctrl和驱动逻辑状态机Drv Ctrl,另外出于构建整个状态机系统间的事件驱动机制的考虑,可以再构建一个系统状态机Sys Ctrl,将这几个状态机的对应类均从qpc: Qactive类派生,由此可以在每个状态机中声明一个类对象并将其强制转化为QActive * 类型,基本情况如下:

本项目利用可视化量子平台的建模工具QM( Quantum Platform Modeler) ,来建立工程,由此可以通过建立层次状态模型,轻易实现层次状态机,并可以自动生成代码框架。由QM建模工具生成的代码具有如下特点,首先为状态机中的每个状态生成一个函数,在这个函数中两个函数指针,一个是本状态类的指针,另一个是事件类指针,以驱动状态机中的Stop状态为例,生成的代码框架如下:

每个状态机都各自维护自身定义的这个对象,并由QF将该指针对象和完成状态响应函数中的第一个指针形参结合完成地址传递,第二个事件指针的值也由QF框架完成传递。

信号的选择对于基于活动对象的系统非常关键,它影响事件和活动对象,因此必须声明一个枚举类型的信号结构体,将所有事件对应信号均封装在内,如定时器信号、按键信号、出错信号以及通信信号等。

为建立状态机机制,首先必须对QF框架以及状态机进行初始化,本文将其封装在BSP_init函数中,如下所示:

另外还必须为状态机系统提供时钟节拍,利用QF_run( ) 函数启动状态机,将上面的BSP_init( ) 和QF_run( ) 均放在在主程序入口处首先调用,这样就建立了基本的状态机工作机制。同时为在状态机之间传递消息还封装了两个事件对象Drv Evt和Error Evt以及两个消息发送函数Post Drv Evt和Post Error Evt,其中PostDrv Evt在应用逻辑状态机中调用以向驱动逻辑状态机发送运行消息,Post Error Evt则在驱动状态机中想应用逻辑状态机发消息, 以此完成状态机间的信息交互。每个状态机都有且仅有其中的一个状态处于活动状态,由该活动状态处理相应的事件消息,而活动状态的父状态是一种隐含的活动状态。

本项目中为了数码管、按键、液晶面板的显示和参数切换、故障保存等还建立了其他的状态机,各状态机中的状态都接受不同的事件消息,这些都在状态机模型建立的时候充分考虑和设计, 其中液晶面板的参数显示和设置采用链表的机制完成。

3结束语

上一篇:教学问题及策略下一篇:频域改进方法