5、关键技术
5.1 基于VC++多线程的串行通信技术
中央监控软件采用基于多线程的串行通信技术来实现对下位的查询和对数据的接收。上位软件采用多线程的“轮询”+“消息驱动”方式,在主线程中完成打开串口、配置串口、初始化串口并创建辅助通信线程,由辅助通信线程轮流向下位不同设备系统发送查询数据指令,并实时监视串口通信状态,等待下位的回复,一旦查询到数据已经发送到串行口上,辅助线程自动接收数据,并向主线程发送数据接收到的消息,主线程取走数据并进行处理。若上位通讯线程在设定时间内一直未收到下位某子系统对查询指令的回复,则发送查询下一子系统数据的指令,这样通过轮询的方式,所有子系统的数据都被传送到上位。根据现场实际,系统设有相应数量的通信线程,监视对应通信线路的串口状态,同时系统定义了发送、发送完成、接收、接收完成4个消息,以完成原定的消息处理功能。另外,考虑到与同构系统相比,异构系统存在多子系统并存且通信线路较长的特点,所以数据在传输上难免受到外界环境的干扰,为了克服因客观原因带来的通信不稳定,在程序设计上采用重要数据多次发送的方法。图4为RS-485总线通讯方式中上位软件通信线程流程。

图4 上位软件通信线程流程图
针对串行通信的特点,采用事件(Event)对象来同步串行通信中各线程对通信端口和内存数据的访问,避免引起多线程间的冲突和死锁。具体通过WaitForSingeObject(),SetEvent()和Reset-Event()3个函数来协调重叠I/O的操作。
5.2 多种通信协议与配置文件的有效配合
基于VC++的集中监控与数据管理软件相当于整个网络体系结构的心脏,它处理数据的速度、合理的编程构架决定着整个系统的性能。
根据现场多设备、多系统并存的实际情况,在数据传输上采用了多种数据帧格式,即不同系统设备有不同的数据帧格式,既有原硬件定义帧格式(下位为远程I/O节点的子系统)又有多种自定义帧格式。在数据的校验方法上,采用校验和(CheckSum)方式来校验接收数据正误,方法是将所有传送字符的ASCII码累加后除以255得到的。
针对系统多设备、多系统的特点,既有直接从现场采集的数据,也有从原有异构系统数据文件中读取的数据;既有模拟量,也有数字量和开关量。这样程序在运行过程中,需要不断修改子系统通信参数,采用修改源程序代码,费时又费力。为了增强程序的灵活性和可扩展性,避免以往组态软件的设计缺陷,系统采用了配置文件与多种数据帧格式相结合的方式,以读取配置文件的方法初始化涉及到每个设备的功能模块。在程序运行前,通过修改配置文件中的信息,灵活地预置了不同设备的通信参数,而无需修改复杂的原程序。系统的配置文件分为两种:通信线路信息文件和数据结构信息。前者包含每条通信线路的端口号、波特率、子系统个数等;后者包括信号个数、信号名称、校验方式等数据帧格式信息。多种数据帧格式和配置文件预置的有效配合,大大提高了系统的灵活性和可扩展性。
5.3 数据库实现技术
数据库服务器上应安装比较通用且功能强大的数据库系统,既方便于WEB服务器进行数据交换,又要能快速存储集中监控层数据。在数据库服务器上建有两种类型的数据库:实时数据库和历史数据库。前者用来存储实时数据,以供WEB服务器进行动态显示,要求有较高的存取速度。后者用来存储每一时段的历史数据,以供用户查询,绘制历史曲线,要求有较大的数据容量。
严格来说,实时数据库应采用专用的工业实时数据库系统来实现,但是对于测控系统而言,其实时性要求不是太高,一些商用数据库系统如SQL Server 2000等已能满足其要求。考虑到集中监控层数据采集与存储速度为ms级,而远程访问刷新的速度为10s,因此实时数据库采用了内存数据库与SQL Server2000数据库相结合的方式。