计算机应用研究
APPLICATION RESEARCH OF COMPUTERS
2000 Vol.17 No.3 P.71-72,86




无人值班变电站监视系统的开发
莫宁　俞宁
摘　要：介绍了一个在Windows 98环境下运行的变电站监视系统，对局域网上视频数据的传输、客户/服务器通信模式、多线程技术等进行了讨论。
关键词：视频 线程 客户/服务器模式
1　前言
　　随着电力系统自动化程度的提高，无人值班变电站也逐渐建立起来。为了及时了解变电站现场的情况，需要一套视频监视系统，能够为中心站值班人员提供变电站现场图象，并对关键部位进行报警检查。当变电站出现紧急情况时，能够得到及时地处理，避免和减少事故带来的损失，同时把来自变电站现场的报警信息存储到数据库中，以备事后查询。下面简要地介绍该系统开发过程中的几项关键技术。
2　变电站监视系统的组成
　　变电站监视系统由现场站部分和中心站部分组成。其中中心站由一台多媒体计算机构成，现场站的构成较为复杂，其硬件组成如图1所示。

图1　变电站现场站硬件结构
　　视频捕捉卡负责捕捉来自摄像机的现场图象，画面分割器主要用于多台摄像机的画面切换和画面组合，控制卡发出控制信号完成控制台上、下、左、右转动和摄像机聚焦、变焦、光圈操作的任务，报警箱检查各个报警传感器的状态，形成报警状态字送给主机。
　　变电站监视系统软件运行环境为中文Windows 95/98。软件开发采用Borland公司的Delphi 4.0编程工具。根据系统任务，系统软件划分为三个主要模块：视频图象传输模块、实时报警模块和数据维护管理模块。视频图象传输模块实现现场图象捕捉、压缩、传输、解压、显示等。实时报警模块实现现场报警信息获取、传输、报警、提示、报警信息存储等。数据维护管理模块负责维护各摄像机、报警点信息以及报警信息管理等任务。
3　数据维护管理模块
　　该模块包括以下几个子模块：
　　1)摄像机信息数据库管理子模块：完成摄像机信息的添加、删除、修改等。
　　2)报警点信息数据库管理子模块：完成报警点信息的添加、删除、修改等。
　　3)报警信息数据库管理子模块：完成报警信息的浏览、编辑、查询、分类统计、分类打印等。
　　由于每台摄像机可以监视若干个报警点，因此摄像机与报警点之间是一对多的关系其表结构如表1、表2所示(*表示主关键字)。
表1 摄像机信息表

摄像机ID(CID)*摄像机名称(name)其它信息字段
01摄像机名称(name)...
0210kV高压室...
0310kV电容室...
.........

表2 报警点信息表

报警点ID(WID)*报警点名称(name)其它信息字段CID
01控制柜1...01
02控制柜2...01
03高压瓶1...02
............

