在RS-485总线传输接口上,上位工控机需采用RS-232/RS-485转换板,将PC串口RS-232信号转换成RS-485信号,而下位机的情况较为复杂,对于以计算机为下位的子系统,也需要安装RS-232/RS-485转换板,对于以PC-BASE控制器和远程I/O节点为下位的子系统,其硬件系统支持RS-485通信,不需要安装其他硬件设备就可以实现通信。
3.2 软件设计
系统在VC++6.0环境下,使用多线程技术开发监控软件来实现设备系统的集中监控与数据管理,其系统功能模块如图2所示。

图2 VC++监控软件功能结构模块图
集中监控主机向各子站数据采集控制器和子系统主机发送查询数据指令,并由数据打包模块将指令整理成数据查询报文,通过通讯模块传给数据发送模块与下位设备通讯;有查询报文返回时,再通过通讯模块、数据解包模块将数据还原,然后通过数据存储管理模块对数据进行处理和存储,其中内存中的实时数据传给实时监控模块,硬盘中的数据供数据统计分析模块访问。
软件前台功能设计上,实时监控模块主要包括动态流程图显示、动态曲线显示、实时报警显示、各线路通信状态显示等;数据统计分析模块主要包括总体运行分析、数据检索编辑、历史曲线查询、历史数据统计、输出报表及打印等功能,此外,前台功能还包括各工作线路模块、通讯信息输出模块。系统具有常规SCADA软件的所有功能,实现了全面监测设备和处理信息的任务。
多线程串行通讯技术见关键技术部分。
3.3 串行通信驱动程序的设计
在通信功能的实现上,可以直接使用微软的易于实现串口的通信ACtivex控件MSCOMM,但是根据串行通信多类型、设备多的特点,本系统采用了WIN32 API函数来编写串口通信类的方法,方便、灵活地实现了串口通信功能。
Win32 API是一个复杂函数、消息的集合,它把对串口和其它通信设备的支持与基本输入输出驱动程序集成为一体,系统只需要通过设备控制模块DCB的数据结构对串行口和串行通信驱动程序进行配置。
串口通信编程实现的基本步骤:打开与外设相连的串口,根据通信协议对通信控制模块(DCB结构)进行配置;然后初始化串口的接收和发送缓冲区大小;进行读写操作;通过校验,对正确接收的数据进行处理;最后在串行通信结束后,关闭串口。
3.4 数据的提取与传输
对于需要直接从现场采集运行数据的子系统,一般采用远程I/O节点和基于PC-Based可编程数据采集控制器进行数据采集,并将数据整理成数据帧后发送到485总线上,由上位机对数据进行处理和整合。
对于已有监控系统的子系统,由于其监控软件大多是组态软件开发的,因此系统采用VC++6.0开发数据传输软件的方式,一般互操作性强的子系统,采用DDE方式可读取实时数据的方法,而针对于软件封闭、互操作性较差的子系统,则采用直接从其数据库或数据文件中读取最新数据的方法,下位软件周期性地监视封闭系统数据库或数据文件的属性,如果属性发生了变化,说明有新的数据写入,提取其最新数据记录,并将数据记录整理成数据帧,存入相应的动态数组中,等待收到上位的查询指令后发送。并将数据通过RS485总线,传送到上位计算机。
3.5 数据的存储管理
根据系统多设备、实时更新、数据量大的特点,为了方便对数据的操作,更好地管理和保存数据,整个数据库系统设有实时数据库和历史数据库。实时数据库必须满足实时更新、实时处理的特性,并要利于WEB服务器进行实时动态数据交换,因此实时数据库采用内存数据库和硬盘上的SQL Server2000数据库相结合的方式;历史数据库用来保存存放实时数据库中到期的需要永久保存的数值量数据,历史数据库存储量大,保存时间长,采用SQL Server2000数据库。实时数据库和历史数据库的配合使用,实现了数据的优化管理。