OPC客户程序(VB篇——同步)
2024-07-21 02:20:56
供稿:网友
 
建立如下窗体:
 
引用如下:
代码如下:
option explicit
dim withevents serverobj as opcserver
dim withevents groupobj as opcgroup
dim itemobj as opcitem
private sub command_start_click()
 dim outtext as string
 
 on error goto errorhandler
 
 command_start.enabled = false
 command_read.enabled = true
 command_write.enabled = true
 command_exit.enabled = true
 
 outtext = "连接opc服务器"
 set serverobj = new opcserver
 serverobj.connect ("xxxserver")'xxxserver为某opc服务器名称
 
 outtext = "添加组"
 set groupobj = serverobj.opcgroups.add("group")
 
 outtext = "adding an item to the group"
 set itemobj = groupobj.opcitems.additem("xxxitem", 1)'xxxitem为添加的item名称
 
 exit sub
errorhandler: '如果出现异常,则报出错误。
 msgbox err.description + chr(13) + _
 outtext, vbcritical, "error"
 
end sub
private sub command_read_click()'同步读
 dim outtext as string
 dim myvalue as variant
 dim myquality as variant
 dim mytimestamp as variant
 
 on error goto errorhandler
 outtext = "读item值"
 itemobj.read opcdevice, myvalue, myquality, mytimestamp
 edit_readval = myvalue
 edit_readqu = getqualitytext(myquality)
 edit_readts = mytimestamp
 
 exit sub
 
errorhandler:
 msgbox err.description + chr(13) + _
 outtext, vbcritical, "error"
 
end sub
private sub command_write_click()'同步写
 
 dim outtext as string
 dim serverhandles(1) as long
 dim myvalues(1) as variant
 dim myerrors() as long
 
 outtext = "写值"
 on error goto errorhandler
 
 
 
 serverhandles(1) = itemobj.serverhandle
 myvalues(1) = edit_writeval
 groupobj.syncwrite 1, serverhandles, myvalues, myerrors
 
 edit_writeres = serverobj.geterrorstring(myerrors(1))
 
 exit sub
 
errorhandler:
 msgbox err.description + chr(13) + _
 outtext, vbcritical, "error"
end sub
private sub command_exit_click()'停止,删除item,删除group,删除server。
 dim outtext as string
 
 on error goto errorhandler
 command_start.enabled = true
 command_read.enabled = false
 command_write.enabled = false
 command_exit.enabled = false
 
 outtext = "删除对象"
 set itemobj = nothing
 serverobj.opcgroups.removeall
 set groupobj = nothing
 serverobj.disconnect
 set serverobj = nothing
 
 exit sub
 
errorhandler:
 msgbox err.description + chr(13) + _
 outtext, vbcritical, "error"
 
end sub
private function getqualitytext(quality) as string
 select case quality
 case 0: getqualitytext = "bad"
 case 64: getqualitytext = "uncertain"
 case 192: getqualitytext = "good"
 case 8: getqualitytext = "not_connected"
 case 13: getqualitytext = "device_failure"
 case 16: getqualitytext = "sensor_failure"
 case 20: getqualitytext = "last_known"
 case 24: getqualitytext = "comm_failure"
 case 28: getqualitytext = "out_of_service"
 case 132: getqualitytext = "last_usable"
 case 144: getqualitytext = "sensor_cal"
 case 148: getqualitytext = "egu_exceeded"
 case 152: getqualitytext = "sub_normal"
 case 216: getqualitytext = "local_override"
 
 case else: getqualitytext = "unknown error"
 end select
end function