OPC客户端的自动化实现

本文详细介绍了如何使用自动化接口在VB.Net中开发OPC客户端,涉及OPC服务器的枚举、连接、添加组和项、读写操作以及事件控制。通过OPCDAAuto.dll,实现了无线射频(RFID)卡应用的OPC通信。
摘要由CSDN通过智能技术生成
 

                                                        OPC客户端的自动化实现

OPC是建立在COMDCOM的基础商的,因此绝大多数语言都可以很好的进行开发。在Net中开发客户端有以下几种方式:

(1)       使用OPCNetAPI,需要用到OPCNetAPI.dllOPCNetAPI.Com.dll

(2)       使用自动化接口,需要用到OPCDAAuto.dll

(3)       使用自定义接口,需要用到多个WrapperOpcRcw.Ae.dllOpcRcw.Batch.dllOpcRcw.Comn.dllOpcRcw.Da.dllOpcRcw.Dx.dllOpcRcw.Hda.dllOpcRcw.Sec.dll

以上开发方式所需的动态链接库可以从OPC基金会http://www.opcfoundation.org/的网站上下载,一些下载项目可能需要注册,或成为基金会的成员。

不同的方式有各自的有缺点,请参见

本文使用自动化接口,VB.Net语言进行开发,开发项目是无线射频(RFID)卡方面的应用,典型的如公交车,或公司考勤使用的刷卡机。需要注意的是自动化接口存在一个“不是问题”的问题,数组下标是以1开始的,而不是传统计算机开发上的以0开始。不知道设计者头脑是怎么想(有人知道吗?);这可能会给一些语言的开发造成问题(有人碰到吗,没有你就是幸运的)

需求:OPCDAAuto.dll或该DllInterop

(一)  :客户端开发流程

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) '加入控件列表中,注意这里使用LBoundUBound

                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", MessageBoxButtons.OK)

        End Try

End Sub

(三)  :连接OPC服务器

自动化接口中连接到服务器是使用connect方法

Public Overridable Sub Connect(ByVal ProgID As String, Optional ByVal Node As Object = Nothing)

ProgID指服务器的ProgIDNode代表网络节点,如果是本机则放空即可。

连接到服务器后,以下属性需要特别注意:

OPCServer.StartTime:服务器的启动时间

OPCServer.CurrentTime:服务器的当前时间,各个客户端可以通过这个属性值完成一些同步的操作

OPCGroups.DefaultGroupIsActive:以后添加的Group是否默认激活

OPCGroups.DefaultGroupDeadBandGroup的默认死区,变化量超过死区后将会触发DataChange事件,

合理的设置该值可以提高程序性能

OPCGroups.Count:下属组(Group)的数量

OPCGroups.DefaultGroupLocalID:组(Group)的默认通信区域编号,如1024

OPCGroups.DefaultGroupUpdateRate:组(Group)的默认刷新率,该属性也比较重要

OPCGroups.DefaultGroupTimeBias:组(Group)的默认时间偏差

(四)  :添加组(Group)和项 Item

添加组和项需要用到Groups.AddItems.AddItem方法,以下是原型:

Function Add(Optional ByVal Name As Object = Nothing) As OPCAutomation.OPCGroup

Function AddItem(ByVal ItemID As String, ByVal ClientHandle As Integer) As OPCAutomation.OPCItem

       组也有两个重要的属性

       Group.UpdateRate:刷新率,该属性通GroupsUpdateRate意义一样,如果这个值有设置,则以这个值为准

       Group. IsSubscribed:是否使用订阅功能

     以下是代码段

         '连接到指定的OPC服务器

    Private Sub btnConnectServer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConnectServer.Click

        If cbbServerList.Text <> "" Then

            ConnectedOPCServer = New OPCAutomation.OPCServerClass()

            Try

                ConnectedOPCServer.Connect(cbbServerList.Text)

                '设置组集合的默认属性

                ConnectedOPCServer.OPCGroups.DefaultGroupIsActive = True

                ConnectedOPCServer.OPCGroups.DefaultGroupDeadband = 0

                '添加组

                ConnectedGroup = ConnectedOPCServer.OPCGroups.Add()

                ConnectedGroup.UpdateRate = 3 * 1000 '刷新虑,用于下面的DataChange事件

                ConnectedGroup.IsSubscribed = True '使用订阅功能

                '添加项

                GlobalOPCItems(0) = ConnectedGroup.OPCItems.AddItem("Reader_Device.OpenCard", 0)

                GlobalOPCItems(1) = ConnectedGroup.OPCItems.AddItem("Reader_Device.CloseCard", 1)

                GlobalOPCItems(2) = ConnectedGroup.OPCItems.AddItem("Reader_Device.CardNO", 2)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值