| OPC技术及其在冶炼厂实时数据采集中的应用 |
在某冶炼厂全厂自动化系统工程中,需要自动打印大量的日报表、月报表,管理层和相关职能部门也希望能直接从生产现场了解最新数据,及时进行生产决策管理,即希望对现场数据进行数据统计分析和远程监视。然而,该自动化系统中包括横河、和利时、西门子等控制器和现场数字设备,它们遵从不同的通讯标准,组成了各自的控制系统。各个控制系统形成了互不相连的信息孤岛,难以建立全厂统一的生产过程数据平台,实现管理控制的一体化。
OPC(OLE for process control)“规范”[1]的提出使这个难题迎刃而解。目前OPC技术已被广泛用于解决从物理设备中获取原始数据,以及SCADA、DCS和其他应用程序的数据交互等问题。
本文以WinCC为例,基于OPC数据存取规范(版本2.0),利用VBA编程技术实现了西门子控制系统实时数据的采集,为工业复杂报表的打印、现场数据的低成本远程监视、异种控制系统间的“无缝连接”提供了有效的方法。
1 OPC技术 1.1 OPC体系结构OPC是OPC基金会组织倡导的工业控制和生产自动化领域中使用的硬件和软件的接口标准。OPC是基于Microsoft的OLE、COM和DCOM技术,包括了自动化应用中使用的一整套的接口、属性和方法的标准[2]。OPC采用Client/Server结构,典型的OPC体系结构如图 1所示[3]。
![]() |
| 图 1 OPC体系结构 |
OPC标准要求所有的硬件供应商将硬件设备驱动程序封装成独立的OPC服务器,负责向OPC客户端不断地提供数据,应用程序开发商可以根据需要使用任何语言来写出程序代码。上层应用作为OPC客户端,可以不包含任何通信接口程序,不必关心底层的硬件设备特性,也不必考虑软硬件如何通信。只要遵循OPC数据接口协议,一个OPC客户程序可以同时和一个或多个厂商提供的服务器连接,从中取得数据,从而实现OPC数据的灵活配置和多种系统的真正集成。
1.2 OPC数据存取规范OPC数据存取服务器由3类对象组成:服务器、组和项。OPC服务器对象维护有关服务器的信息并作为OPC组对象的包容器;OPC组对象维护有关其自身的信息,提供包容OPC项的机制,并管理OPC项,一个服务器中允许存在多个组;OPC项对象是OPC的数据单元,一个组内允许定义多个数据项,每个数据项有值、品质和时间戳3个属性。数据项不是数据源,它仅仅是与数据源的连接,其值对应图 1的数据缓冲区,而服务器按照一定的速率通过数据缓冲区与物理设备交换数据,所以,数据项只是简单地说明了数据的参考地址,而不是数据的实际物理地址[4]。
1.3 OPC数据接口OPC标准中的接口主要有两种:定制接口和自动化接口。定制接口描述了OPC组件和对象的接口以及其中的方法,适用于由C或C++语言设计的OPC客户端和服务器程序;自动化接口提供了一个自动配置和存取过程控制数据的接口,它方便了用Visual basic、Delphi、Excel及其他可以使用OLE自动化服务器应用程序接口的高级商用软件的使用。图 2是OPC自动化接口的对象模型[5]。
![]() |
| 图 2 OPC自动化接口模型 |
2 WinCC OPC Server
WinCC(Windows Control Center)是由德国西门子公司与微软共同开发的软件系统,是结合西门子在过程自动化领域中的先进技术和微机软件的强大功能的产物, 是世界上第一个集成的人机界面(HMI)软件系统[6]。WinCC提供了适合于工业的图形、消息、归档及报表等功能模块,广泛应用于各种工业控制系统的数据采集及监控[7]。WinCC OPC Server为西门子控制系统的扩展,以及与其他控制系统的无缝连接提供了方便。
在WinCC安装选项的Communication组件中,选择OPC Server项,安装OPC Server(新WinCC版本,安装WinCC时OPC自动安装)。
为了能在远端访问WinCC OPC Server,必须对其进行DCOM组态设置(若本程序与WinCC OPC Server在同一PC机上,可以不设置),方法是通过开始、运行、输入文件名dcomcnfg.exe来完成。dcomcnfg程序启动后,在“应用程序”页选择“OPC Server.WinCC”条目,设置其属性,在“安全性”标签中选择“使用自定义访问许可权限”选项;在“身份标识”标签中选择“交互式用户”选项。
3 实时数据采集的VBA编程新建一个Excel空表,按格式要求设计好报表sheet1,为了说明方便,仅以图 3所示的10个数据(第4行,它们对应于WinCC中的标签变量)的采集为例,它们对应于某冶炼厂硫酸转化系统中五层触媒的入口和出口温度。
![]() |
| 图 3 WinCC实时数据采集的示例报表 |
数据采集过程主要包括连接服务器、读取标签变量值、断开服务器3个功能的实现,这里分别用“连接”、“读取”、“断开”3个按钮来实现,具体编程步骤及代码如下。
进入VB编辑器,安装OPCDAAuto.dll,在工具栏的引用中添加OPC Automation2.0。
建一模板Module1,代码如下:
'有关声明
Option Explicit '强制显式声明所有变量
Option Base 1'声明数组下标缺省下界为1
'声明PC服务器对象
Private objServer As OPCServer
'声明OPC组集合对象
Private objGroups As OPCGroups
'声明OPC组对象
Private objTestGrp As OPCGroup
'声明OPC项集合对象
Private objItems As OPCItems
'服务器端句柄数组
Dim lServerHandles() As Long
'连接服务器的过程
Public Sub Opc_Connect()
'项标识符数组
Dim strItemIDs(10) As String
'客户端句柄数组
Dim lClientHandles(10) As Long
Dim lErrors() As Long '错误标识数组
Dim I As Integer'局部变量,用于循环
If objServer Is Nothing Then
'建立一个OPC服务器对象
Set objServer = New OPCServer
End If
If objServer.ServerState = _ OPCDisconnected
Then
'连接OPC服务器
objServer.Connect "OPCServer.WinCC", "luhong"
'其中"luhong"为OPC服务器所在PC名
End If
If objGroups Is Nothing Then
'建立一个OPC组集合
Set objGroups = objServer.OPCGroups
End If
If objTestGrp Is Nothing Then
'添加一个OPC组,组名为"Test"
Set objTestGrp = _ objGroups.Add("Test")
End If
If objItems Is Nothing Then
Set objItems = objTestGrp.OPCItems
With Worksheets("Sheet1")
For I = 1 To 10
'WINCC中变量的标识符
strItemIDs(I) =.Cells(4, I).Text
'WINCC中变量的客户端句柄
lClientHandles(I) = I
Next I
End With
'添加OPC项
Call objItems.AddItems (10, _ strItemIDs,lClientHandles, _ lServerHandles, lErrors)
End If
End Sub
'读取标签值的过程
Public Sub Opc_Read()
Dim ItemVal() As Variant '项值数组
Dim lErrors() As Long '错误标识数组
Dim I As Integer '局部变量,用于循环
If Not objServer Is Nothing Then
If (objServer.ServerState = _ OPCRunning)
Then
'同期读取WinCC中变量的值
Call objTestGrp.SyncRead (_ OPCCache,10,lServerHandles, _ItemVal, lErrors)
'在工作表第5行显示数据字符串
With Worksheets("Sheet1")
For I = 1 To 10
.Cells(5, I).Value = ItemVal(I)
Next I
End With
End If
End If
End Sub
'断开服务器的过程
Public Sub Opc_Disconnect()
Dim lErrors() As Long '错误标识数组
If (Not objItems Is Nothing) And (Not _ objServer Is Nothing) Then
'清除OPC项
If objItems.Count > 0 Then
Call objItems.Remove (10,_ lServerHandles, lErrors)
End If
Set objItems = Nothing
End If
If Not objTestGrp Is Nothing Then
'清除OPC组"Test
objGroups.Remove ("Test")
Set objTestGrp = Nothing
End If
If Not objGroups Is Nothing Then
'清除OPC组集合
Set objGroups = Nothing
End If
If Not objServer Is Nothing Then
If objServer.ServerState <> _ OPCDisconnected Then
'断开与OPC服务器的连接
Call objServer.Disconnect
Set objServer = Nothing
End If
End If
End Sub
分别在“连接”、“读取”和“断开”3个按钮的Click事件写上代码:Call Opc_Connect、Call Opc_Read和Call Opc_Disconnect。
当连接上OPC服务器后,点击“读取”按钮,在报表的第5行得到与第4行标签名相应的WinCC标签值,只不过点击“读取”按钮一次,数据就改变一次。实际自动控制系统中用Timer控件自动定时读取相应数据、打印报表,无需人工点击按钮。
4 结语在某冶炼厂自动化系统改造过程中,采用基于OPC技术的编程方法,实现了Excel对全厂工业现场数据的实时采集,将编程后的Excel文件安装到远端工作站,还实现了工业现场数据的低成本远程监控。该方法的成功应用,为进一步探讨实时数据库、自适应优化控制模型、企业全方位ERP/CIMS的建立奠定了坚实的基础。
| [1] |
刑建春, 王平. 工业控制软件互操作标准OPC综述[J].
工业控制计算机, 2000, 13(1): 29–32.
|
| [2] |
OPC国际基金会中国办事处. OPC技术综述[J].
世界仪表与自动化, 2001, 5(4): 34–38.
|
| [3] |
郭红晓, 莫德举. OPC技术及其软件的开发[J].
北京化工大学学报:自然科学版, 2002, 29(3): 71–78.
|
| [4] |
张传芹, 盛昭瀚, 郭桂珍. 基于OPC技术的生产管理信息集成方法[J].
计算机工程, 2002, 28(3): 217–220.
|
| [5] |
郑立.
OPC应用程序入门[M]. 北京: OPC(中国)基金会, 2002.
|
| [6] |
卢建华. 使用WinCC实现过程监控[J].
武汉科技大学学报:自然科学版, 2000, 23(1): 76–79.
|
| [7] |
王云.
SIMATIC WinCC V5.0使用入门[M]. 北京: 北京三博中自科技有限公司, 2001.
|
2006, Vol. 20



