文献标识码:A
文章编号: 0258-7998(2011)12-0022-03
随着我国高速公路隧道里程的日益增长,高速公路隧道的高效、安全运行面临着严峻的挑战[1]。快速、安全、可靠的高速公路隧道监控系统,是指挥车辆有序通行、实时掌控交通流参数值、车辆运行环境指标和现场设备运行状况、减少和及时处理交通事故的主要保障措施[2]。
在高速公路隧道监控系统开发方面,国内有许多案例采用Windows下通用的软件开发平台(如VC++、VB、DELPHI)进行开发。由于高速公路隧道监控系统是一个典型的系统集成工程,现场设备的接口形式和数据类型多样,数据量和集成难度大[3],尤其在使用大量PLC的场合,实现监控系统与PLC的通信比较困难。因此,使用通用软件开发平台,其开发难度大、周期长、调试困难。由于所开发的监控系统是非开放的软件,后期的维护难度更大。
而目前广泛使用的组态软件,能够更好地解决这个问题[4]。组态软件作为专业的工控软件,在系统界面设计、数据接口、功能组合等方面的开发非常方便和稳定,可以很容易地实现和完成监控层的各项功能[5]。此外,由于组态软件的开放性,系统管理人员可以轻松维护系统。因此最近几年,组态软件开始被系统设计人员应用到高速公路隧道监控系统的开发中。
由于组态软件采用脚本语言,提供给用户的编程开发的功能相对较弱。在缺少I/O驱动的情况下,如在使用组态王的案例中,还需使用通用开发平台编写通信程序,并为组态软件提供OPC服务器功能;在与情报板这类可变长度数据、非实时刷新的设备交换数据时,组态软件同样存在困难。针对以上问题,本文的设计思路是利用组态软件及其脚本语言,实现与所有设备的通信时无需再借用OPC技术开发通信程序,以减少数据的交换次数,提高系统的运行效率,同时提高系统的完整性和开放性。
本文介绍了高速公路隧道监控系统的结构及实现方法,针对现场数据采集和执行设备的接口形式多样、数据集成难度大等问题,既有针对PLC使用的稳定可靠的I/O驱动,也有大量使用API函数设计的通信程序,并使用脚本语言直接完成实时数据与情报板的通信。通过系统实际调试运行验证了该设计方案的可行性。
1 监控系统的构成
某高速公路的一个机电标段中包含多条隧道,每个隧道采用了7~8套OMRON公司CS1D-S系列的PLC,并配有以太网模块。这些PLC负责车道指示器、汽通门、风机、照明灯、水泵等开关量的输入/输出,照度、一氧化碳(CO)、能见度(VI)、风速(TW)等模拟量的输入。该机电标段,还包含了雷达车辆检测仪28台,各种规格的情报信息标志35套,还有3套能见度检测仪和3套气象数据检测仪。所有这些设备分布在大约200 km高速公路沿线收费站和服务区的附近路段,并且通过RS-232接口,先用光纤传输到就近的各个收费站或者服务区的机房内,再接入串口服务器,然后进入由光纤构成的以太网。其网络结构框图如图1所示。
这些现场设备通常不采用标准的MODBUS协议,无法通过组态软件的I/O驱动获取数据,只能通过用户编写通信程序与其进行数据交换。
2 监控系统软件设计
本文采用iFIX2.6的浙大中控OEM版Sview2.6,该软件的脚本语言是Microsoft VBA6.0,与VB6.0相比,Sview2.6除了不能编译成独立的可执行程序外,其他的编程语法、语句及调试方法等功能两者基本相同。
2.1 实时数据库的建立
运行iFIX软件,打开Sview数据库管理器。从菜单栏选择“驱动器”,打开“OMF”,对驱动程序进行设置和添加PLC站点,并为每个站点定义数据块。驱动程序以数据块的形式与PLC交换数据,这是一种高效的通信方式;同时,在PLC编程时,对于要组态的数据,尽量集中存放,避免过多的数据块。在数据库中添加标签,要注意“I/O地址”的输入格式,如图2所示。
2.2 建立控制系统主画面
在iFIX工作台中,建立所需要的各个画面,并链接动画。如果需要报警,则在建立实时数据库时,设置好报警条件,然后在画面中增加报警控件;如果需要曲线,则启动历史定义程序,定义好要储存的历史数据,并在后台启动历史储存程序,然后在画面中增加曲线显示控件[6]。到此,作为一般性的组态任务基本完成。
考虑到通信程序必须和监控软件始终同时运行,而且脚本程序通常是画面文件的一部分,因此在画面设计时,做成了上(占12%)、下(占88%)两部分。其中上部是始终运行,下部则可以通过上部的切换按钮,进行画面切换。上部画面称之为“主菜单”,并在此画面的代码中编写通信程序,如图3所示。
2.3 实时通信的实现
微波车辆检测器设置为每分钟自动发送一帧数据;气象和能见度检测则先发送命令,然后读取数据。所有的串口服务器,在监控计算机上映射为虚拟的串口。微软的MSComm控件是被广泛应用于串口通信的控件,但由于MSComm控件只能支持最多16个串口,故不适合在本系统的环境中使用。为此,本系统尝试使用API函数实现串口通信。API函数的声明是:可以使用VB的API文本浏览器,复制到iFIX项目中。使用API初始化串口步骤如下:
(1)调用CreateFile创建句柄,如果结果大于0,可以进入下一步,否则中止。
(2)调用GetCommState取得设备参数,根据实际需要修改其中部分参数(如波特率、校验、数据位和停止位等)。
(3)调用SetCommState设置修改后的设备参数。
(4)调用SetCommTimeouts设置超时参数,其中ReadIntervalTimeout须设置为-1(即为16进制FFFFFFFF)。
(5)调用SetupComm设置输入/输出缓冲区大小。
至此,串口的初始化完成,然后可以定时接收(ReadFile)和发送(WriteFile)数据了。CloseHandle则用于关闭串口。串口初始化和能见度、气象仪程序流程图如图4所示。
能见度和气象仪共6套,利用一个500 ms定时器,轮流进行数据收发,数据刷新周期为3 s。采用的通信方式是先接收,对数据长度和头尾几个字节进行校验,若校验符合,则进行数据处理,然后发送读命令。能见度接收数据长度为22 B,其中15 B~18 B为单精度浮点数。数据处理采用API函数CopyMemory,采用传递地址的方式,把字节数组中的内容复制到一个单精度变量中(如按照IEEE 754标准进行换算,但计算纷繁复杂),然后把这个单精度变量的内容写到iFIX实时数据库标签中(标签的I/O地址采用SIM驱动器的地址空间)。
2.4 情报信息标志通信的实现
考虑到情报信息标志为非实时刷新,因此采用Access数据库来保存每块信息标志有关的内容。当程序打开时,自动读取数据库中的所有记录,并把其中的关键信息添加到“选择对象”ComboBox中。当用户在复合框选择一块信息标志时,程序从数据库中读取该信息标志的有关信息及上次发送的内容,并显示给用户。当用户成功下载内容到信息标志时,把相关内容更新到数据库中。
在VBA中处理汉字的方法是:一个汉字为一个字符,可以使用MID()函数截取一个字符,然后用ASC()函数取得该字符的值,如果是汉字,则该值为负数,否则为正数。该负值加65 536,得到该汉字的双字节机内码,整数除256得到高字节,取模256得到低字节。
如图5所示,画面右下角的“高级功能”按钮用于启动情报信息标志设备厂家专用软件。虽然设备厂家软件功能齐全,但从使用结果来看,本文开发的系统响应速度快,一个请求过程平均耗时在0.1~0.6 s之间(包括数据库的处理时间、通过日志记录的数据计算),而情报信息标志设备厂家专用软件正常情况下处理时间需10 s左右,有时还有错误的响应(如网络不通),但显示状态仍为正常等现象。
以iFIX为平台开发的高速公路及其隧道项目数据监控系统已投入正常运行,并取得了比较满意的效果,系统运行稳定可靠、占用资源小、维护方便。使用组态软件开发隧道监控系统,能够充分发挥组态软件灵活多样的组态功能;同时使用大量的VBA6.0脚本语言编写通信程序,解决了组态软件数据集成难度大的问题,提高了系统运行效率,降低了系统的开发成本。
参考文献
[1] 王志伟,杨超.高速公路隧道监控系统的现状与发展[J]. 现代隧道技术,2009,46(6):8-16.
[2] 赵忠杰,陈井伟,朱斌.基于PLC网络的公路隧道测控系统实现[J].微计算机信息,2007,23(1):43-44.
[3] 袁向阳,郑宏,孟峰.基于PLC的高速公路隧道监控系统及其数据集成[J].电气应用,2006,8(4):34-39.
[4] 周晓军,刘洪亮,胡康.WinCC及S7-300在电封闭交流传动测试台中的应用[J].控制工程,2010,17(5):655-657.
[5] 钟路,戴远.城市隧道监控系统的集成设计[J].武汉理工大学学报,2010,32(15):119-122.
[6] 浙大中控.Sview2.6电子手册[Z].2003.