【VB开源代码栏目提醒】:网学会员鉴于大家对VB开源代码十分关注,论文会员在此为大家搜集整理了“VB OPC程序设计 - 能源电力”一文,供大家参考学习
用
VB 开发 OPC 客户端程序的步骤与实现 离问题结束还有 0 天 0 小时(1)建立新工程或项目,在“工程”菜单下选择“引用”,如图 5-3 所示。
只有引用OPCDAAuoto.DLL 后,在程序中才能创建服务器对象,然后进行一系列的操作。
(2)在弹出的引用窗口里单击“浏览B…”按钮,弹出添加引用窗口,选择 OPCDAAuoto.DLL 文件。
(3)在引用窗口里的 OPC Automation 2.0 前面打钩,按“确定”按钮。
(4)定义全局变量,这样可以在窗体的任何方法的
代码内应用。
变量类型应该指定为对象型。
这些对象最好在窗体的通用部分声明加上“Option Explicit”语句,表示模块里的所有变量都需要显式声明。
由于 OPC 自动化接口的数组的索引要求必须从 1 开始,而系统默认是从 0 开始,为了避免错误最好在
代码的最初加上“Option Base 1”语句。
为了使对象可以处理事件,必须将objTestGrp 和 objServer 的声明中加上“WithEvents”语句,表示声明的对象可以响应事件。
Option ExplicitOption Base 1Dim WithEvents objServer As OPCServerDim objGroups AsOPCGroupsDim WithEvents objTestGrp As OPCGroupDim objItems As OPCItems(5)连接 OPC 服务器和建立 OPC 组考虑到
代码的可反复使用性,采用子程序进行编程。
SubConnectstrProgID 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 组集合 SetobjGroups objServer.OPCGroups End If If objTestGrp Is Nothing Then 添加一个 OPC组 Set objTestGrp objGroups.AddGroup End IfEnd Sub(6)添加 OPC 标签对服务器进行访问前,必须先在 OPC 组里添加要访问的 OPC 标签。
OPC 客户端
程序要按照用户指定的标签或者从组态文件里读取需要添加的 OPC 标签。
Sub AddItem DimstrItemIDs17 As String Dim lClientHandles17 As Long Dim lErrors As Long Dim I AsInteger If objTestGrp Is Nothing Then Exit Sub End If If Not objItems Is Nothing Then IfobjItems.Count 0 Then Exit Sub End If End If 设置组活动状态。
只有处于活动状态的OPC 才进行定期的数据更新。
非活动状态的 OPC 组,除了在接到显然的数据读写要求外,并不收集任何数据。
If mnuSubscribtion.Checked True Then objTestGrp.IsActive TrueElse objTestGrp.IsActive False End If 启动组异步通知。
进行订阅的 OPC 组可以自动收到从服务器送来的数据变化通知。
objTestGrp.IsSubscribed True 建立 OPC 项集合Set objItems objTestGrp.OPCItems 生成从 TAG1 到 TAG17 的项标识符 For I 1 To17 strItemIDsI Server.Group.TAG I lClientHandlesI I Next 添加 OPC 项 CallobjItems.AddItems17 strItemIDs lClientHandles lServerHandles lErrorsEnd Sub(7)异步读取
代码的实现在定时器事件内进行执行 AsyncRead 子程序的读取
代码,而在读取完成事件处理返回的数据访问结果。
Sub AsyncReadDim lErrors As Long If objTestGrp IsNothing Then Exit Sub End If If objTestGrp.OPCItems.Count 0 Then 异步读取lTransID_Rd lTransID_Rd 1objTestGrp.AsyncRead 17 lServerHandles lErrorslTransID_Rd lCancelID_Rd End IfEnd SubPrivate SubobjTestGrp_AsyncReadComplete _ ByVal TransactionID As Long ByVal NumItems AsLong _ ClientHandles As Long ItemValues As Variant _ Qualities As LongTimeStamps As Date Errors As Long……Sub(8)在按钮中执行 AsyncWrite 子程序,完成异步写的操作。
Sub AsyncWritenIndex As Integer ByRef vtItemValues As Variant_ ByRef lErrors As LongDim lHandle1 As Long If objTestGrp Is Nothing Then Exit SubEnd If If objTestGrp.OPCItems.Count 0 Then lHandle1 lServerHandlesnIndex 异步写入 lTransID_Wt lTransID_Wt 1 objTestGrp.AsyncWrite 1 lHandlevtItemValues _ lErrors lTransID_Wt lCancelID_Wt End If End Sub(9)断开 OPC 服务器连接着 OPC 服务器的 OPC 客户应用程序,在退出前必须断开和 OPC 服务器的连接。
因为 OPC 服务器并不知道 OPC 客户应用程序的退出。
如果不先断开连接,那么 OPC 服务器使用的计算机资源就不会被释放。
如果这样的
问题反复发生,久而久之,连续运转的自动控制
系统可能会
计算机资源渐渐枯竭从而发生严重问题,可以显式地把它设置为“Nothing”。
Sub Disconnect Dim lErrors As Long If Not objItems Is Nothing Then If objItems.Count 0 Then objItems.Remove 17 lServerHandles lErrors 清除 OPC 项 End If Set objItems Nothing End If If Not objTestGrp Is Nothing Then objGroups.Remove Group 清除OPC 组 Set objTestGrp Nothing End If If Not objGroups Is Nothing Then Set objGroups Nothing End If If Not objServer Is Nothing Then If objServer.ServerStateOPCDisconnected Then objServer.Disconnect 断开 OPC 服务器. End If Set objServer Nothing End IfEnd Sub