ItemID(返回识别这个OPC项的标识符)、 IsActive(用以控制OPC项的活动状态)、 RequestedDataType(获取项的值的数据类型)、 Value(返回从OPC服务器读取的最新数据值)、
Quality(返回从OPC服务器读取的最新数据值的质量标志)、 TimeStamp(时间戳)等。 主要方法:
Read(从服务器读取OPC项的数值)、Write(向服务器写入OPC项的数值)。
6 OPC浏览器对象OPCBrowser是OPC服务器名称空间的枝和叶的集合,可以浏览服务器配置中项的名字,一个OPCServer对象实例中只能有一个OPCBrowser对象的实例。浏览器功能是选用功能,OPC服务器不支持浏览器的时候,即使执行CreateBrowser也不生成这个对象。 主要属性:
Organization(OPC服务器的名称空间的类型,有平面型和树型两种类型)、
Filter(使用ShowBrancher或ShowLeafs方法时的浏览对象过滤器,使用这个过滤器可以缩小被浏览的名称范围)、
DataType(使用ShowLeafs方法时,希望浏览的标签的数据类型)、 Count(浏览结果中的浏览标签数)。
主要方法:
Item(返回浏览结果中按集合索引ItemSpecifier指定的对象)、
ShowBranches(将现在位置下的所有符合过滤条件的枝加入到浏览结果中)、 ShowLeafs(将现在位置下的所有符合过滤条件的叶加入到浏览结果中)、 MoveUp(向现在位置的上一层移动)、 MoveToRoot(向名称空间的最上层移动)、 MoveDown(向现在位置的下一层移动)、 MoveTo(向浏览器的绝对位置移动)、
GetItemID(由浏览标签的名称返回OPC标签的标识符)。
(1)建立新工程或项目,在“工程”菜单下选择“引用”,如图5-3所示。只有引用OPCDAAuoto.DLL后,在程序中才能创建服务器对象,然后进行一系列的操作。 (2)在弹出的引用窗口里单击“浏览(B)…”按钮,弹出添加引用窗口,选择OPCDAAuoto.DLL文件。
(3)在引用窗口里的OPCAutomation2.0前面打钩,按“确定”按钮。
(4)定义全局变量,这样可以在窗体的任何方法的代码内应用。变量类型应该指定为对象型。这些对象最好在窗体的通用部分声明加上“OptionExplicit”语句,表示模块里的所有变量都需要显式声明。由于OPC自动化接口的数组的索引要求必须从1开始,而系统默认是从0开始,为了避免错误最好在代码的最初加上“OptionBase1”语句。为了
使对象可以处理事件,必须将objTestGrp和objServer的声明中加上“WithEvents”语句,表示声明的对象可以响应事件。 OptionExplicitOptionBase1
Dim WithEventsobjServerAsOPCServer Dim objGroups As OPCGroups
Dim WithEventsobjTestGrpAsOPCGroup Dim objItems As OPCItems
(5)连接OPC服务器和建立OPC组考虑到代码的可反复使用性,采用子程序进行编程。
SubConnect(strProgIDAsString,OptionalstrNodeAsString) If objServerIsNothing Then '建立一个OPC服务器对象 SetobjServer=NewOPCServer EndIf
服务器状态ServerState属性一共有OPCRunning、OPCFailed、OPCNoconfig、OPCSuspended、OPCTest和OPCDisconnected六个值,分别表示正在运行、失败、没有配置、暂停、测试和没有连接六种OPC服务器当前的状态。
如果OPC服务器没有连接,我们才执行objServer.ConnectstrProgID,strNode语句。strProgID就是ProgID,strNode就是用于远程通信的IP地址。
If objServer.ServerState = OPCDisconnected Then'连接OPC服务器 objServer.ConnectstrProgID,strNode EndIf
在VisualBasic中,通过执行一个Set操作实现调用其它接口的方法。 If objGroupsIsNothing Then '建立一个OPC组集合 Set objGroups = objServer.OPCGroups EndIf
If objTestGrpIsNothing Then '添加一个OPC组 Set objTestGrp = objGroups.Add(\ EndIf EndSub
(6)添加OPC标签对服务器进行访问前,必须先在OPC组里添加要访问的OPC标签。
OPC客户端程序要按照用户指定的标签或者从组态文件里读取需要添加的OPC标签。
Sub AddItem()
Dim strItemIDs(17) As String Dim lClientHandles(17) As Long Dim lErrors () As Long DimI As Integer
If ObjTestGrpIsNothing Then ExitSub EndIf
If NotobjItemsIsNothing Then If objItems.Count>0 Then ExitSub EndIf
EndIf'设置组活动状态。只有处于活动状态的OPC才进行定期的数据更新。非活动状态的OPC组,除了在接到显然的数据读写要求外,并不收集任何数据。 If mnuSubscribtion.Checked = True Then objTestGrp.IsActive = True Else objTestGrp.IsActive=False
EndIf'启动组异步通知。进行订阅的OPC组可以自动收到从服务器送来的数据变化通知。
objTestGrp.IsSubscribed=True'建立OPC项集合
SetobjItems=objTestGrp.OPCItems'生成从TAG1到TAG17的项标识符
ForI=1To17strItemIDs(I)=\添加OPC项CallobjItems.AddItems(17,strItemIDs,lClientHandles,lServerHandles,lErrors)EndSub(7)异步读取代码的实现在定时器事件内进行执行AsyncRead子程序的读取代码,而在读取完成事件处理返回的数据访问结果。
SubAsyncRead()DimlErrors()AsLongIfobjTestGrpIsNothingThenExitSubEndIfIfobjTestGrp.OPCItems.Count>0Then'异步读取