胡浩民,王泽杰
HU Hao-min,WANG Ze-jie
(上海工程技术大学 电子电气工程学院,上海 201620)
SCADA(Supervisory Control And Data Acquisition,监控与数据采集)系统是以计算机为基础的生产过程控制与调度自动化系统,它可以对现场的运行设备进行监视和控制,以实现数据采集、设备控制、测量、参数调节以及各类信号报警等各项功能[1]。系统具有实时、多任务、开放式体系结构以及分布式功能设计等特点,已在电力系统、楼宇自动化、生产线管理等领域使用。SCADA包含三个部分:分布式的数据采集系统(下位机);过程监控与管理系统(上位机);以及数据通信网络。可编程控制器PLC是广泛采用的下位机设备;组态软件则是上位机的核心组成部分。
由于上位机采集数据具有全面性和完整性,监控中心的控制管理也具有全局性,能更好地实现整个系统的合理、优化运行[2]。但是在某些应用领域,通过组态软件把PLC获取的数据采集到中央控制室往往并不能满足需求。例如,希望将设备运作状态发送到定制的LED、数码管等显示设备,这就需要把数据根据特定协议重新组成数据包进行发送。针对这些特殊的应用,目前已有不少解决方案,本文将比较这些方案的不足之处,并提出多通道协同模型以提高通信性能。
1.1 系统结构
SCADA系统中,组态应用作为数据采集、处理、转发中心,在上位机中处于核心位置;它与各种控制、检测设备(如现场总线上的PLC、智能仪表等)共同构成快速响应控制中心(如图1所示)。通过组态应用,操作人员可以完成如现场数据及流程画面的查看;历史生产报表的打印;过程报警的获得,以及生产过程参数和状态的修改等任务。但有时需要对组态应用中的数据进行二次利用,如前所述,把数据实时地组成数据包发送到定制的专用监控设备,这就需要有相应的应用程序从组态应用取得数据。
组态软件提供了相应的通信接口,但选择何种通信方法,以及采用怎样的通信模型与算法,将会在很大程度上影响应用的实时性。
图1 系统结构
1.2 通信方法与存在问题
与组态软件通信方法常用有:归档数据库访问、脚本通信、动态数据交换(Dynamic Data Exchange,DDE)、以及OPC(OLE for Process Control)接口通信等。
归档数据库是组态软件将采集的数据作为历史记录进行周期性地存储。由于采集周期和归档周期可以不同,且归档周期是采集周期的整数倍,因此数个过程值才产生一个归档值[3]。这会影响过程值的真实性,所以归档数据库常用于为报表系统提供数据源,而对于转发到专用监控设备的特殊应用,则难以满足实时性需求。
脚本语言是很多组态软件提供的功能。在组态系统中,通过脚本编程读取过程值,并周期性地写到共享文件;应用程序对共享文件进行周期性地读操作。这种通过共享文件的读写实现数据交互的通信方式过于频繁地访问外存,效率比较低,而且不利于设备的稳定。
动态数据交换DDE是一种基于Windows消息传递而建立的进程间通信技术,DDE客户端通过服务名和主题名,建立起与DDE服务器的连接,从而形成双向的数据连接通道。但是这种方式通信效率不高,一般适合于少量数据的传输。DDE技术已趋于淘汰,实现大批量数据的通信不仅造成资源消耗大,而且效率很低[4]。
OPC规范以组件对象模型和分布式组件对象模型(COM/DCOM)技术为基础,采用客户、服务器模式,定义了一组COM对象及其接口规范[5]。这种客户/服务器模式与前三种通信方法相比,具有更好的可靠性和更高的稳定性。但即使采用OPC技术,如果采用的通信模型不同,效率也会有很大差异。比如单线程轮询方式简单易实现,但效率低下,实时性难以保证;多通道协同通信模型就是为提高通信效率,又合理利用系统资源而设计的一种通信方法。
图2 模型原理
2.1 设计原理
在自动化控制领域,采集上百个点的过程数据是比较常见的。如果以轮询方式采集数据,即使使用可靠性与稳定性比较好的OPC技术,也会使得系统效率低下。以图1所示的监控系统结构为例,以轮询方式从组态应用逐项获取每个标签值,然后组成数据包进行发送,这样会严重影响实时性。尤其当采集的标签量比较多的情况,刷新的周期会相当长。如果采用简单的并发模式,为每个标签创建一个组态服务的OPC连接,又会极大地浪费系统资源。
针对以上情况,设计了多通道协同通信模型(如图2所示)。模型首先建立若干个与组态系统OPC服务器建立连接的通道,并将要通信的标签分配到通道中。每个通道只为其中的标签服务,通过访问通道获取标签对应的过程值。
在具体实现上,每个通道可以由一个工作者进程/线程进行维护(以下称“通道维护者”)。通道维护者从通道读取标签值,对比上一次读取的数据,如果发生变化,说明监控仪表设备的数据需要刷新,通道维护者根据相应协议组成数据包,并通过映射关系放到缓冲列表,同时置发送标记为“需要发送”状态。通道之间由于没有竞争的资源,可以完全并发处理。这样有利于提高数据采集的实时性。
“数据发送者”也可以由工作者进程/线程实现,用于访问缓冲列表中的每个数据项。通过判断数据包发送标记是否为“需要发送”状态,决定是否发送数据。如果需要发送,则发送数据包,并重置发送标记为“已发送”状态。因此“发送标记”成为了通道维护者和数据发送者的临界资源,可以使用信号量来实现对临界资源的互斥操作。
2.2 算法描述
OPC技术的实现由OPC服务器和OPC客户端应用两部分完成。其中,服务器实现现场设备的数据采集,并通过标准的OPC接口供OPC客户端访问。OPC服务器对象被分为3层结构:服务器对象(Sever)、组(Group)和项(Item)[6]。
通道维护者和数据发送者对临界资源(发送标记)的互斥访问由信号量和PV原语操作来完成。OPC标签项的所有操作封装成COpcTagItem类;通道维护者封装成CChannelWorker类;数据发送者封装成CSendWorker类。对图2所示的模型用类C++描述如下:
缓冲列表BufferList中的每个对象为COpcTagItem类型,其中包含了模型中提到的标签ID、名称、采集的数据、数据包、发送标记等信息:
除以上成员变量之外,该类还有如连接通道的方法ConnectChannel();从通道获取标签值的方法GetTagItemValue()等。信号量对象Smph的初值为1。
通道维护者类CChannelWorker继承了线程类TThread[7],包含了ChannelID(通道ID)、OpcChannel(Opc通道指针,指针指向实现OPC通信功能的COpcComm类对象)等数据成员。以及用于启用通道的方法Startup();关闭通道的方法Shutdown();为通道分配标签的方法AssignTags()。Execute()完成通道维护的主要功能,其中的算法描述如下:
从算法可知,通道维护者和数据发送者通过对缓冲列表中每个OPC标签项的信号量成员Smph进行PV操作,实现两者之间的协同。同时,多个通道维护者之间又是一种可以完全并行处理的协同关系,这将有效提高数据的采集与发送的通信效率。
已将OPC多通道协同通信模型,应用到污水处理、轮胎热裂解、变电站、造船基地给排水等自动化监控领域。图3所示是某污水处理厂流程模拟图(部分)。以氧化沟系统为例,需要监控点就有28处(包括曝气机、搅拌机、推进器状态,污泥浓度计MLSS30X、溶解氧探头DO30X值等)。整个污水处理系统还包括了:污水提升泵站、旋流沉砂池、离子除臭系统、污泥脱水间、除磷剂投加系统、二沉池、污泥泵房、清水池及贮泥池等若干部分,要监控的设备多达上百个。
确保所有设备监控数据的准确性与实时性是自动化控制的重要组成部分。实践表明,采用1.2所述的“归档数据库访问”、“脚本通信”、“动态数据交换”这几种通信方法,效果不理想,使用“OPC接口通信”,效率高于前三者,而在此基础上采用多通道协同通信模型,通信效率得到了明显提高。
图3 污水处理流程(部分)
多通道协同通信模型是对通信因子负载平衡的一种抽象。通过多通道,使得对组态OPC服务的连接数量维持合理的水平,起到既实现并发处理,提高速度;又合理使用资源的作用。根据该模型设计的算法与实现的程序已应用于污水处理、橡胶热裂解、变配电所等自动化控制领域。实践应用表明,该模型有效地提高了与组态软件的通信速度,能满足工业的实时性需求。
[1]王振明.SCADA监控与数据采集软件系统的设计与开发[M].北京:机械工业出版社,2009:1-2.
[2]王华忠.监控与数据采集(SCADA)系统及其应用[M].北京:电子工业出版社,2010:5-7.
[3]西门子(中国)有限公司自动化与驱动集团.深入浅出--西门子WinCC V6(第2版)[M].北京:北京航空航天大学出版社,2005:69-70.
[4]董超.OPC技术在异构控制网络互联中的研究与应用[J].自动化仪表,2009,30(12).
[5]王小辉.OPC在智能楼宇系统应用中的研究[D].湖北:武汉理工大学,2007.
[6]刘克勤.基于OPC的动态数据交换技术在工控系统集成中的应用研究[J].重庆工学院学报,2006,20,(2):106-109.
[7]Borland/Inprise公司.C++ Builder 5 开发人员指南[M].北京:机械工业出版社,2000:105-111.