引言
随着自动控制技术和计算机技术的进一步融合,计算机在自动控制系统中发挥着不可替代的作用。工业控制中的各种仪器、仪表、PLC 和单片机系统等都提供了与计算机的通讯协议,从而为计算机控制系统的设计提供了极大地方便。传统的计算机应用软件通过其内部的驱动程序来建立与现场设备的通讯从而存取设备数据信息,这就要求对每一种设备开发相应的驱动程序集成到应用软件中,造成应用软件规模的庞大,且不利于维护。OPC 技术就是在这种背景下产生的。
1 OPC 技术概述
OPC 规范提出了一套统一的标准,它采用典型CLIENT/SERVER 模式,将软件开发分为客户端和服务器两部分。针对硬件设备的驱动程序由硬件厂商或专门的软件公司完成,并提供具有统一接口标准的SERVER 程序,软件厂商只需按照OPC 规范编写CLIENT 程序访问服务器程序,即可实现与硬件设备的通信。OPC 技术为自动化层的现场设备与上位机应用程序之间的数据交换提供了一个理想的方法。客户与服务器的关系。
在这种应用模式下,上位机应用程序只需要开发一个符合OPC 规范的客户端接口就可以与各种各样的硬件设备进行数据交换,不需要关心它们遵守的是何种通讯协议,以何种方式进行连接。
OPC 客户端与OPC 服务器交互包括两个方面:客户端程序从服务器读取数据以及客户端向服务器写入数据。OPC 规范中数据访问方法有同步访问、异步访问两种方式。同步数据访问是OPC 服务器按照OPC 客户的要求得到数据访问结果作为方法的引数返回给OPC 客户,OPC 客户程序在结果返回之前一直处于等待状态。异步数据访问是OPC 服务器接到OPC 客户端的要求后,几乎立即将方法返回。当OPC服务器完成数据访问时,触发OPC 客户程序的异步访问完成事件,将数据访问结果传送给OPC 客户端。另外还有一种订阅式数据采集,这种方式实质是异步访问的一种方式。服务器按照一定的周期更新服务器数据缓冲区的数值,如果发现数值发生变化,就以数据变化事件通知OPC客户端,自动将数据回传到客户端。采用这种方式可以减轻OPC 服务器和客户端的负担,在实际中一般常用此方式。
2 监控系统分析
本文以某煤矿风机稀油站监控为实例基于OPC 技术开发上位机应用软件。控制系统由上位计算机、PLC、各种传感器构成,其中西门子S7-226PLC 作为主控制器,完成各种信号的控制、传递,实现手动和自动两种控制方式;模拟量输入模块EM235 实时采集稀油站油箱油压、油温、液位等模拟量信号。根据稀油站的监控要求,利用VB 编写OPC 客户端应用程序,建立友好的人机交互界面,在界面上实时显示系统各种参数,同时还可以对PLC进行操作以实现远程控制功能。
系统中所用的OPC 服务器是S7-200 PC Access 软件,它是西门子公司推出的专为连接S7-200 系列PLC 而开发的OPC 服务器,它从现场数据源PLC 获取数据,然后向标准的OPC客户端提供数据信息。
3 OPC 客户端接口程序开发
3.1 开发环境
无论开发者还是最终使用者都必须安装OPC 代理/存根(Proxy/Stub)DLL 文件,并进行环境设置。这些文件(opc_aeps.dll,opccomn_ps.dll,opchda_ps.dll,opcproxy.dll,aprxdist.exe,opcenum.exe)可以从OPC 基金会网站下载。建立VB 项目之后,首先要在VB 开发环境中,在菜单的“项目”→“引用”中添加OPC 自动化包装库OPC Automation 2.0。
3.2 开发流程及关键代码
第一步:变量声明
Option Explicit ‘所有变量需要显式声明
‘关键字WithEvents 表明对象支持事件
Dim WithEvents ServerObj As OPCServer
Dim objGroups As OPCGroups ‘组集合对象,用于添加OPC 组集合
Dim WithEvents objGroup As OPCGroup ‘组对象,创建OPC 组实例
Dim objItems As OPCItems ‘项集合对象,用于添加OPC 项集合
Dim lServerHandles() As Long ‘定义数组保存OPC 项的服务器句柄
Dim lTransID_Rd As Long ‘异步用的事务标识符,用于读取
Dim lTransID_Wt As Long ‘异步用的事务标识符,用于写入
第二步:连接OPC 服务器和建立OPC 组
Sub Connect(strProglD As String,Optional strNode As String)
If Serverobj Is Nothing Then
Set Serverobj=New OPCServcr ‘创建一个OPC 服务器对象
End If
If Serverobj.ServerState=OPCDinsconnected Then
Serverobj.Connect S7200.OPCServer ‘连接本地OPC 服务器S7200.OPCServer
End If
If objGroups Is Nothing Then
Set objGroups=Serverobj.OPCGroups ‘创建一个OPC 组集合
End If
If objGroup Is Nothing Then
Set Groupobj=objGroups.Add(”MyGroup”) ‘添加一个OPC 组对象
End If
第三步:添加OPC 项
对服务器进行访问前,必须先在OPC 组里添加要访问的OPC 项。本例子中,程序按照需求从OPC 服务器中浏览标签项,并添加到已建立的组MyGroup 中。
Sub AddItem()
Dim strItemIDs(8) As String
Dim lClientHandles(8) As Long
Dim lErrors() As Long
Dim I As Integer
objGroup.IsActive = True ‘设置组活动状态
objGroup.IsSubscribed = False ‘取消组异步通知
Set objItems = objGroup.OPCItems ‘建立OPC 标签集合
For I = 1 To 8 ‘生成从TAG1 到TAG8 的项标识符
strItemIDs(I) = “TAG” & I
lClientHandles(I) = I
Next I
‘添加OPC 标签项
Call objItems.AddItems(8, strItemIDs, _lClientHandles, lServerHandles, lErrors)
End Sub
第四步:数据读写
在进行异步访问前,必须建立异步用的通信通路。使用这个通信通路,OPC 服务器可以回调OPC 应用程序的事件处理程序,以通知数据访问的结果。通信通路的建立方法是改变OPC 组的属性,把OPC 组的“IsSubscribed”属性设置为True,即objGroup.IsSubscribed= True
Sub Async_Read() ‘异步读取数据
Dim lErrors() As Long
lTransID_Rd = lTransID_Rd + 1
objTestGrp.AsyncRead 8, lServerHandles, _lErrors, lTransID_Rd, lCancelID_Rd
End Sub
Sub Async_Write() ‘异步写入数据
Dim lHandle() As Long
lTransID_Wt = lTransID_Wt + 1
objTestGrp.AsyncWrite 1, lHandle(), vtItemValues, _lErrors, lTransID_Wt, lCancelID_Wt
End Sub
为了使订阅方式的数据采取有效,必须将OPC 组以及OPC 标签的“IsActive”属性设置为True,然后在程序中加入如下代码:
Private Sub objTestGrp_DataChange(ByVal TransactionID As Long, _ByVal NumItems As
Long, ClientHandles() As Long, ItemValues() As Variant, _Qualities() As Long, TimeStamps()
As Date)
第五步:断开OPC 服务器
退出前必须先断开与服务器连接,否则OPC 服务器使用的计算机资源不会被释放,这样的问题反复发生,连续运转的系统会使计算机资源逐渐枯竭从而发生严重问题。
Sub Disconnect()
Itemobjs.Remove ‘清除所有OPC 项对象
Set ItemObjs = Nothing
GroupActive.Enabled = False ‘组活动状态设为不活动
ServerObj.OPCGroups.RemoveAll ‘清除所有的OPC 组对象
Set Groupobjs=Nothing
ServerObj.Disconnect ‘调用Disconnect 方法,断开与服务器的连接
Set Serverobj=Nothing
End sub
4 客户端测试及应用
笔者在实际应用中基于OPC 技术开发了功能完善的上位机监控系统应用于某煤矿通风机的稀油站监控,设计了良好的人机交互界面,主界面如图8 所示。通过窗口界面实时监控系统运行状况,并进行必要的控制操作。经过长时间的运行测试,系统运行状况良好。
5 结束语
OPC 协议是一种通用的标准协议,可以很方便地连入其他综合监控系统,增强了系统的灵活性和可扩充性,并可节约软件成本。实际应用表明,基于OPC 技术的监控系统实时性好,可靠性高,组态灵活方便,并且可以通过局域网甚至Internet 实现多台上位机的监控,极大地扩展了监控系统的使用范围。
引言
随着自动控制技术和计算机技术的进一步融合,计算机在自动控制系统中发挥着不可替代的作用。工业控制中的各种仪器、仪表、PLC 和单片机系统等都提供了与计算机的通讯协议,从而为计算机控制系统的设计提供了极大地方便。传统的计算机应用软件通过其内部的驱动程序来建立与现场设备的通讯从而存取设备数据信息,这就要求对每一种设备开发相应的驱动程序集成到应用软件中,造成应用软件规模的庞大,且不利于维护。OPC 技术就是在这种背景下产生的。
1 OPC 技术概述
OPC 规范提出了一套统一的标准,它采用典型CLIENT/SERVER 模式,将软件开发分为客户端和服务器两部分。针对硬件设备的驱动程序由硬件厂商或专门的软件公司完成,并提供具有统一接口标准的SERVER 程序,软件厂商只需按照OPC 规范编写CLIENT 程序访问服务器程序,即可实现与硬件设备的通信。OPC 技术为自动化层的现场设备与上位机应用程序之间的数据交换提供了一个理想的方法。客户与服务器的关系。
在这种应用模式下,上位机应用程序只需要开发一个符合OPC 规范的客户端接口就可以与各种各样的硬件设备进行数据交换,不需要关心它们遵守的是何种通讯协议,以何种方式进行连接。
OPC 客户端与OPC 服务器交互包括两个方面:客户端程序从服务器读取数据以及客户端向服务器写入数据。OPC 规范中数据访问方法有同步访问、异步访问两种方式。同步数据访问是OPC 服务器按照OPC 客户的要求得到数据访问结果作为方法的引数返回给OPC 客户,OPC 客户程序在结果返回之前一直处于等待状态。异步数据访问是OPC 服务器接到OPC 客户端的要求后,几乎立即将方法返回。当OPC服务器完成数据访问时,触发OPC 客户程序的异步访问完成事件,将数据访问结果传送给OPC 客户端。另外还有一种订阅式数据采集,这种方式实质是异步访问的一种方式。服务器按照一定的周期更新服务器数据缓冲区的数值,如果发现数值发生变化,就以数据变化事件通知OPC客户端,自动将数据回传到客户端。采用这种方式可以减轻OPC 服务器和客户端的负担,在实际中一般常用此方式。
2 监控系统分析
本文以某煤矿风机稀油站监控为实例基于OPC 技术开发上位机应用软件。控制系统由上位计算机、PLC、各种传感器构成,其中西门子S7-226PLC 作为主控制器,完成各种信号的控制、传递,实现手动和自动两种控制方式;模拟量输入模块EM235 实时采集稀油站油箱油压、油温、液位等模拟量信号。根据稀油站的监控要求,利用VB 编写OPC 客户端应用程序,建立友好的人机交互界面,在界面上实时显示系统各种参数,同时还可以对PLC进行操作以实现远程控制功能。
系统中所用的OPC 服务器是S7-200 PC Access 软件,它是西门子公司推出的专为连接S7-200 系列PLC 而开发的OPC 服务器,它从现场数据源PLC 获取数据,然后向标准的OPC客户端提供数据信息。
3 OPC 客户端接口程序开发
3.1 开发环境
无论开发者还是最终使用者都必须安装OPC 代理/存根(Proxy/Stub)DLL 文件,并进行环境设置。这些文件(opc_aeps.dll,opccomn_ps.dll,opchda_ps.dll,opcproxy.dll,aprxdist.exe,opcenum.exe)可以从OPC 基金会网站下载。建立VB 项目之后,首先要在VB 开发环境中,在菜单的“项目”→“引用”中添加OPC 自动化包装库OPC Automation 2.0。
3.2 开发流程及关键代码
第一步:变量声明
Option Explicit ‘所有变量需要显式声明
‘关键字WithEvents 表明对象支持事件
Dim WithEvents ServerObj As OPCServer
Dim objGroups As OPCGroups ‘组集合对象,用于添加OPC 组集合
Dim WithEvents objGroup As OPCGroup ‘组对象,创建OPC 组实例
Dim objItems As OPCItems ‘项集合对象,用于添加OPC 项集合
Dim lServerHandles() As Long ‘定义数组保存OPC 项的服务器句柄
Dim lTransID_Rd As Long ‘异步用的事务标识符,用于读取
Dim lTransID_Wt As Long ‘异步用的事务标识符,用于写入
第二步:连接OPC 服务器和建立OPC 组
Sub Connect(strProglD As String,Optional strNode As String)
If Serverobj Is Nothing Then
Set Serverobj=New OPCServcr ‘创建一个OPC 服务器对象
End If
If Serverobj.ServerState=OPCDinsconnected Then
Serverobj.Connect S7200.OPCServer ‘连接本地OPC 服务器S7200.OPCServer
End If
If objGroups Is Nothing Then
Set objGroups=Serverobj.OPCGroups ‘创建一个OPC 组集合
End If
If objGroup Is Nothing Then
Set Groupobj=objGroups.Add(”MyGroup”) ‘添加一个OPC 组对象
End If
第三步:添加OPC 项
对服务器进行访问前,必须先在OPC 组里添加要访问的OPC 项。本例子中,程序按照需求从OPC 服务器中浏览标签项,并添加到已建立的组MyGroup 中。
Sub AddItem()
Dim strItemIDs(8) As String
Dim lClientHandles(8) As Long
Dim lErrors() As Long
Dim I As Integer
objGroup.IsActive = True ‘设置组活动状态
objGroup.IsSubscribed = False ‘取消组异步通知
Set objItems = objGroup.OPCItems ‘建立OPC 标签集合
For I = 1 To 8 ‘生成从TAG1 到TAG8 的项标识符
strItemIDs(I) = “TAG” & I
lClientHandles(I) = I
Next I
‘添加OPC 标签项
Call objItems.AddItems(8, strItemIDs, _lClientHandles, lServerHandles, lErrors)
End Sub
第四步:数据读写
在进行异步访问前,必须建立异步用的通信通路。使用这个通信通路,OPC 服务器可以回调OPC 应用程序的事件处理程序,以通知数据访问的结果。通信通路的建立方法是改变OPC 组的属性,把OPC 组的“IsSubscribed”属性设置为True,即objGroup.IsSubscribed= True
Sub Async_Read() ‘异步读取数据
Dim lErrors() As Long
lTransID_Rd = lTransID_Rd + 1
objTestGrp.AsyncRead 8, lServerHandles, _lErrors, lTransID_Rd, lCancelID_Rd
End Sub
Sub Async_Write() ‘异步写入数据
Dim lHandle() As Long
lTransID_Wt = lTransID_Wt + 1
objTestGrp.AsyncWrite 1, lHandle(), vtItemValues, _lErrors, lTransID_Wt, lCancelID_Wt
End Sub
为了使订阅方式的数据采取有效,必须将OPC 组以及OPC 标签的“IsActive”属性设置为True,然后在程序中加入如下代码:
Private Sub objTestGrp_DataChange(ByVal TransactionID As Long, _ByVal NumItems As
Long, ClientHandles() As Long, ItemValues() As Variant, _Qualities() As Long, TimeStamps()
As Date)
第五步:断开OPC 服务器
退出前必须先断开与服务器连接,否则OPC 服务器使用的计算机资源不会被释放,这样的问题反复发生,连续运转的系统会使计算机资源逐渐枯竭从而发生严重问题。
Sub Disconnect()
Itemobjs.Remove ‘清除所有OPC 项对象
Set ItemObjs = Nothing
GroupActive.Enabled = False ‘组活动状态设为不活动
ServerObj.OPCGroups.RemoveAll ‘清除所有的OPC 组对象
Set Groupobjs=Nothing
ServerObj.Disconnect ‘调用Disconnect 方法,断开与服务器的连接
Set Serverobj=Nothing
End sub
4 客户端测试及应用
笔者在实际应用中基于OPC 技术开发了功能完善的上位机监控系统应用于某煤矿通风机的稀油站监控,设计了良好的人机交互界面,主界面如图8 所示。通过窗口界面实时监控系统运行状况,并进行必要的控制操作。经过长时间的运行测试,系统运行状况良好。
5 结束语
OPC 协议是一种通用的标准协议,可以很方便地连入其他综合监控系统,增强了系统的灵活性和可扩充性,并可节约软件成本。实际应用表明,基于OPC 技术的监控系统实时性好,可靠性高,组态灵活方便,并且可以通过局域网甚至Internet 实现多台上位机的监控,极大地扩展了监控系统的使用范围。
举报