VB开发OPC客户端程序的步骤与实现.
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VB开发OPC客户端程序的步骤与实现(1)建立新工程或项目,在“工程”菜单下选择“引用”,如图5-3所示。只有引用OPCDAAuoto.DLL后,在程序中才能创建服务器对象,然后进行一系列的操作。
(2)在弹出的引用窗口里单击“浏览(B)…”按钮,弹出添加引用窗口,选择OPCDAAuoto.DLL文件。
(3)在引用窗口里的OPC Automation2.0前面打钩,按“确定”按钮。
(4)定义全局变量,这样可以在窗体的任何方法的代码内应用。变量类型应该指定为对象型。这些对象最好在窗体的通用部分声明加上“Option Explicit”语句,表示模块里的所有变量都需要显式声明。由于OPC自动化接口的数组的索引要求必须从1开始,而系统默认是从0开始,为了避免错误最好在代码的最初加上“Option Base1”语句。为了使对象可以处理事件,必须将objTestGrp和objServer 的声明中加上“WithEvents”语句,表示声明的对象可以响应事件。Option Explicit
Option Base1
Dim WithEvents objServer As OPCServer
Dim objGroups As OPCGroups
Dim WithEvents objTestGrp As OPCGroup
Dim objItems As OPCItems
(5)连接OPC服务器和建立OPC?br>考虑到代码的可反复使用性,
采用子程序进行编程。
Sub Connect(strProgID As String,Optional strNode As String) If objServer Is Nothing Then
'建立一个OPC服务器对象
Set objServer=New OPCServer
End If
服务器状态ServerState属性一共有OPCRunning、OPCFailed、OPCNoconfig、OPCSuspended、OPCTest和OPCDisconnected六个值,分别表示正在运行、失败、没有配置、暂停、测试和没有连接六种OPC服务器当前的状态。如果OPC服务器没有连接,我们才执行objServer.Connect strProgID,strNode语句。strProgID就是ProgID,strNode就是用于远程通信的IP地址。
If objServer.ServerState=OPCDisconnected Then
'连接OPC服务器
objServer.Connect strProgID,strNode End If
在Visual Basic中,通过执行一个Set操作实现调用其它接口的方法。
If objGroups Is Nothing Then
'建立一个OPC组集合
Set objGroups=objServer.OPCGroups
End If
If objTestGrp Is Nothing Then
'添加一个OPC组
Set objTestGrp=objGroups.Add("Group") End If
End Sub
(6)添加OPC标签
对服务器进行访问前,必须先在OPC组里添加要访问的OPC标签。OPC 客户端程序要按照用户指定的标签或者从组态文件里读取需要添加的OPC标签。
Sub AddItem()
Dim strItemIDs(17)As String
Dim lClientHandles(17)As Long
Dim lErrors()As Long
Dim I As Integer
If objTestGrp Is Nothing Then
Exit Sub
End If
If Not objItems Is Nothing Then
If objItems.Count>0Then
Exit Sub
End If
End If
'设置组活动状态。只有处于活动状态的OPC才进行定期的数据更新。非活动状态的OPC组,除了在接到显然的数据读写要求外,并不收集任何数据。
If mnuSubscribtion.Checked=True Then
objTestGrp.IsActive=True
Else
objTestGrp.IsActive=False
End If
'启动组异步通知。进行订阅的OPC组可以自动收到从服务器送来的数据变化通知。
objTestGrp.IsSubscribed=True
'建立OPC项集合
Set objItems=objTestGrp.OPCItems
'生成从TAG1到TAG17的项标识符
For I=1To17
strItemIDs(I)="Server.Group.TAG"&I
lClientHandles(I)=I
Next
'添加OPC项
Call objItems.AddItems(17,strItemIDs, lClientHandles,lServerHandles,lErrors)
End Sub
(7)异步读取代码的实现
在定时器事件内进行执行AsyncRead子程序的读取代码,而在读取完成事件处理返回的数据访问结果。
Sub AsyncRead()
Dim lErrors()As Long
If objTestGrp Is Nothing Then
Exit Sub
End If
If objTestGrp.OPCItems.Count>0Then
'异步读取
lTransID_Rd=lTransID_Rd+1
objTestGrp.AsyncRead17,lServerHandles,lErrors,lTransID_Rd, lCancelID_Rd
End If
End Sub
Private Sub objTestGrp_AsyncReadComplete(_
ByVal TransactionID As Long,ByVal NumItems As Long, _
ClientHandles()As Long,ItemValues()As Variant,_
Qualities()As Long,TimeStamps()As Date,Errors() As Long)
……