　　其中报警点信息表中CID字段表示此报警点所关联的摄像机ID，具有相同CID的报警点构成了一个防区。当防区内任一报警点报警时，即认为此防区报警，此时应立即切换到该防区内的摄像机，显示此防区现场图象。 
4　视频图象传输模块
　　现场变电站主机把通过视频捕捉卡获取的视频数据经过压缩后通过计算机网络传送给中心站播放。
4.1　图象捕捉与压缩
　　由于图象信息量相当大，例如一幅CIF标准352(298的24位真彩色图象，其数据量为304,128字节，如每秒捕捉10帧，则数据量为3,041,280字节/秒。如此大的数据量若不进行压缩，很难实现图象的准动态传输。由于视频监视系统不要求连续视频播放，因此我们采用台湾FlyView视频捕捉卡，它可以获得现场摄像机的实时动态画面，并采用JPEG压缩技术，压缩品质设为75～80，图象质量令人满意。
4.2　视频图象传输软件设计
　　我们选用Delphi 4.0作为开发工具，它提供了两个Internet组件TNMSTRM和TNMSTRSERV，可以以流的形式方便地实现像视频数据流这样大量数据的传输。视频图象传输软件分为现场站软件和中心站软件两部分，均设计成Windows多线程方式运行。现场站软件包括两个线程：一个线程用于图象捕捉和压缩，另一个线程以流的方式实现视频数据的传输。对中心站软件来说，一个线程用于接收视频数据流，另一个线程用于解压、显示图象。在实际软件设计时应解决好线程通信、同步问题，实现图象连续捕捉、压缩、传送和回放。
　　在现场站软件中，实现视频流传送线程由实现图象捕捉压缩的线程启动(Resume)，图象数据传送完成后应主动挂起(Suspend)。实际数据传输由以下代码完成：
...
//经过压缩的JPEG图象数据保存在流ImageStream中
NMStrm.PostIt (ImageStream); 
　　　　　　　　　//NMStrm为TNMSTRM组件对象实例
...
　　与现场软件相似，中心站软件中完成图象解压、显示线程在收到一幅完整JPEG图象数据后启动(Resume)，完成图象显示后主动挂起(Suspend)。实际数据接收由以下代码完成：
...
//当有数据到达中心站时，将激发TNMSTRMSERV组件的OnMsg事件
procedure TForml.NMStrmServMSG (Sender: TComponent: const 
　　　　　　　sFrom: String: strm: TStream);
begin
　ImageStream.LoadFromStream(strm); 
　//将图象数据保存到ImageStream流中传递给图象显示线程
DisplayThread.Resume; //启动显示图象线程
...
end;
5　实时报警模块
　　变电站现场各个传感器的状态由报警箱检查并形成报警状态字送给现场主机，现场主机对报警状态字进行处理后，形成报警信息传送给中心站主机。现场站与中心站采用客户/服务器模式通信。中心站作为服务器处于监听状态，现场站作为客户，一旦出现报警，现场站即向中心站提出连接请求，并传送报警信息。
5.1　报警信息的形成
　　报警箱根据各个报警传感器的状态形成32位的报警状态字，每一位对应一个报警传感器的状态，0表示没有报警，1表示有报警。现场站主机定时读取报警箱的报警状态字。如果某个或若干个报警点处于报警状态，查询数据库获取所有报警点的标识WID(两字节)。为了避免当同一报警传感器发生抖动(如烟雾传感器)在较短的时间内产生多次报警，应判断同一报警点两次相邻报警的时间间隔，如果此间隔小于设定的时间间隔，即认为是同一次报警，此报警被忽略，否则认为是一次新的报警。另外为了防止误报警，报警数据有必要增加校验位。可以采取XMODEM校验方法，即取所有报警数据字符二进制值和除以256后的余数，作为校验字节。最后形成的报警信息格式如下：

5.2　现场站与中心站通信过程
　　为协调现场站与中心站的通信，定义了以下的通信控制符：
Const
　ACK=$01 //确认
　NAK=$09 //不确认
　　具体的通信过程如图2所示。

图2　报警通信过程
　　(1)现场站主机向中心站主机提出连接请求。(2)中心站主机响应连接，完成连接。(3)现场站主机送报警信息到中心站主机。(4)中心站对收到的报警信息进行XMODEM校验，若校验正确向现场站主机发送确认ACK控制符，否则发送不确认NAK控制符。(5)如果现场站主机接收到ACK控制符，则标志本次报警信息传送成功，主动断开与中心站主机的连接。否则延时1秒重发报警信息，直到收到中心站送回的ACK控制符为止。
5.3　报警信息处理
　　中心站主机收到报警信息后，根据报警点标识WID查询数据库，获得报警点的名称、位置、具体报警内容等信息，并且通过声音、文字等形式提醒中心站值班人员。另外现场站主机在收到ACK控制符后，控制画面分割器将画面切换到报警点所在防区中的摄像机，这样中心站值班人员就可以通过声音、文字、图象准确详细地了解变电站现场的情况，从而作出及时的处理。
6　结束语
　　在本系统开发过程中，由于采用了多线程的方法，为了保证线程之间能协调运行，需采取一定的机制使各个线程同步，如信号灯、互斥量、临界区等。在实际的应用系统运行中可能会出现一些异常现象，如通信数据丢失、通信异常中断、操作过程不当等等。这些情况在开发、调试时不容易发现，但实际运行中却会发生。所以在应用系统开发中，需要对这些情况进行考虑，采取相应的措施，如错误陷阱等技术，及时捕获异常并进行处理，以保证系统在实际应用中能稳定运行。
　　上面介绍的无人值班变电站监视系统已经开发完成，并投入了实际运行。从实际的运行效果来看，系统采用的开发方法是切实可行的。由于本系统涉及到图象处理、数据通讯、数据库等多方面的技术，希望能对从事这方面工作的技术人员有所帮助。
莫宁(武汉水利电力大学 武汉 430072)
俞宁(武汉水利电力大学 武汉 430072)
参考文献
1 Charlie Calvert著, 潇湘工作室译. Delphi 4编程技术内幕. 北京：机械工业出版社, 1999.6
2 Todd Miller & David Powell著, 林君工作室译. Delphi 3 开发使用手册. 北京：机械工业出版社, 1998.5
3 Delphi Online Document
收稿日期：1999年10月25日
