opc
(工业标准OLE for Process Control)
OPC(OLE for Process Control, 用于过程控制的OLE)是一个工业标准,管理这个标准国际组织是OPC基金会,OPC基金会现有会员已超过220家。遍布全球,包括世界上所有主要的自动化控制系统、仪器仪表及过程控制系统的公司。基于微软的OLE(现在的Active X)、COM (部件对象模型)和DCOM (分布式部件对象模型)技术。OPC包括一整套接口、属性和方法的标准集,用于过程控制和制造业自动化系统。
1、引言
在企业综合自动化系统(CIPS——Computer Integrated Process Control System)中,管理网需要从控制网上实时地获取工艺生产过程数据以满足管理的不同需求。由于控制网上的DCS、PLC和其他智能仪器仪表通常来自不同的厂商,相互之间的通讯非常复杂,甚至由于通讯接口不够灵活,导致控制网与管理网之间数据的互操作性差、通讯的稳定性差、管理软件功能受到限制。因此,如何有效、可靠、实时和高速地从控制网中获取在管理网上所需要的各种实时数据,是在企业综合自动化实施过程中普遍关注的问题。OPC(OLE for Process Control)是在此背景下产生的,它是以微软的COM(组件对象模型)和DCOM(分布式组件对象模型)技术为基础,定义的一套标准接口,是一个与制造商无关的软件接口。显然,OPC技术为控制网与管理网之间的互联,以及上层应用软件和控制设备之间的数据通讯提供了极大的方便,而且使得整个企业综合自动化系统更具有灵活性和开放性。只要遵循OPC规范,管理网即可随时通过OPC接口来获取工艺生产过程数据。
2、OPC技术综述
在传统的控制系统中,针对同一个设备,每个应用软件都要根据自己的需求开发一套驱动程序。这不仅加大了开发和维护费用,而且带来了访问冲突问题。
OPC技术将各个设备驱动程序和通讯程序封装成独立的OPC服务器,上层应用软件(作为OPC客户端)可以不关心系统的性能特点,而通过标准的OPC接口访问OPC服务器。
这样不仅解决了上述问题,而且实现了软件的“即插即用”。OPC相当于一块软件“主板”,它能够直接与现场的PLC、监控HMI、工业网络、数据采集和Windows CE设备连接,快速有效地获取现场实时数据。PC机内的各种监视、控制和管理等应用软件则像是插在OPC主板上的软件“芯片”,芯片可以通过OPC获得现场实时数据,芯片之间也可以按照OPC协议进行通讯,从而实现软件的“即插即用”。
OPC的核心是COM/DCOM技术。在COM模型中,软件的功能被分解为一些组件,这些组件通过COM协议在一定条件下连接起来,实现相应的功能。COM对象分为客户端和服务器两类,客户端通过COM接口访问服务器。
OPC数据访问规范描述了OPC服务器需要实现的COM对象及其接口, OPC客户程序通过接口与服务器通讯,读取数据。OPC客户程序访问服务器时,创建一个服务器对象(这里指的是逻辑对象,目的是利用这个逻辑对象建立与实际服务器的连接),调用这个服务器对象的接口,服务器对象创建组对象并返回组对象的指针,客户程序获得组对象的指针后调用其接口。
注意,OPC项并不是OPC客户直接操作的对象,因为OPC项没有定义外部接口,对象的所有操作都是通过包容该项的组对象进行的。

图 1 OPC数据访问服务器的结构
3、系统概况
某厂有一套由VB编制的设备运行状态数据监视查询系统,在矿内管理网的数十台计算机上使用,并为矿内MIS系统提供数据。原PLC系统为西门子S5系列,操作台监控,VB与PLC采用3964R通讯协议通讯,实时性差,占用PLC扫描时间长。改造后PLC系统升级为西门子S7系列,监控系统改为西门子WINCC V6.0。为了便于有关部门的人员仍能通过管理网实时监控生产情况,保留原有的VB-Client监控查询系统,改VB-Server通过OPC与WINCC通讯获得生产数据存储在数据服务器中,使通讯速度大大提高,并减少了网络数据流量和减小了PLC系统的扫描时间。
监控系统结构如图2所示。监控系统由四部分组成。
1)现场设备:位于现场有若干PLC子站采集各条胶带及其他设备的信号。
2)OPC服务器:位于中控室的集中监控站HMI软件采用西门子的WINCC V6。SIMATIC WINCC全面支持OPC,WINCC中的OPC符合OPC基金会的OPC规范。WINCC支持的OPC服务器遵循以下规范:OPC DA 1.0A和2.0;OPC HDA 1.1;OPC A&E 1.0。在此项目中将WINCC作为WINCC OPC DA服务器。
3)OPC客户:数据服务器作为WINCC OPC DA客户机,采用VB软件编程将通过OPC通讯协议获取的数据存入实时数据库和历史数据库中,供管理网的用户程序调用。
4)厂区的管理网:有关部门的人员通过监控查询系统程序访问数据库服务器中的实时和历史数据库,可以实时监控生产情况同时也可以查询统计历史事件。

