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
Scarica

Esempio di OPC Client Basato su DCOM in VisualBasic