OPC客户端的自动化
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
OPC客户端的自动化实现
OPC是建立在COM,DCOM的基础商的,因此绝大多数语言都可以很好的进行开发。在Net中开发客户端有以下几种方式:
(1)使用OPCNetAPI,需要用到OPCNetAPI.dll,.dll
(2)使用自动化接口,需要用到OPCDAAuto.dll
(3)使用自定义接口,需要用到多个Wrapper:OpcRcw.Ae.dll,OpcRcw.Batc
h.dll,n.dll,OpcRcw.Da.dll,OpcRcw.Dx.dll,OpcRcw.Hda.
dll,OpcRcw.Sec.dll
以上开发方式所需的动态链接库可以从OPC基金会(http://www.opcfoundati /)的网站上下载,一些下载项目可能需要注册,或成为基金会的成员。
不同的方式有各自的有缺点,请参见…
本文使用自动化接口,语言进行开发,开发项目是无线射频(RFID)卡方面的应用,典型的如公交车,或公司考勤使用的刷卡机。需要注意的是自动化接口存在一个“不是问题”的问题,数组下标是以1开始的,而不是传统计算机开发上的以0开始。不知道设计者头脑是怎么想(有人知道吗?);这可能会给一些语言的开发造成问题(有人碰到吗,没有你就是幸运的)
需求:OPCDAAuto.dll或该Dll的Interop
(一):客户端开发流程
OPC客户端的开发主要遵循下图所示的开发流程,下面就从以下几个开发步骤进行说明
(二):枚举OPC服务器列表
枚举服务器主要是通过OPCServer接口的GetOPCServers方法来实现的,该方法会返回OPC服务器数组(以1为下界,上面已有说明),以下是代码段'枚举OPC服务器列表
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Try
GlobalOPCServer = New OPCAutomation.OPCServerClass()
Dim ServerList As Object = GlobalOPCServer.GetOPCServers
For index As Short = LBound(ServerList) To UBound(ServerList) '加入控件列
表中,注意这里使用LBound和UBound
cbbServerList.Items.Add(ServerList(index))
Next
If cbbServerList.Items.Count > 0 Then
cbbServerList.SelectedIndex = 0
End If
ResetControlStatus() '设置控件状态
GlobalOPCServer = Nothing
Catch Ex As Exception
MessageBox.Show("List OPC servers failed: " + Ex.Message, "OPCSample", Mes sageBoxButtons.OK)
End Try
End Sub
(三):连接OPC服务器
自动化接口中连接到服务器是使用connect方法
Public Overridable Sub Connect(ByVal ProgID As String, Optional ByVal Node As Obj ect= Nothing)
ProgID指服务器的ProgID,Node代表网络节点,如果是本机则放空即可。
连接到服务器后,以下属性需要特别注意:
OPCServer.StartTime:服务器的启动时间
OPCServer.CurrentTime:服务器的当前时间,各个客户端可以通过这个属性值完成一些同步的操作
OPCGroups.DefaultGroupIsActive:以后添加的Group是否默认激活
OPCGroups.DefaultGroupDeadBand:Group的默认死区,变化量超过死区后将会触发DataCha nge事件,
合理的设置该值可以提高程序性能
OPCGroups.Count:下属组(Group)的数量
OPCGroups.DefaultGroupLocalID:组(Group)的默认通信区域编号,如1024
OPCGroups.DefaultGroupUpdateRate:组(Group)的默认刷新率,该属性也比较重要
OPCGroups.DefaultGroupTimeBias:组(Group)的默认时间偏差
(四):添加组(Group)和项(Item)
添加组和项需要用到Groups.Add和Items.AddItem方法,以下是原型:
Function Add(Optional ByVal Name As Object= Nothing) As OPCAutomation.OPCG roup
Function AddItem(ByVal ItemID As String, ByVal ClientHandle As Integer) As OPC Automation.OPCItem
组也有两个重要的属性
Group.UpdateRate:刷新率,该属性通Groups的UpdateRate意义一样,如果这个值有设置,则以这个值为准
Group. IsSubscribed:是否使用订阅功能
以下是代码段