《VB开发OPC客户端程序的步骤与实现..pdf》由会员分享,可在线阅读,更多相关《VB开发OPC客户端程序的步骤与实现..pdf(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、VB 开发 OPC 客户端程序的步骤与实现(1)建立新工程或项目,在“工程”菜单下选择“引用”,如图 5-3所示。只有引用 OPCDAAuoto.DLL 后,在程序中才能创建服务器对象,然后进行一系列的操作。(2)在弹出的引用窗口里单击“浏览(B)”按钮,弹出添加引用窗口,选择 OPCDAAuoto.DLL 文件。(3)在引用窗口里的OPCAutomation 2.0 前面打钩,按“确定”按钮。(4)定义全局变量,这样可以在窗体的任何方法的代码内应用。变量类型应该指定为对象型。这些对象最好在窗体的通用部分声明加上“Option Explicit”语句,表示模块里的所有变量都需要显式声明。由于
2、OPC 自动化接口的数组的索引要求必须从1 开始,而系统默认是从 0 开始,为了避免错误最好在代码的最初加上“OptionBase 1”语句。为了使对象可以处理事件,必须将objTestGrp 和 objServer的声明中加上“WithEvents”语句,表示声明的对象可以响应事件。OptionExplicitOptionBase 1Dim WithEventsobjServerAs OPCServerDim objGroupsAs OPCGroupsDim WithEventsobjTestGrpAs OPCGroupDim objItemsAs OPCItems(5)连接 OPC 服务器
3、和建立OPC?br 考虑到代码的可反复使用性,采用子程序进行编程。Sub Connect(strProgIDAs String,OptionalstrNode As String)IfobjServerIsNothing Then建立一个 OPC 服务器对象Set objServer=NewOPCServerEnd If服务 器状 态 ServerState属 性一 共有 OPCRunning、OPCFailed、OPCNoconfig、OPCSuspended、OPCTest和 OPCDisconnected六个值,分别表示正在运行、失败、没有配置、暂停、测试和没有连接六种OPC 服务器当前
4、的状态。如果OPC 服务器没有连接,我们才执行objServer.ConnectstrProgID,strNode 语 句。strProgID就 是ProgID,strNode 就是用于远程通信的IP 地址。IfobjServer.ServerState=OPCDisconnected Then连接 OPC 服务器objServer.ConnectstrProgID,strNodeEnd If在 VisualBasic 中,通过执行一个Set 操作实现调用其它接口的方法。IfobjGroups IsNothingThen建立一个 OPC 组集合Set objGroups=objServer.O
5、PCGroupsEnd IfIfobjTestGrpIs NothingThen添加一个 OPC 组Set objTestGrp=objGroups.Add(Group)End IfEnd Sub(6)添加 OPC 标签对服务器进行访问前,必须先在 OPC 组里添加要访问的OPC 标签。OPC客户端程序要按照用户指定的标签或者从组态文件里读取需要添加的 OPC 标签。Sub AddItem()Dim strItemIDs(17)As StringDim lClientHandles(17)As LongDim lErrors()As LongDim I As IntegerIfobjTestG
6、rpIs NothingThenExitSubEnd IfIfNot objItemsIs NothingThenIfobjItems.Count 0 ThenExitSubEnd IfEnd If设置组活动状态。只有处于活动状态的OPC 才进行定期的数据更新。非活动状态的 OPC 组,除了在接到显然的数据读写要求外,并不收集任何数据。IfmnuSubscribtion.Checked=True ThenobjTestGrp.IsActive=TrueElseobjTestGrp.IsActive=FalseEnd If启动组异步通知。进行订阅的 OPC 组可以自动收到从服务器送来的数据变化通
7、知。objTestGrp.IsSubscribed=True建立 OPC 项集合Set objItems=objTestGrp.OPCItems生成从 TAG1到 TAG17 的项标识符For I=1 To 17strItemIDs(I)=Server.Group.TAG&IlClientHandles(I)=INext添加 OPC 项CallobjItems.AddItems(17,strItemIDs,lClientHandles,lServerHandles,lErrors)End Sub(7)异步读取代码的实现在定时器事件内进行执行AsyncRead子程序的读取代码,而在读取完成事件处
8、理返回的数据访问结果。Sub AsyncRead()Dim lErrors()As LongIfobjTestGrpIsNothingThenExitSubEnd IfIfobjTestGrp.OPCItems.Count 0 Then异步读取lTransID_Rd=lTransID_Rd+1objTestGrp.AsyncRead 17,lServerHandles,lErrors,lTransID_Rd,lCancelID_RdEnd IfEnd SubPrivateSub objTestGrp_AsyncReadComplete(_ByVal TransactionIDAs Long,B
9、yVal NumItemsAs Long,_ClientHandles()As Long,ItemValues()As Variant,_Qualities()As Long,TimeStamps()As Date,Errors()As Long)Sub(8)在按钮中执行AsyncWrite 子程序,完成异步写的操作。Sub AsyncWrite(nIndexAs Integer,ByRef vtItemValues()AsVariant,_ByRef lErrors()As Long)Dim lHandle(1)As LongIfobjTestGrpIs NothingThenExitSub
10、End IfIfobjTestGrp.OPCItems.Count 0 ThenlHandle(1)=lServerHandles(nIndex)异步写入lTransID_Wt=lTransID_Wt+1objTestGrp.AsyncWrite1,lHandle(),vtItemValues,_lErrors,lTransID_Wt,lCancelID_WtEnd IfEnd Sub(9)断开 OPC 服务器连接着 OPC 服务器的 OPC 客户应用程序,在退出前必须断开和OPC 服务器的连接。因为 OPC 服务器并不知道 OPC 客户应用程序的退出。如果不先断开连接,那么OPC 服务器使用
11、的计算机资源就不会被释放。如果这样的问题反复发生,久而久之,连续运转的自动控制系统可能会计算机资源渐渐枯竭从而发生严重问题,可以显式地把它设置为“Nothing”。Sub Disconnect()Dim lErrors()As LongIfNot objItemsIs NothingThenIfobjItems.Count 0 ThenobjItems.Remove 17,lServerHandles,lErrors清除 OPC 项End IfSet objItems=NothingEnd IfIfNot objTestGrpIsNothingThenobjGroups.Remove Group清除 OPC 组Set objTestGrp=NothingEnd IfIfNot objGroups IsNothingThenSet objGroups=NothingEnd IfIfNot objServerIsNothingThenIfobjServer.ServerStateOPCDisconnected ThenobjServer.Disconnect断开 OPC 服务器.End IfSet objServer=NothingEnd IfEnd Sub
限制150内