OPC Server是一套利用微軟的COM/DCOM技術實現工業自動化資料獲取的架構。OPC Server提供OPC接口,它將與之相連的物理設備(PLC)的信息值通過接口返回到客戶端應用程序。也就是說,客戶端通過這些接口,可以獲得與OPC Server連接的物理設備的信息。對於集成應用程序,只要支持OPC接口,就能輕易訪問物理設備,而無需相關的技術信息。 程序設計者可以使用相同的程序代碼,操作不同的硬件裝置,充分達成軟件複用的目的。
它使用OPC Server引入了簡單的示例程序。此示例的代碼使用OPC 如果從.NET訪問OPC Server,則需要交換COM和.NET的包裝器。 自動化包裝器(OPCDAAUTO.DLL),因此它幾乎等於VB6.0。
Declaration
Option Explicit Public OpcServer As IOPCServerDisp Public OpcItemMgt As IOPCItemMgtDisp Public OpcItem As IOPCItemDisp Private Const ItemMax = 8 Private Const OPC_DS_CACHE = 1 Private Const OPC_DS_DEVICE = 2 Dim ClientHandles(ItemMax) As Long Dim ServerHandles As Variant Dim bConnect As Boolean
連接到OPC服務器,創建OPCGroup和添加標籤
Private Sub CONNECT_Click() On Error GoTo err_hd Dim i% If bConnect Then CONNECT.Caption = "Connect" Set OpcServer = Nothing Set OpcItemMgt = Nothing Set OpcItem = Nothing bConnect = False READ_Button.Enabled = False WRITE_Button.Enabled = False For i% = ItemName.lbound To ItemName.ubound ItemName(i%).Enabled = True Next i% Exit Sub End If '*** Connect to OPC Server *** Set OpcServer = CreateObject(Form1.ServerName.Text) If TypeName(OpcServer) = TypeName(Nothing) Then Return '*** Add OPCGroup *** Dim UpdateRate As Long Dim ServerHdl As Long UpdateRate = UpdateRateSet.Text Set OpcItemMgt = OpcServer.AddGroup("Group One", True, UpdateRate, 22, 1, 0, ServerHdl, UpdateRate) If TypeName(OpcItemMgt) = TypeName(Nothing) Then Return '*** Add OPCItems *** Dim ItemIDs(ItemMax) As String Dim AccessPaths(ItemMax) As String Dim Active(ItemMax) As Boolean Dim Errors As Variant Dim ItemObjects As Variant Dim DataType(ItemMax) As Variant For i% = 0 To ItemMax - 1 Active(i%) = True ClientHandles(i%) = 22 + i% AccessPaths(i%) = "" ItemIDs(i%) = Form1.ItemName(i%).Text DataType(i%) = 2 Next i% OpcItemMgt.AddItems ItemMax, ItemIDs, Active,ClientHandles, ServerHandles, Errors, ItemObjects, AccessPaths, DataType Set OpcItem = ItemObjects(0) bConnect = True CONNECT.Caption = "DisConnect" READ_Button.Enabled = True WRITE_Button.Enabled = True For i% = ItemName.lbound To ItemName.ubound ItemName(i%).Enabled = False Next i% Exit Sub err_hd: MsgBox "Error connecting" For i% = 0 To ItemMax - 1 Form1.Value(i%) = "Error" Next i% End Sub
緩存讀取
Private Sub READ_Button_Click() Dim ReadValue As Variant Dim pQuality As Variant Dim pTimestamp As Variant Dim Errors As Variant Dim i% Dim io As IOPCSyncIODisp Set io = OpcItemMgt '*** Cache Read *** io.OPCRead OPC_DS_CACHE, ItemMax, ServerHandles, ReadValue, pQuality, pTimestamp, Errors For i% = 0 To ItemMax - 1 Form1.Value(i%) = ReadValue(i%) pTimestamp(i%) = DateAdd("h", 9, pTimestamp(i%)) Form1.Time(i%) = pTimestamp(i%) Form1.Quality(i%) = pQuality(i%) Next i% End Sub
SyncWrite
Private Sub WRITE_Button_Click() Dim WriteValue(ItemMax) As Variant Dim io As IOPCSyncIODisp Dim Errors As Variant Dim i% Set io = OpcItemMgt For i% = 0 To ItemMax - 1 WriteValue(i%) = Form1.Value(i%) Next i% '*** SyncWrite *** io.OPCWrite ItemMax, ServerHandles, WriteValue, Errors End Sub