Esempio di OPC Data Access Automation Creazione di un OPC Client http://www.opcfoundation.org/
Esempio di OPC Data Access Automation Creazione di un OPC Client L’OPC Client è stato realizzato: in Visual Basic® 6.0 usando la libreria OPC Automation 2.0 messa a disposizione dalla OPC Foundation in Progetto -> Riferimenti deve essere selezionata la libreria “OPC Automation 2.0”. Implementa solo servizi (lettura/scrittura) sincroni Non realizza ad esempio l’aggiornamento automatico dei dati
Esempio di OPC Data Access Automation Creazione di un OPC Client
Passo 1: Raccolta delle Informazioni sugli OPC Servers disponibili in un Nodo Viene fornita la lista dei Servers, presenti nella macchina specificata dall’indirizzo IP o dal corrispondente URL. Se non viene specificato nessun indirizzo viene fornita la lista degli OPC Servers della macchina locale. GetOPCServers (Optional Node As Variant) As Variant Metodo dell’Oggetto OPCServer Restituisce i nomi (ProgIDs) degli OPC Servers. Si utilizza uno di questi ProgID nel metodo Connect. Il servizio fornisce un array di stringhe. L’indirizzo del Node è l’indirizzo IP che può essere di tipo “www.vendor.com” o “180.151.19.75”.
Passo 1: Raccolta delle Informazioni sugli OPC Servers disponibili in un Nodo Set AnOPCServer = New OPCServer OPCServerList.Clear NodeServerName = Text2.Text AllOPCServers = AnOPCServer.GetOPCServers(NodeServerName) For i = LBound(AllOPCServers) To UBound(AllOPCServers) OPCServerList.AddItem AllOPCServers(i) Next i Note: OPCServerList è definita come ListBox AllOPCServers è locale di tipo Variant
Passo 2: Connessione con l’OPC Server Selezionato Connect (ProgID As String, Optional Node As Variant) Metodo dell’Oggetto OPCServer Viene invocato per stabilire una connessione con un OPC Data Access Server. ProgID: È una stringa che identifica un OPC Data Access Server. Node: Specifica l’indirizzo IP della macchina con cui connettersi
Passo 2: Connessione con l’OPC Server Selezionato Dim ConnectedServerName As String Dim NodeServerName As Variant On Error GoTo MostraErroriConnect Set ConnectedOPCServer = New OPCServer 'Viene istanziato un oggetto OPCServer ConnectedServerName = OPCServerName.Text NodeServerName = Text2.Text ConnectedOPCServer.Connect ConnectedServerName, NodeServerName GoTo SaltaErroriConnect MostraErroriConnect: Set ConnectedOPCServer = Nothing Call MostraErrori("Connect", Err.Number) SaltaErroriConnect: If Not ConnectedOPCServer Is Nothing Then form1.Caption = "Server Connesso"
Passo 3: Visualizzazione delle Proprietà del Server a cui ci si è Connessi Le proprietà del Server possono essere ottenute tramite il pulsante “Proprietà”. Queste vengono visualizzate in una schermata secondaria
Passo 3: Visualizzazione delle Proprietà del Server a cui ci si è Connessi Dim ConnectedOPCServer As OPCServer Form2.Show Form2.Label5.Caption = ConnectedOPCServer.StartTime Form2.Label12.Caption = ConnectedOPCServer.CurrentTime Form2.Label16.Caption = ConnectedOPCServer.LastUpdateTime Form2.Label17.Caption = ConnectedOPCServer.MajorVersion Form2.Label18.Caption = ConnectedOPCServer.MinorVersion Form2.Label19.Caption = ConnectedOPCServer.BuildNumber Form2.Label20.Caption = ConnectedOPCServer.VendorInfo Form2.Label21.Caption = ConnectedOPCServer.ServerState Form2.Label22.Caption = ConnectedOPCServer.LocaleID Form2.Label23.Caption = ConnectedOPCServer.Bandwidth Form2.Label24.Caption = ConnectedOPCServer.ServerName Form2.Label25.Caption = ConnectedOPCServer.ServerNode
Passo 3: Visualizzazione delle Proprietà del Server a cui ci si è Connessi
Passo 4: Creazione di un Gruppo Il tasto “Aggiungi” permette la creazione e l’aggiunta di un nuovo gruppo a quelli esistenti. Il gruppo così creato avrà il nome e l’Update Rate specificati nelle corrispondenti caselle.
Passo 4: Creazione di un Gruppo Bisogna prima creare l'oggetto OPCGroups collection (dall'oggetto OPCServer) Add(Optional Name As Variant) As OPCGroup: Metodo dell’Oggetto OPC Groups Crea un nuovo oggetto OPCGroup e lo aggiunge alla collezione. Name è il Nome del gruppo. Il nome deve essere univoco. Se non viene fornito nessun nome il server ne genera uno. Il gruppo eredita i valori di default (o quelli impostati come default nell'OPCGroups collection): es. Gruppo attivo, deadband 0 Dopo che un gruppo è aggiunto i suoi attributi possono essere modificati (Es UpdateRate; Default=1000 msec.)
Passo 4: Creazione di un Gruppo Dim ConnectedOPCServer As OPCServer Dim ConnectedServerGroup As OPCGroups Set ConnectedServerGroup = ConnectedOPCServer.OPCGroups Set ConnectedGroup = ConnectedServerGroup.Add(OPCGroupName.Text) ConnectedGroup.UpdateRate = Val(GroupUpdateRate.Text) ConnectedGroup.IsSubscribed = True ConnectedGroup.IsActive = True ConnectedGroup.DeadBand = 10
Passo 5: Creazione Browser & Esplorazione Items Disponibili Permette l’esplorazione delle risorse messe a disposizione dal Server, la cui organizzazione può essere di tipo gerarchica o flat. Nel primo caso gli item vengono raggruppati formando una struttura ad albero con “foglie” (sottoinsieme di Items) e “nodi”. Se è di tipo flat vengono mostrati unicamente gli Item. L'oggetto OPCBrowser deve essere creato utilizzando un metodo dell'OPCServer object.
Passo 5: Creazione Browser & Esplorazione Items Disponibili CreateBrowser Metodo dell’Oggetto OPC Server Crea un oggetto OPCBrowser Visualizza l’organizzazione del Server, che può essere di tipo gerarchico o flat L’Oggetto OPCBrowser ha un attributo (Organization) che restituisce il tipo di organizzazione interna (OPCHierarchical o OPCFlat). ShowLeafs Metodo dell’Oggetto OPCBrowser Visualizza i nomi delle foglie relativi alla posizione corrente della "navigazione" (nel caso in cui l’organizzazione del server sia di tipo “gerarchica”).
Passo 6: Aggiunta di un Item nel Gruppo Dopo aver selezionato un Gruppo è possibile aggiungervi un Item tramite Item Collection: OPCItems. Dim mygroup As OPCGroup Set OneOPCItem = mygroup.OPCItems.AddItem(Text1.Text, mygroup.ClientHandle) AddItem (ItemID As String, ClientHandle As Long) Metodo dell’Oggetto OPCItems Crea un nuovo oggetto OPCItem e lo aggiunge alla collezione. ItemID: nome dell’Item selezionato da aggiungere. ClientHandle identificativo interno al client
Passo 7: Lettura Proprietà Items Selezionando un gruppo e azionando il pulsante “Proprietà Items”, è possibile visualizzare una form contenente le informazioni relative agli Items appartenenti al gruppo specificato. Queste comprendono: ItemID, Value, DataType, Quality e TimeStamp.
Passo 7: Lettura Proprietà Items Read (Source, Optional Value, Optional Quality, Optional TimeStamp) Metodo dell’Oggetto OPCItem Legge un Item dal Server, o dalla cache o dal device (0 o 1) Legge l’ultimo valore letto dal Server Vengono letti: Value, Quality, TimeStamp Gli attributi che sono restituiti sono tra loro sincroni
Passo 7: Lettura Proprietà Items Form3.Timer1.Interval = Grp1.UpdateRate 'Mostra gli attributi degli items appartenenti alla collezione del gruppo selezionato. L’aggiornamento e’ periodico (update rate) For i = 1 To ItemCount Set Itm = itms.Item(i) 'Prendi l'item i-esimo della collezione. Itm.Read (1) 'Viene invocato il metodo Read sull'oggetto OPCItem corrente. Form3.ListView1.ListItems.Add 'Aggiungiamo al listview le informazioni seguenti Form3.ListView1.ListItems.Item(i) = Itm.ItemID Form3.ListView1.ListItems.Item(i).SubItems(1) = Itm.Value Form3.ListView1.ListItems.Item(i).SubItems(2) = Itm.CanonicalDataType Form3.ListView1.ListItems.Item(i).SubItems(3) = Itm.Quality Form3.ListView1.ListItems.Item(i).SubItems(4) = Itm.TimeStamp Next i
Passo 8: Scrittura Proprietà Items Selezionando un Item è possibile modificarne il valore Write (Value As Variant) Metodo dell’Oggetto OPC Item Scrivere il valore Value nel server Nota Bene: il valore viene scritto nel Device
Passo 9: Eliminazione Item Remove (Count As Long, ServerHandles() As Long, ByRef Errors() As Long) Metodo dell’Oggetto OPCItems Rimuove uno o più OPCItem contenuti nella collezione Count: il numero di items che devono essere rimossi. ServerHandles(): array di identificatori usati dal server per gli item processati ByRef Errors() array di Long che indicano il successo delle operazioni effettuate sugli items
Passo 10: Eliminazione Gruppo Remove(ItemSpecifier As Variant) Metodo dell’Oggetto OPCGroup Rimuove l’OPCGroup specificato ItemSpecifier: nome di un OPCGroup. ConnectedServerGroup.Remove (List2.List(List2.ListIndex)) List2.Clear ListView2.ListItems.Clear Command2.Enabled = False Command4.Enabled = False Command3.Enabled = False For i = 1 To ConnectedServerGroup.Count List2.AddItem (ConnectedServerGroup.Item(i).Name) Next i
Passo 11: Disconnessione dal Server Disconnect Metodo Oggetto OPCServer Disconnette il client da un OPC Server. Dim ConnectedOPCServer As OPCServer ConnectedOPCServer.Disconnect