第三方软件与监控系统远程数据交互的应用
2013-09-10陈志军
张 涛 陈志军
(新疆大学电气工程学院,新疆 乌鲁木齐 830000)
0 引言
现代科技的发展为我们的日常生活提供了越来越多的便利,自动化技术的发展不仅提高了生产的效率、降低了能耗,同时大大节约了劳动力。随着网络技术的发展,监控系统也要求实现网络化,不少监控系统推出了网络版本,但是每加装一套网络版本都需要软件的授权,且安装需要专业人员指导操作方可完成相关配置;当工程技术人员出差在外,查看监控平台的数据时,还需携带软件及授权,非常不方便。同时,很多既有的监控平台大体运行正常,企业不愿意投入大量资金对原有系统做网络升级改造,这时开发一个第三方系统来实现监控系统在拓扑意义下的网络化显得尤为重要[1-3]。有了这套第三方软件系统之后,非网络版系统或原有系统不作任何改动,就可以实现数据的远端网络节点显示与控制,省去了设备改造或升级所需要的时间及资金耗费,这是一种很多企业可以接受的方式[4-6]。
1 软件构架设计
由于是独立于监控系统外的第三方软件平台,软件首先应当具备网络通信能力,只有网络链路层打开后,后续工作才能展开。远程网络系统通用的是TCP/IP协议,因此系统采用TCP/IP协议进行通信。TCP/IP协议并不完全符合开放系统连接(open system interconnect,OSI)的七层参考模型[7-8]。该模型的目的是使各种硬件在相同的层次上相互通信。虽然没有严格按照OSI标准,但是TCP/IP协议依然比较复杂,若开发人员直接从底层进行开发,需要了解操作系统复杂的应用程序接口(application programming interface,API)函数及其相应的调用关系,难度很大,且也不利于程序的开发和调试。
为此,Windows操作系统专门开发了Winsock.ocx控件。该控件定义了一套Microsoft Windows下网络编程接口规范,不仅包含了人们所熟悉的Berkeley Socket风格的库函数,也包含了一组针对Windows的扩展库函数,使程序员能充分利用Windows消息驱动机制进行编程。Windows Sockets规范的本意在于给应用程序开发者提供一套简单的API,并让各家网络软件供应商共同遵守。此外,在一个特定版本Windows的基础上,Windows Sockets也定义了一个二进制接口(ABI),以此来保证应用Windows Sockets API的应用程序能够在任何网络软件供应商的、符合Windows Sockets协议的实现上工作。
在工控方面,组态软件有其独特的优势,方便工程组态开发,同时不需要对底层有过多的了解,但是组态软件对实时性要求比较高。一般在控制过程中,不需要有其他一些操作保证控制系统的稳定性,那么组态软件和远程进行直接通信势必会大量占用组态资源,造成软件超负荷或者不能及时响应现场级别的要求。在一个组态工程中并不是所有参数都需要远传,而是其中某些必要的参数可以作为远端监控。为了降低组态软件的负荷,开发一套第三方软件来实现这个功能显得尤为必要[9-10]。
图1 系统架构Fig.1 Architecture of the system
从图1可以看出,第三方软件的服务器端需要完成响应客户端连接的请求,同时执行相关命令从组态软件端取得数据,再回传给所需要的客户端。
2 软件模块设计
2.1 服务器端的模块设计
服务器端的任务相对较多,它负责和监视与控制通用系统 (monitor and control generated system,MCGS)进行数据交互,同时响应客户端的请求,按要求处理和传输数据。服务器主要由12个模块组成,如图2所示。
图2 服务器软件模块组成图Fig.2 Composition of the server software modules
部分核心模块的功能简介如下。
①OLE接口模块
OLE接口模块通过ActiveX技术和组态软件动态交互数据,主要是对组态实时数据库中的数据进行读写操作。为了达到模块调用的通用性和外部可扩展性,该模块已经变成标准的动态链接库。该链接库的代码如下。
②动态连接管理模块
中职学生普遍存在理论学习能力弱、学习主动性差等特点,部分中职院校把课程教学分为理论、实践教学两个部分,在多媒体教室进行理论教学,实践教学则在实训室完成,这种人为地把教学分割成两部分违背了教学规律,不符合中职学生的认知特点。特别是对于实践性较强、与工程联系紧密的课程,教学设计时应该重点考虑如何让学生动手操作,把有关知识和技能融入任务中,让学生在实践中主动学习。
远程客户端要同服务器交互数据,首先要同服务器建立连接。由于远程客户端的数目和访问时间都是不确定的,所以对于连接管理模块要求相对较高,既要实现多方通信,又不能使连接产生冲突。在此采用Winsock控件数组机制,动态加载或卸载一对一连接用控件。这时需要一个控件专门监听指定端口,当检测到端口有合法连接请求时,从控件数组里面动态加载一个连接控件,并将连接权转交给相应控件。
首先将控件设定为监听模式Winsockm.Listen,然后在Winsockm_ConnectionRequest事件中响应并处理合法的连接。由于TCP/IP协议三次握手的特性,必定会留下请求方的IP地址,因此,调用安全管理模块判断IP地址是否处于合法区段,若满足,则建立连接,否则不响应连接请求。响应成功后,执行动态连接程序,加载空闲动态控件数组来接替连接过程,具体程序如下。
若建立连接后,客户端长时间没有操作请求,模块将会自动断开连接,或客户端主动断开连接后,模块将卸载复位相关连接对象,保证系统最优运行。
③通信命令模块
通信命令模块是数据交换的核心,只有正确的通信命令系统才作响应。这个模块约定了命令类型、命令的操作数以及命令的响应方式。
客户端和服务器端主要有连接请求与响应、身份验证、数据请求、数据修改、断开连接请求等命令格式。这些命令都做成相应的命令库,客户端和服务器端都应该遵守这个库。
④数据校验模块
为了提高传输的效率,通常要将不同数据打包成一个大的数据包发送,因此单次通信的通信量较大。为了保证数据接收端接收数据的准确性,必须对数据作校验处理。为此,校验模块主要采用一套自定义的校验方法,即采用数据打包传送的方式,结构如图3所示。数据包的开始两个字节作为数据包的长度信息,若长度值和实测数据包长度相同,则长度校验通过,否则认为数据错误。第3个字节为数据开头特征信息,若该值符合约定,那么特征校验通过,否则信息错误。数据区采用数据区位加数据信息排布模式,一个数据区位号占一个字节的空间,能表示256个数据,即高四位表示16个区,低四位表示16个位。但是为了区别数据开头和结尾特征码,预留了两个区位号作为特征码使用。这样数据区传送的数据最多为254个,大大提高了数据的传输量。变量区位在客户端和服务器端进行存储,接收到区位码时再提取出相关变量并作处理即可,避免了实际变量改变后在传输中所造成的问题。当检验到结尾特征码时,停止数据处理过程。
图3 数据包结构图Fig.3 Structure of data packet
⑤数据存储模块
数据存储模块主要是将获取的数据实时存储到数据库。为了避免软件直接采用API函数访问数据库的繁琐方式,本模块采用ADODC控件作为访问数据库的接口控件,只需要调用其相关方法就能方便地存储数据。使用控件时必须首先设定控件的连接字符串。通常采用的方法是在Windows下的开放数据库互连 (open database connectivity,ODBC)管理器中生成相关的连接字符串,再赋给控件。相关代码如下。
然后指定相关的数据源。采用控件的ADDnew方法可以向数据库里面追加记录。
2.2 软件客户端的模块化设计
客户端软件主要是工程技术人员获取远端服务器参数的工具,其应当具有易操作、界面友好等外在特点。同时,客户端软件必须具备通信功能,并要求有数据处理和决策、实时显示现场数据、实时远程调整相关参数、实时存储数据以及与Matlab实时交互数据等功能。客户端系统构架如图4所示。
图4 客户端系统构架图Fig.4 Architecture of the client system
由于客户端的很多模块都和服务器端是对应的,在此只介绍数据显示和调整模块以及程序接口模块。
①数据显示和调整模块
数据显示采用趋势控件Trend.OCX。设定其xAxis下的XDataType设定为Time型,这样就可以显示实时时间趋势图。利用.AddXY 0,Time,Value语句就能画出相关曲线。
远程调整参数用到的是一个slider.ocx控件,若检测到slider对应的参数发生变化,就改变它的position属性,从而改变滑块位置。当滑块位置改变时,触发positionchange事件,然后在该事件下驱动发送数据,更改远程参数。
②程序接口模块
VB虽然在界面开发方面有独到的优势,但在数据处理方面却不及Matlab。为此,结合两个程序的优点,采用ActiveX技术将两者无缝对接起来,发挥最大的优势;采用Matlab.application对象作为接口,利用Execute执行Matlab命令。采用该方法可以实现VB和Matlab的无缝对接。采用Matlab实时处理采集到的数据,然后决策输出,可以实现一些复杂优化算法。
3 软件运行测试
3.1 软件服务器端测试
服务器负责和组态软件通信,获取实时数据库里的数据,然后根据客户端的连接及验证情况,进行数据收发。同时,服务器可以接受客户端的远程控制请求,并将控制权移交,让客户端可以按规定进行远程操控。经过程序运行测试,服务器与MCGS通信良好,同时亦能与远程多个客户端良好通信。
3.2 软件客户端测试
当客户端和服务器连接成功且在验证码正确的情况下,方可接收到服务器端发来的数据并正确解析后显示输出。同时,客户端可以自由调整PID参数,同时可以调整设定值和仿真入口值;客户端还可以自行编写优化的控制算法,示例程序将远端改进的PID算法作用于实际被控对象上,可以实现远程智能控制,并可以实时观察算法的运行状态。通过测试,客户端软件可以在授权的模式下与服务器自由通信,实现监视、控制、控制权切换、算法的实现等功能。
4 结束语
通过对软件的实际测试,第三方软件能够良好地运行于Windows OS下,并能够与监控软件正常地进行数据交互、完成数据的远程读取、远程再现监控过程、远程调整及控制监控参数以及远程算法的加载等一系列功能,并且在某企业的液位远程监控中得到了应用。这种软件构架模式不仅可以应用在客户端和组态间的通信上,同时还可以应用在远程I/O技术以及集群控制等方面,让监控系统具有更宽泛的开放、灵活等优点。
[1]许其义.先进控制策略在MCGS上的集成与应用[J].自动化仪表,2011(5):31-34.
[2]罗培.JNI和Acti veX技术在组态监控系统网络化迁移中的应用[J].计算机应用研究,2007(12):266-267.
[3]包建华.MCGS平台下51单片机驱动构件开发与应用[J].自动化仪表,2011(11):35-38.
[4]郑阿奇,曹戈.VisualBasic实用教程[M].2版.北京:电子工业出版社,2005:55 -70.
[5]曹辉等.组态软件技术及其应用[M].北京:电子工业出版社,2009:96-135.
[6]双娜,钟国韵.基于winsock的远程监控系统的设计与研究[J].现代计算机(专业版),2010(7):137-140.
[7]李林静,叶冬芬.运用Winsock构建基于C/S模式的网络通信[J].计算机工程与科学,2009(2):19-23.
[8]文东,郭淑馨,闵丹.Access2003数据库应用基础与项目实训[M].北京:中国人民大学出版社,2009:303-334.
[9]尤新芬,王炯,曹焕男.基于Winsock技术的计算机监控系统的实现[J].煤炭技术,2011(12):194 -195.
[10]陈立定,冯景辉,胥布工.远程环境在线监测系统的设计[J].同济大学学报:自然科学版,2010(11):1659-1663.