4、系统实现
4.1 HMI组态
工控领域内存在不同生产商提供的许多OPC DA服务器,每个OPC DA服务器都有唯一的名称以便识别,OPC DA客户机必须清楚地知道该名称,并使用该名称对OPC服务器进行访问。WINCC OPC DA服务器名称为OPCServer.WinCC。
因为WINCC OPC DA服务器与WINCC OPC DA客户机程序分别运行在网络上的不同计算机上,要进行之间的数据交换,则必须对OPC服务器进行相应的DCOM配置。Windows 2000下的dcomcnfg.exe是专门用来对远程访问COM对象进行配置的工具。
在HMI机器上运行dcomcnfg.exe,打开“分布式COM配置属性”对话框。在“应用程序”中选择OPCServer.WinCC对其属性进行相应地编辑,启用分布式COM。
在WINCC监控项目中建立好要通过OPC通讯的变量。
4.2 数据服务器组态编程
WINCC在安装时提供了OPC的客户端控件:Siemens OPC DAAutomation 2.0 ,文件名为SOPCDAAuto.dll。先在VB工具栏中“工程/引用”将Siemens OPC DAAutomation 2.0控件加入,然后开始编程建立OPC连接。
1) 声明变量。
在这里我们要指定OPC服务类型及OPC服务器的机器名称。注意:值数组数据类型必须设为Variant,数组必须从1开始。
Const ServerName="OPCServer.Wincc" ´OPC的类型
Dim NodeName As String ´OPC服务器的计算机名称
Dim WithEvents MyOPCServer As OPCServer
´OPC服务
Dim WithEvents MyOPCGroup As OPCGroup
´OPC组
Dim MyOPCGroupColl As OPCGroups ´OPC标签组
Dim MyOPCItemColl As OPCItems
Dim MyOPCItems As OPCItems
Dim MYOPCItem As OPCItem
Dim ClientHandles(1) As Long ´句柄
Dim ServerHandles() As Long
Dim Errors() As Long
Dim ItemIDs(1 To Num) As String ´记录OPC的标签
Dim ItemIDsValue(1 To Num) As Variant
´存放OPC数据的地址
Dim GroupName As Variant
2)建立OPC的连接
Private Sub StartClient ()
Dim i As Integer
Dim ClientHandlesl(1 To Num) As Long
配置句柄索引,加入相应的标签名
For i = 1 To Num
指定wincc变量名
ClientHandlesl(i) = i
ItemIDs(i) = " xxx " + CStr(i–1)
Next i
On Error GoTo ErrorHandler
生成OPC对象
GroupName = "MyGroup"
指定OPCServer的机器名称
NodeName = "xxx"
Set MyOPCServer = New OPCServer
MyOPCServer.Connect ServerName,
NodeName
Set MyOPCGroupColl =
MyOPCServer.OPCGroups
MyOPCGroupColl.DefaultGroupIsActive =
True
Set MyOPCGroup =
MyOPCGroupColl.Add(GroupName)
Set MyOPCItemColl = MyOPCGroup.OPCItems
进行OPC标签连接
For i = 1 To Num
ClientHandlesl(i) = i
ItemIDs(i) = "DBB" + CStr(i - 1)
初始化OPC连接
MyOPCItemColl.AddItems Num,ItemIDs, ClientHandlesl,ServerHandles,
Errors
Next i
MyOPCGroup.IsSubscribed = True
StatusBar1.Panels(2).Text ="通讯正常"
Exit Sub
ErrorHandler:
StatusBar1.Panels(2).Text = "通讯断开"+ Err.Description
End Sub
3)OPC的标签读取
对OPC标签的读通过MyOPCGroup组的DataChange事件来读取。该事件有多个参数:其中NumItems是指标签改变值的个数,ClientHandles是改变值的标签索引,ItemValues为改变值的数据,即ClientHandles(i)的值是其对应的标签数组的索引,其所对应的OPC标签的值在ItemValues (i)中。刚连接上时,该事件会把所有要求访问的OPC标签值全部读取过来。此后只有数据发生变化时才会触发该事件,也只会传输发生了变化的数据,没有变化的数据则不会出现在本事件的ItemValues中。
Private Sub
MyOPCGroup_DataChange(ByVal
TransactionID As Long, ByVal NumItems AsLong, ClientHandles() As Long,ItemValues() As Variant, Qualities() AsLong, TimeStamps() As Date)
Dim i As Long
Dim j As Integer
Dim c(1 To Num) As Variant
For i = 1 To NumItems / Num
ItemIDsValue(ClientHandles(i)) =ItemValues(i)
c(ClientHandles(i))=
ItemIDsValue(ClientHandles(i))
Next i
End Sub
4)OPC连接断开
OPC客户端连接后要占用服务器资源,所以如果不需要使用OPC时,必须进行OPC连接断开,释放资源。
Private Sub StopClient()
On Error Resume Next
释放组和服务器对象
MyOPCGroupColl.RemoveAll
与服务器断开连接并且清除
MyOPCServer.Disconnect
Set MyOPCItemColl = Nothing
Set MyOPCGroup = Nothing
Set MyOPCGroupColl = Nothing
Set MyOPCServer = Nothing
End Sub
当OPC服务器由于某种原因关闭时会触发ServerShutDown事件。该事件被触发时也要进行OPC连接断开,释放资源。
Private Sub MyOPCServer_ServerShutDown(ByVal Reason As String)
StopClient
StatusBar1.Panels(2).Text = "通讯断
开" + Err.Description
End Sub
5)存数据库
将实时数据按照不同触发事件存入到相应的实时数据库及历史数据库中。
4.3 厂区管理网
在管理网上的VB-Client监控查询系统,利用客户机/服务器的模式访问服务器中的数据,采用SQL数据库查询方式。它使得管理人员既可以监控实时的生产情况,也可以通过历史数据分析故障或统计生产情况,使在办公室就对设备的管理更加有效、及时、全面。图3为工艺流程实时状态,图4为信息查询结果。
5、结束语
本文提出应用OPC技术完成控制网与管理网之间的数据交换,详细介绍了OPC服务器与OPC客户端程序的具体设计过程,数据访问实例符合OPC规范,实现了对数据的实时读取存储,具有实用价值。
总之,有了OPC规范,控制系统软件可以高效、稳定地对硬件设备进行数据存取, 系统应用软件之间也可以灵活地进行信息交互,极大地提高了控制系统的互操作性和适应性。



