应网友的要求本人做了一个VB通过OPC访问WinCC变量的例子,如下是源代码,
在windows2000+(wincc5.1或者wincc6.0sp1)上运行通过!!!
我有源程序,但我不能上传,斑竹可否帮我上传!
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(Groupname) '添加组函数
On Error GoTo ErrorHandler
MyOPCServer.OPCGroups.DefaultGroupUpdateRate = 0
Set MyOPCGroup = MyOPCServer.OPCGroups.Add(Groupname)
MyOPCGroup.IsSubscribed = True
MyOPCGroup.IsActive = True
MsgBox "Add Group successful!" 'vbCritical
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()
MsgBox "Add Item successful!" 'vbCritical
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)
'MsgBox "Data_change successful!" ' vbCritical
Exit Sub
ErrorHandler:
MsgBox "Data_change Error!", vbCritical
End Sub
Sub Disconnect()
MyOPCServer.Disconnect
Set MyOPCServer = Nothing
End Sub
Sub Rem_Group(Groupname As String) '删除组对象
MyOPCServer.OPCGroups.Remove Groupname
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("Internal tags")
Call Add_Items(ItemIDs(), ItemAnz)
Form1.Refresh
CmdConnect.Enabled = False
CmdDisconnect.Enabled = True
End Sub
Sub CmdDisconnect_Click()
Call Rem_Items(ItemAnz)
Call Rem_Group("Internal tags")
Call Disconnect
CmdConnect.Enabled = True
CmdDisconnect.Enabled = False
End Sub
如上的代码是在VB中编写的,在wincc中定义了tag1,tag2两个要访问的变量。