基于VCL的电力实时监控系统的一点开发心得以及组态初步(一)

                             在我从事的电力行业中,实时监控系统面临一下几个问题:
1.数据海量:一般中小型发电厂,变电站实时刷新数据大于1000个左右;
2.通信方式多样:接口有:RS232,RS485,RS422等,协议有ModBus,Dnp等以及硬件厂商自定义的协议;
3.目标机配置不高:新建的电站工控机配置尚可,老电站的旧设备一般很低;
4.可靠性要求非产高:一个误操作可能造成十几万的直接经济损失;
5.实时性要求很强:国家规定,数据的刷新时间间隔小于2秒;
6.具有可扩充性:用户不希望简单的硬件改动,就要重新购买新的监控系统;
7.表现手法多样:同一数据,可能要做成曲线,棒形图等;
此外,实时监控系统不紧指软件部分,还应该包括与之配套的可编程控制器。

  也许,上面的各条,你在任意一本软件工程的书里面都可以看见,但是,当你面临实际工程时,会觉得无从下手,盲目的编码的后果是效率低下,事后补救措施繁琐。因此,我觉得,一个好的监控系统要具备以下品质:
1.效率高:在一监控界面,200个动态控件的情况下,界面无闪烁,刷新时间间隔小,CPU使用率<30%;
2.控制的可靠性高:在硬件的配合下,控制命令有校验和回复信息;
3.对硬件要求低:我开发用笔记本是Dell的P3 1G,测试用的是MMX 233;
4.良好的扩充性:可编程程序变化不需要修改程序,只需要在数据库中做相应修改;

  在长期的开发实践中,我们形成了自己的一套方法,借助于大量成功的设计模式(“四人帮”的24个及以外的),并且在不断的修正下趋于完善,以至于后来的开发仅仅就是做做通信调试而已,随说尚没有“模式”的高度,但由于是自己的“孩子”,用起来很方便,实时性,可靠性都经历的大量的考验,用起来很放心。

  但是,当我试图阐述这个模式的时候,我又觉得无从说起,因为我还没有达到“设计”模式的境地,下面我就简单说说我的实时监控系统的设计思路:

1、也是最重要的,实时监控系统是以一个动态,实时数据表为中心;
2、数据表前端与界面交互,就是用一个线程刷新界面上的控件(label或着自己的图形控件)
3、数据表的后端与通信交互,就是用另一个线程把通信传上来的数据,在内存中改写;

  (在这里,我想说明一下,我用的词是“数据表”,不是“数据库”,数据库里面有很多表,我们不可能把诸如用户管理之类的表长住内存,而应该把最关键的--数据量与信号量--放在内存中,这样的效率会更高。)

4、那么,怎样设计使得控件--数据库--通信量 很好的定位,需要一个数据结构;
   
5、其他应该注意的:为了效率,我们在初始阶段,把数据表全部读进内存,减少磁盘操作,
   因为内存比硬盘快多了,对于保存数据,就是定时的将内存中的数据写回硬盘(电厂都有要求)。

  从上面可以看出,实时监控系统最关键的就是这张“数据表”和这个“数据结构了”,这需要不断的分析--抽象--概括,把所有的变量进行归类,综合出他们的共性,考虑到一切可能的情况。由于这些变量与硬件(可编程控制器)息息相关,我只能简单谈谈一般的情况:

1.通信传上来的信号量可分为:数据量(电压电流)和开关量(开关的闭合);
2.所有的量都有唯一的硬件地址:设备地址+数据地址+偏移地址;
3.数据量有单位,精度,上下越位值(考虑到报警部分),变比(类似变压器的变比)等等;
4.开关量也不是简单的Boolean值,例如:一台发电机,可能有6种状态(开机,停机,故障,事故,检修,通信中断);
5.数据表与数据结构密切联系,信息一一对位。
6.通信的作用是:把设备的信号读上来,并与数据表中的每个位置做好对应;控制的时候,暂停所有通信,把控制指令发送下去。
7.系统的架构图附后。最后注意的原则:具体问题具体分析。

  说了这么多,似乎没有谈及重点和核心,但是我也不可能把数据结构贴出来,这涉及到公司机密,但是数据表我已提供(在我的组态软件Electricity Designer中),大家可以看看,也许会受到启发。做到这一步,我就萌发了做组态的想法。

                                                                (未完)



                                

查看回复