摘要
去年三月份,公司启动电力用户用电信息采集系统项目,我被任命为项目负责人。电力用户用电信息采集系统是国家电网公司坚强智能电网建设的一部分。电力用户用电信息系统实现对所有用户的用电信息的采集,用户面广量大,用电环境各异,能够到达的远程信道不同,现场安装的终端类型也各不同。因此公司提出了软高的可靠性要求。
为了满足电力用户用电信息采集系统的可靠性要求,我带领团队对系统的运行环境和特点等进行分析,找出可能影响系统运行可靠性的原因。根据分析出的结果制定了提高系统可靠性的措施:一是应用架构设计风格和设计模式,降低采集终端软件的复杂度;二是采用补采及数据校验机制,保证数据的完整性和正确性;三是在采集终端中采用看门狗和进程心跳检测机制。
项目完成后在重庆**区进行实施部署,投运后一直非常稳定,得到重庆**供电局的一致好评。
正文
我所在的公司从属于电力行业,去年三月份,公司启动电力用户用电信息采集系统项目,我被任命为项目负责人。电力用户用电信息采集系统是国家电网公司坚强智能电网建设的一部分。用电信息采集系统从总体上分三层实现:主站层、终端层和表计层。主站层主要有营销业务处理子系统、前置采集子系统和数据库管理子系统。终端层主要负责表计数据采集和简单的处理存储。主站和终端的通信方式目前用得比较多的是CDMA/GPRS。终端主要通过RS485串口、电力线载波和表计进行数据交换。
公司根据已有的人力资源和经验,决定对主站应用软件和终端软硬件进行研发,表计统一进行采购。主站层主要进行应用服务器的软件研发,主要满足供电局营销部门的业务要求。终端层,根据采集系统规范的要求,现场终端分为三类,一是集中器抄表终端,主要对居民用户表的用电信息进行采集;二是专变采集终端,主要对大客户(如工厂)的用电信息进行采集及进行负荷管理;三是公变采集终端,主要对公用变压器的用电信息进行采集及对电能质量进行监控。
电力用户用电信息系统实现对所有用户的用电信息的采集,用户面广量大,用电环境各异,能够到达的远程信道不同,现场安装的终端类型也各不同。由于系统使用环境的复杂性,以及用电信息数据的完整性和正确性,因此公司提出了软高的可靠性要求。要提高产品的可靠性指标,首先要分析影响产品可靠性的原因。一般来说影响产品可靠性的原因有如下一些:
一、运行环境,软件可靠性定义是相对于运行环境而言的,一样的软件在不同的运行环境下其可靠性是不一样的。不同的用户操作习惯不同,会影响软件的可靠性。软件的可靠性是软件缺陷和用户的可预测性的一个复杂函数。
二、软件规模,也就是软件的大小。一个只有几百行代码的软件和一个几千万行代码的软件是不能相提并论的。
三、软件内部结构,结构对软件可靠性的影响主要是软件的复杂程度,一般来说,结构越复杂的软件,所包含的软件缺陷数就可能越多。在进行软件设计时就要有意识地采用各种降低复杂度的架构策略,如模块化设计,分层设计等等。分而治之的方法是最好的降低复杂度的方法。
四、软件的开发环境和开发方法,软件工程表明,软件的开发方法对软件的可靠性有显著地影响。例如,与非结构化开发方法相对,结构化方法可以明显减少软件的缺陷数。
五、软件的可靠性投入,软件在生命周期中的可靠性投入包括可靠性设计、可靠性测试、可靠性管理和可靠性评价等方面投入的人力、资源、资金和时间等。
我根据用电信息采集系统本身的特点,结合以上五个影响软件可靠性的因素,除了加强可靠性管理外,我制定了提高用电信息采集系统可靠性的三点措施。
一、应用架构设计风格和设计模式,降低采集终端软件的复杂度。好的设计是成功的一半。在项目开始我就牢牢把握设计关。采集终端应用软件根据功能要求主要分为采集子系统和主站通讯子系统。
在进行采集子系统的设计时,项目组一致认为采用分层设计比较符合实际情况。按层次由上到下分为应用层、表计规约层、现场总线规约层和数据链路层。表计规约层和现场总线层都采用工厂方法设计模式,来获得具体的表计规约对象和现场总线对象。总体流程是采集子系统应用层根据具体的表计类型获得表计规约对象,完成表计规约的组帧工作;然后交给现场总线层,现场总线层根据当前的通道类型获得具体的现场总线规约对象,完成现场总线规约的组帧工具;最后将报文帧传送给数据链路层发出去。返回时按相反的顺序解包,最后得到需要的数据返回给应用层。分层设计的优点是层与层之间通过接口通信,下层为上层提供“虚拟机”,这种设计方法为采集子系统支持各种类型的表计和丰富的现场总线提供了方便。
在主站通讯子系统中,我们采用管道-过滤器风格的设计,并辅以设计模式的命令模式。主站命令帧的格式可以明显分成三部分:帧框架处理、应用数据处理和具体功能处理。帧框架处理器对帧长度和帧校验进行处理,成功后将命令帧的帧头帧尾、帧长和校验码去除,提取出应用数据后交给应用数据处理器,应用数据处理器主要进行帧序号处理、帧时限处理和用户密码验证,成功后提取出具体的功能码传递给功能处理器。具体功能实现采用命令模式,这样可以将功能执行部分和命令分析部分解耦。
二、采用补采及数据校验机制,保证数据的完整性和正确性。用电信息采集系统对采集数据的完整性和正确性要求非常高,完整性要达到98%,正确性要达到100%。
我们对采集子系统进行分析,发现影响采集成功率的主要原因是采集信道的不稳定,现场总线目前主要有RS485和电力线载波。而电力线载波的抗衰减和抗干扰的能力都比较差,导致采集成功率降低。为了达到要求,数据采集子系统增加补采功能,对于未采集成功的数据进行多次重试。
数据在存储和传输时都进行数据校验,最大限度防止出错。在采集终端中,数据文件是主要的存储方式,我们采用“校验和”的方式对数据文件进行正确性校验。采集数据在从表计到采集终端这一部分主要采用电力线载波进行传输。由于电力线载波的不稳定性,极易导致数据出错。我们采用在数据传输帧中加入CRC校验的方式来保证数据的正确性。另外由于表计行度等用电信息都是采用BCD码来传输和保存,在数据处理之前对数据进行BCD码验证,发现非BCD码则说明数据错误。通过这些手段,有效地保证了数据的完整性和正确性。
三、在采集终端中采用看门狗和进程心跳检测机制。采集终端安装在现场,由于维护较麻烦,需要提高采集终端的可靠性。采集终端采用LINUX系统,多进程设计。守护进程负责喂看门狗和对各子功能进程进行监测,发现子功能进程不正常则进行子进程重启。
经过项目组半年多的努力,项目终于成功完成了,在重庆**区进行实施部署,投运后一直非常稳定。通过本次开发实践我明白了要提高软件的可靠性就要在先期开发时就重视软件的可靠性设计,实施可靠性管理。