我在wincc内部变量中建立了两个有符号16位数,分别TAG1和TAG2,现在想用vb来读取这两个数据放到text控件中,DCOM配置按照要求来的,没问题,而且我把程序和wincc在一台电脑上,不光是读不到数据,连服务器对象都连不上。急呀。下面是我的程序:请高手过目,服务器名次是OPCServer.WinCC,组对象我写的是Internaltags,不知道对不对。
Option Explicit
Option Base 1
Dim WithEvents MyOPCServer As OPCServer
Dim WithEvents MyOPCGroup As OPCGroup
Private ClientHandles() As Long
Private ServerHandles() As Long
Private Errors() As Long
Private SName As String ' 服务器名称
Private ItemIDs() As String
Private SNode As String '计算机名或者网址
Private ItemAnz As Long
Dim cell(2) As Variant
Sub Connect(ServerName, NodeName) '连接子函数
On Error GoTo ErrorHandler
Set MyOPCServer = New OPCServer
MyOPCServer.Connect ServerName, NodeName
MsgBox "Connect successful!"
Exit Sub
ErrorHandler:
MsgBox "Connect Error !", vbCritical
End Sub
Sub Add_Group(GroupNm) '添加组函数
On Error GoTo ErrorHandler
MyOPCServer.OPCGroups.DefaultGroupUpdateRate = 0
Set MyOPCGroup = MyOPCServer.OPCGroups.Add(GroupNm)
MyOPCGroup.IsSubscribed = True
MyOPCGroup.IsActive = True
Exit Sub
ErrorHandler:
MsgBox "Add Group Error!", vbCritical
End Sub
Sub Add_Items(ItemIDs() As String, ItemAnz As Long) '添加标签集合
Dim i As Long
ReDim ClientHandles(ItemAnz)
On Error GoTo ErrorHandler
For i = 1 To ItemAnz
ClientHandles(i) = i
Next
MyOPCGroup.IsSubscribed = False
MyOPCGroup.OPCItems.AddItems ItemAnz, ItemIDs, ClientHandles, ServerHandles, Errors
MyOPCGroup.IsSubscribed = True '允许订阅或者异步读取方式
Erase Errors()
Exit Sub
ErrorHandler:
MsgBox "Add Item Error!", vbCritical
End Sub
Sub Form_Load()
CmdConnect.Enabled = True
CmdDisconnect.Enabled = False
End Sub
'读取变量值放入text控件中
Sub MyOPCGroup_DataChange(ByVal TransactionID As Long, ByVal NumItems As Long, ClientHandles() As Long, ItemValues() As Variant, Qualities() As Long, TimeStamps() As Date)
Dim i As Integer
On Error GoTo ErrorHandler
For i = 1 To NumItems
cell(ClientHandles(i)) = ItemValues(i)
Next
Form1.TXT_tag_1.Text = cell(1)
Form1.TXT_tag_2.Text = cell(2)
Exit Sub
ErrorHandler:
MsgBox "Data_change Error!", vbCritical
End Sub
Sub Disconnect()
MyOPCServer.Disconnect
Set MyOPCServer = Nothing
End Sub
Sub Rem_Group(GroupNm As String) '删除组对象
MyOPCServer.OPCGroups.Remove GroupNm
Set MyOPCGroup = Nothing
End Sub
Sub Rem_Items(ItemAnz As Long) '删除标签集合对象
MyOPCGroup.OPCItems.Remove ItemAnz, ServerHandles, Errors
Erase ClientHandles()
Erase ServerHandles()
Erase Errors()
End Sub
Sub CmdConnect_Click()
Dim i As Long
ReDim ItemIDs(2)
ItemAnz = 2
ItemIDs(1) = "TAG1"
ItemIDs(2) = "TAG2"
SNode = TXT_Node.Text
Call Connect("OPCServer.WinCC", SNode)
Call Add_Group("Internaltags")
Call Add_Items(ItemIDs(), ItemAnz)
CmdConnect.Enabled = False
CmdDisconnect.Enabled = True
End Sub
Sub CmdDisconnect_Click()
Call Rem_Items(ItemAnz)
Call Rem_Group("Internaltags")
Call Disconnect
CmdConnect.Enabled = True
CmdDisconnect.Enabled = False
End Sub