OPC客户端编程汇编

  • 格式:doc
  • 大小:300.00 KB
  • 文档页数:45

下载文档原格式

  / 45
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

OPC编程汇编

OPC客户端的自动化实现

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

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

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

(3)使用自定义接口,需要用到多个Wrapper:OpcRcw.Ae.dll,OpcRcw.Batch.dll,n.dll,OpcRcw.Da.dll,OpcRcw.Dx.dll,OpcRcw.Hda.dll,OpcRcw.Sec.dll

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

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

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

需求:OPCDAAuto.dll或该Dll的Interop

(一):客户端开发流程

OPC客户端的开发主要遵循下图所示的开发流程,下面就从以下几个开发步骤进行说明

(二):枚举OPC服务器列表

枚举服务器主要是通过OPCServer接口的GetOPCServers方法来实现的,该方法会返回OPC服务器数组(以1为下界,上面已有说明),以下是代码段

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Loa d

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

End Sub

(三):连接OPC服务器

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

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

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

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

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

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

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

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

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

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.OPCGroup

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

组也有两个重要的属性

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

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)

相关主题