http://www.opcfoundation.org/ Integrazione delle Informazioni Windows 3.1 Windows-95 Windows NT Client Applications Business Management Windows NT Operator Console RT/History Data Server Windows NT RT/History Data Server Windows NT Operator Console Plant Highway Plant Highway Process Management Controller Fieldbus Fisher Measurement -Pressure Valves -Temp Positioners -Flow -Level Coriolis Analytical PD Meters Common Head -Simple -Analog I/O Handheld Configuration and PDA -Complex -Discrete I/O Maintenance -TC/RTD Field Management Primo livello: Field Management. A questo livello le informazioni sono relative ai dispositivi di campo Secondo livello: Process Management. Comprende i Sistemi di Controllo Distribuiti (DCS) e i sistemi SCADA per il controllo dei processi Terzo livello: Business Management. In questo livello si integrano le informazioni raccolte dal processo con i sistemi per la gestione finanziaria. Integrazione delle Informazioni Necessità di accedere ai dati di campo da qualunque parte dell’impianto Visione omogenea dei dati (semantica dei dati) Indipendenza dei programmi dalle caratteristiche hardware/software della sorgente dati OLE for Process Control OPC Scopo: fornire una visione unica ed indipendente dalla sorgente dei dati prodotti in un impianto industriale Si basa su tecnologie consolidate in ambiente Windows: Object Linking and Embedding (OLE). Insieme di servizi in grado di permettere alle applicazioni Windows di scambiare oggetti. Distributed Component Object Model (DCOM). Modello per la comunicazione tra applicazioni Windows attraverso reti di comunicazione. Component Object Model (COM). Modello per la comunicazione tra applicazioni Windows locali. OLE for Process Control OPC OPC è un’architettura client/server che permette ad una qualsiasi sorgente di dati (Server) di comunicare in modo standard con qualsiasi altro processo (Client) dotato della stessa interfaccia. I fornitori hardware offrono un Server OPC, che permette a qualsiasi applicazione Client di accedere ai dati da esso pubblicati. Vantaggio principale di OPC: Indipendenza da una tecnologia proprietaria. OLE for Process Control OPC Application Y Application X ... OPC Interface OPC Server A Application OPC I/F OPC Interface OPC Server B OPC Server C OPC I/F SCADA System Physical I/F Physical I/O OPC Server Physical I/F Physical I/O I server OPC Un server OPC deve fornire le seguenti interfacce: OPC Alarm&Event Server OPC HistoricalData Server OPC DataAccess Server OPC Alarm & Event Allarme: un allarme è una condizione “anomala”, dove per condizione si intende uno stato di un OPC ServerEvent, o di uno degli oggetti che contiene. Evento: un evento è un avvenimento che ha un significato per l’OPC Server, per l'apparecchiatura che rappresenta e per i suoi OPC Client. OPC Alarm & Event L’interfaccia OPC Alarm & Event fornisce servizi affinchè: gli OPC client possano essere notificati sui tipi di eventi che l'OPC server supporta. gli OPC client possano ricevere la notifica dell’occorrenza di uno o più eventi. Inoltre si possono usare filtri per definire un sottoinsieme dell’evento desiderato. Accedere e manipolare le condizioni implementate dall'OPC server (gestione allarmi). OPC HistoricalData Gli historical engines forniscono una fonte aggiuntiva d’informazioni che devono essere distribuite agli utenti e ai software a cui servono. Nell’ottica dell’integrazione dei dati a tutti i livelli, le informazioni storiche possono essere considerate come un altro tipo di dati da condividere ed integrare. OPC HistoricalData Ci sono molti tipi di server Storici. Qualche tipo chiave supportato è: Simple Trend Historical Data Servers. Questi server permettono l’immagazzinamento di dati in piccole quantità di tipo semplice; Complex Data Compression and Analysis Servers. Questi server provvedono alla compressione dei dati. Sono capaci di fornire dati riassuntivi o una loro analisi, tipo valori medi, valor massimo, minimo ecc. OPC Data Access OPC Data Access Server permette di scegliere due sorgenti di dati: Cache e Device. Un OPC Data Access server comprende gli oggetti: Server, Group, Item e Browser. L’oggetto OPC Server mantiene le informazioni sul server e funge da contenitore per gli oggetti OPC Group. L'oggetto OPC Group fornisce i meccanismi per contenere e organizzare logicamente gli OPC Item. Per ciascun gruppo è possibile associare la frequenza con cui un OPC Server può aggiornare i dati relativi agli OPCItem in esso contenuti. OPC Data Access Gli OPC Item rappresentano connessioni a sorgenti dati all’interno del server. Ogni item ha associato un: Value, una Quality e un TimeStamp Si noti che gli Item non sono le sorgenti dei dati, ma solo i collegamenti ad esse L’ oggetto OPC Browser è una collezione di “rami” o di nomi di Item che esistono nel server. Il browsing è opzionale, cioè il server può non supportarlo. Interfacce Custom e Automation Le specifiche OPC contengono due set di interfacce: Custom Interfaces; Automation Interfaces. C++ Application OPC Custom I/F OPC Server (In-Proc, Local, Remote, Handler) VB Application OPC Automation I/F Vendor Specific Logic OPC Data Access Automation L’OPC Data Access Automation Interface 2.xx aggiorna la precedente versione OPC 1.0. Questo per: fornire al programmatore Visual Basic delle interfacce più semplici; sfruttare le nuove caratteristiche del Visual Basic (es: gli eventi) Caratteristica Automation: principale dell’OPC Data Access viene creato un wrapper DLL (involucro) per gli OPC Data Access Custom Interface Servers già esistenti; viene fornito così un meccanismo automatico per accedere alle stesse funzionalità ottenibili dalla interfaccia Custom. OPC Data Access Automation Automation Client OPC Automation Wrapper COM / DCOM OPC Custom Interface Server OPC Data Access Automation L’ OPC Data Access Automation Interface fornisce quasi tutte le funzionalità dell’ OPC Data Access Custom Interface, sia quelle obbligatorie che quelle opzionali. Le interfacce sono completamente supportate da VC++ e Visual Basic. Le interfacce non supportano VBScript o Java Script, per queste applicazioni verrà sviluppato un wrapper apposito. Modello dell’OPC Data Access Automation OPCServer OPCGroups (collection) OPCBrowser OPCGroup OPCItems (collection) OPCItem 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 Properties| References deve essere selezionata la libreria “OPC Automation 2.0”. 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 OPC Server 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 Passo 2: Connessione con l’OPC Server Selezionato Connect (ProgID As String, Optional Node As Variant) Metodo dell’Oggetto OPC Server 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 Set ConnectedOPCServer = New OPCServer ConnectedServerName = OPCServerName.Text NodeServerName = Text2.Text ConnectedOPCServer.Connect ConnectedServerName, NodeServerName 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 Add(Optional Name As Variant) As OPCGroup: Metodo dell’Oggetto OPC Groups Crea un nuovo oggetto OPCGroup e lo aggiunge alla collezione. Name: Nome del gruppo. Il nome deve essere univoco. Se non viene fornito nessun nome il server ne genera uno. Dopo che un gruppo è aggiunto i suoi attributi possono essere modificati (vedi 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) Command2.Enabled = False Passo 5: Creazione Browser & Esplorazione Items Disponibili 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 “archi” (cioè un certo sottoinsieme di Items) e “nodi” (cioè ogni singolo Item). Se è di tipo flat vengono mostrati unicamente gli Item. OPCClient consente una esplorazione delle risorse del server in modo agevole e intuitivo. 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 Se è di tipo gerarchico vengono mostrati i vari “rami” e “foglie” Se è di tipo flat vengono mostrati direttamente gli Item L’Oggetto OPC Browser ha un attributo (Organization) che restituisce il tipo di organizzazione interna. ShowLeafs Metodo dell’Oggetto OPC Browser Visualizza i nomi delle foglie della posizione corrente (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. Un item può far parte anche di più gruppi contemporaneamente. Passo 6: Aggiunta di un Item nel Gruppo GetOPCGroup (ItemSpecifier As Variant) As OPCGroup. Metodo dell’Oggetto OPC Groups Restituisce un OPCGroup indicato dall’ItemSpecifier. ItemSpecifier: nome dell’OPC Group. AddItem (ItemID As String, ClientHandle As Long) Metodo dell’Oggetto OPC Items Crea un nuovo oggetto OPCItem e lo aggiunge alla collezione. ItemID: nome dell’item selezionato da aggiungere. ClientHandle identificativo interno al client Passo 6: Aggiunta di un Item nel Gruppo Dim mygroup As OPCGroup Dim itms As OPCItems Dim Itm As OPCItem Dim ItemCount As Integer Set mygroup = ConnectedServerGroup.GetOPCGroup(List2.List(List2.ListIndex)) Set OneOPCItem = mygroup.OPCItems.AddItem(Text1.Text, mygroup.ClientHandle) Dim ItemName As String Set itms = mygroup.OPCItems ItemCount = itms.Count 'List3.Clear ListView2.ListItems.Clear For i = 1 To ItemCount Set Itm = itms.Item(i) ListView2.ListItems.Add , mygroup.Name + Str(i), Itm.ItemID 'List3.AddItem (Itm.ItemID) ListView2.View = lvwReport Next i Command3.Enabled = True 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 OPC Item Legge un Item dal Server, o dalla cache o dal device Legge l’ultimo valore letto dal server Vengono letti: Value, Qualità, TimeStamp Gli attributi che sono restituiti sono tra loro sincroni Passo 7: Lettura Proprietà Items ItemID (Sola lettura) ID(unico ) dell’item Value (Sola lettura) Restituisce l’ultimo valore dell’item letto dal server. CanonicalDataType (Sola lettura) Restituisce il tipo di dato. Quality (Sola lettura) Restituisce l’ultima Quality letta dal server. TimeStamp (Sola lettura) Restituisce l’ultimo TimeStamp letta dal server. Passo 8: Scrittura Proprietà Items Selezionando un item è possibile modificarne il valore facendo di OPCClient uno strumento utile anche per il controllo oltre che per l’analisi di un processo industriale. Passo 8: Scrittura Proprietà Items Write (Value As Variant) Metodo dell’Oggetto OPC Item Scrivere il valore Value nel server Nota Bene: il valore viene scritto nel Device Passo 8: Scrittura Proprietà Items Dim s As Integer Dim Grp As OPCGroup Dim i As Integer Dim itms As OPCItems Dim Itm As OPCItem Dim ItemCount As Integer Dim ItemName As String s = ListView1.SelectedItem.Index Set Grp = form1.ConnectedServerGroup.GetOPCGroup(form1.List2.List(form1.List2.ListIndex)) Set itms = Grp.OPCItems Set Itm = itms.Item(s) Itm.Write (Form3.Text1.Text) Definizione di Altre Azioni da Compiere nell’Ambito di un Gruppo E’ possibile disporre di altri metodi dell’Oggetto OPC Group: SyncRead: permette di leggere uno o più items specificati da una sorgente dei dati (Cache/Device). Per ciascun item vengono letti: valore, qualità e timestamp. SyncWrite: permette di scrivere i valori di uno o più items specificati nel Device. AsyncRefresh & DataChange: E’ possibile imporre che il Server aggiorni gli Item di un OPCGroup quando un valore o la qualità di un Item all’interno del gruppo è cambiato. L’aggiornamento non può avvenire con frequenza maggiore di quella dell’UpdateRate dell’OPC Group. Passo 9: Eliminazione Item Remove (Count As Long, ServerHandles() As Long, ByRef Errors() As Long) Metodo dell’Oggetto OPC Items Rimuove uno o più OPC Item contenuti 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 OPC Group Rimuove l’OPC Group 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 OPC Server Disconnette da un OPC Server. Dim ConnectedOPCServer As OPCServer ConnectedOPCServer.Disconnect