OPC Data Access Specification
http://www.opcfoundation.org/
OPC Data Access Specification
E' la più vecchia delle specifiche OPC
Definisce le interfacce Client/Server per l'accesso ai
dati di processo
I Data Access Servers permetto ai Data Access
Clients l'accesso a differenti sorgenti di dati: cache e
device
Device: i dati possono risiedere nelle schede di I/O
connesse al PC (dove risiede il Server) o su
periferiche (PLC) connesse al PC (tramite Fieldbus)
Esiste l'interfaccia Custom e Automation
OPC Data Access Specification
Data Access Specification definisce due concetti:
Namespace
Gerarchia di oggetti OPC
Il Namespace mantiene le informazioni su tutti i dati
disponibili sul server.
Il Namespace può essere organizzato ad albero o
essere "flat"
Ogni informazione di base mantenuta da un Server
OPC è rappresentata da un Item
Es.setpoint o valore di una variabile misurata
Nell'organizzazione ad albero gli Items sono le foglie
e i nodi servono ad organizzare le foglie
OPC Data Access Specification
Ciascun Item e ciascun Nodo è caratterizzato da
Proprietà
Ad esempio: il nome del produttore di un device
Accedere alle Proprietà permette al Client di ottenere utili
informazioni (es.informazioni sulla calibrazione di un
measuring device)
A ciascun Item può essere associato un AccessPath, che
specifica come avviene la comunicazione tra il Data
Access Server e il device (RS, 4-20mA).
E' opzionale
Esempio di interazione
tra OPC Data Access Server e Client
La connessione di un Data Access Client ad un Data
Access Server, consiste nella creazione di diversi OPC
Object all'interno del Data Access Server:
la creazione degli oggetti avviene in base al tipo di "vista"
del processo che il Client vuole ottenere
Tra gli oggetti che un OPC client può creare, esiste
una gerarchia:
OPCServer Object, root
OPCGroup Object, usati solo per organizzare i dati
OPCItem Object, relativi ai dati a cui si vuole accedere
OPC Data Access Specification
L'organizzazione degli Item da parte del Client può
essere fatta in base a diversi criteri scelti dall'utente:
aspetto logico (tutte le variabili di una sezione di processo)
aspetto relativo alla dinamica (tutte le variabili con dinamica simile)
In un OPC Server esiste una gerarchia di oggetti per
ogni OPC Data Access Client connesso
Il namespace è unico ed è mantenuto dal Server
E' possibile definire OPCItems Object che
corrispondono non ad un item, ma alle sue proprietà.
Esempio: un Data Access Client potrebbe definire un OPCGroup
object contenete un OPCItem object relativo ad un sensore di
temperatura e un OPCItem object relativo alle sue proprietà (ad
esempio intervallo di manutenzione).
OPC Data Access Specification
OPC Client
OPCServer
OPCGroup
OPCGroup
OPC
Data
Access
Server
OPCItem
OPCItem
OPCItem
OPCItem
Root
Node 1
Node 11
Item 1
Node 2
Item 3
Item 4
Item 2
Componente Server
Scambio Informativo
OPCServer and OPCGroup Objects hanno interfaccia
Automation e Custom
OPCItem Object ha solo l'interfaccia Automation
(semplificazione dell'implementazione)
Sono definite differenti modalità (sia in lettura sia in
scrittura) per lo scambio informativo tra OPC Data
Access Server e Client
Operazioni di Lettura
Operazioni di Lettura
Cache
Device
Synchronous Read
x
Asynchronous Read
Solo nelle vecchie
specifiche
x
x
Refresh
x
x
Cache/Device: i valori (read/write) sono disponibili
localmente al server (PC) o in un dispositivo esterno
L'aggiornamento della Cache è fatto solo per gli OPCItem
"attivi" e se viene specificato un "UpdateRate"
Operazioni di Lettura
Synchronous Read: il client chiama il metodo e
aspetta il valore di ritorno
i tempi di risposta dipendono dall'opzione Cache/Device
Asynchronous Read: il client chiama il metodo,
ottenendo conferma immediata. Il valore richiesto
verrà consegnato dopo.
E' più adatto per l'accesso al device
Refresh: il client chiede i valori di tutti gli OPCItems
Object di un OPCGroup Object "attivo".
Operazioni di Lettura
Le modalità di lettura precedenti vengono sempre
iniziate dal client
hanno il limite di richiedere il trasferimento dei valori
anche quando questi non cambiano
Esiste una quarta modalità di trasferimento che
permette l'aggiornamento automatico dei valori di
items ad un client.
Il Server legge dei valori (configurati dal client) in
accordo ad una cerca frequenza (Update Rate,
configurato dal client) e li passa al client SOLO se vi
è stata una modifica (rispetto ad un range configurato
dal client)
Operazioni di Scrittura
Operazioni di
Scrittura
Synchronous Write
Asynchronous Write
Refresh
Cache
Solo nella versione 3.0
Solo nella versione 3.0
Solo nella versione 3.0
Device
x
x
Solo nella versione 3.0
Formato dello Scambio Informativo
E' stato definito anche il formato dello scambio
informativo:
Actual Data. Vengono definiti dei tipi di dato tipici di
DCOM, chiamati VARIANT (il mapping con i tipi legati
all'applicazione viene fatto nel client e nel server)
Time Stamp. Nel caso di device che lo supportano,
altrimenti viene inserito dal Server. E' codificato su 8
bytes e permette di rappresentare il tempo in incrementi di
100ns. Si usa l'UTC di Windows (Universal Time
Coordinated)
Status Information. E' un campo di 2 bytes, anche se
attualmente si usa solo il byte meno significativo
Quality (2 bit): Good, Bad (es.no link), Uncertain (es.no sense)
Status (4 bit): descrizione dello stato (es. "Not Connected")
Limit (2 bit): informazioni diagnostiche (es.sensor failure)
Esempio di interazione
tra OPC Data Access Server e Client
Nella configurazione di un Data Access Server avviene
sostanzialmente la definizione del Namespace.
Vengono, inoltre, specificati gli identificatori degli items e
le relative proprietà e AccessPaths.
La prima attività eseguita dal Data Access Client è
quella di accedere all'oggetto OPCServer, per fare un
browsing del namespace al fine di avere informazioni
sulla struttura e ottenere gli identificatori degli items
per poter istanziare gli OPCItems Objects
Esempio di interazione
tra OPC Data Access Server e Client
Il Browsing dell'oggetto OPCServer permette al
client di esplorare l'intera struttura del namespace
Per ciascun nodo può conoscere:
Solo i nodi al di sotto
Solo le foglie al di sotto
Tutto quello presente al di sotto, in modo "flat"
E' possibile che il Client applichi dei filtri SOLO
sulle foglie:
Solo le foglie che hanno un particolare VARIANT Data Type (es.
unsigned Integer 2-bytes)
Solo le foglie con una specifica tipologia di accesso (es.solo lettura)
Solo le foglie contenente una stringa (es. Te*)
Esempio di interazione
tra OPC Data Access Server e Client
Il Data Access Client può procedere alla creazione di Oggetti
OPCGroup e OPCItem (in ordine)
La creazione degli OPCGroup è dovuta solo a motivi di
organizzazione dei dati (OPCItems)
Per ciascuna richiesta di creazione di un Oggetto OPCGroup,
il Data Access Client specifica:
Symbolic Name: permette di esplicitare la semantica dell'oggetto. Se non
specificato, viene assegnato dal Server.
ActiveState: permette al client di specificare se vuole attivare la procedura di
ricezione automatica delle variabili (in corrispondenza di ciascun
cambiamento) e se vuole l'aggiornamento della Cache.
RequestedUpdateRate: determina la frequenza di lettura automatica delle
variabili da parte del server (solo se ActiveState = TRUE). Questa frequenza
serve sia per lo scambio automatico sia per l'update della Cache.
PercentDeadband: determina il criterio di invio delle variabili da parte del
Server (range di cambiamaneto). Serve per lo scambio automatico.
Esempio di interazione
tra OPC Data Access Server e Client
Per la creazione di un oggetto OPCItem, il Data Access Client
specifica:
Fully Qualified ItemId. Identifica in modo univoco l'item all'interno
del namespace.
ActiveState. E' possibile attivare/disattivare il meccanismo di
aggiornamento automatico dei valori per ciascun OPCItem object e il
meccanismo di aggiornamento della Cache.
RequestedDataType. Il client può richiedere una conversione dei dati
dal formato originario a quello specificato (e vicerversa).
Il Server potrebbe non supportare questa possibilità (ciò viene
notificato al client).
AccessPath (optional)
ClientHandle (vedi lucido successivo)
Esempio di interazione
tra OPC Data Access Server e Client
ClientHandle. Il Fully Qualified ItemId non è sufficiente ad
individuare in modo univoco un OPCItem Object.
Diversi Client potrebbero creare diversi OPCItem Object in un Server
con lo stesso FullyQualified ItemId.
Allo scopo di individuare in modo univoco ciascun OPCItem object,
viene utilizzato un meccanismo a coppia ClientHandle-ServerHandle.
Il Data Access Client specifica un ClientHandle e il Server crea un
ServerHandle per il Client. In questo modo a ciascun OPCItem object
corrisponde una sola coppia ClientHandle-ServerHandle.
Esempio di interazione
tra OPC Data Access Server e Client
In risposta a ciascuna richiesta di creazione di
OPCItem object, il Data Access Server invia:
CanonicalDataType. Permette di specificare se il Server è
in grado di supportare la conversione di tipo richiesta dal
client.
ServerHandle. Il server alloca diversi ServerHandle per i
diversi client. Ha dimensione di 32 bit (viene gestito come
puntatore)
Esempio di interazione
tra OPC Data Access Server e Client
Dopo la creazione dell'albero di oggetti, il client può
iniziare le letture/scritture o ricevere le informazioni
sui cambi di valore
Scelta del tipo di lettura/scrittura: Synchronous
Reading/Writing.
E' possibile leggere sia dalla Cache sia dal Device
Nel caso di Lettura dalla Cache, il parametro
RequestedUpdateRate determina la frequenza con cui il Server
aggiorna i dati in cache.
Sia l'OPCGroup sia l'OPCItem devono essere "attivi"
Nel caso di lettura da Device il dato è letto direttamente dal
device quando richiesto
Le scritture sono riferite solo al device
Esempio di interazione
tra OPC Data Access Server e Client
Scelta del tipo di lettura/scrittura: Asynchronous
Reading/Writing.
La differenza con il metodo sincrono è che ogni richiesta
fatta dal client viene notificata subito
Il risultato della richiesta viene inviato con un
meccanismo di callback (ossia il server invoca un metodo
all'interfaccia del client)
Sia con la tipologia Sincrona sia con la Asincrona:
Il client può richiedere valori da uno o più OPCItem
objects o scrivere valori su uno o più di essi
E' necessario specificare esplicitamente gli OPCItem
objects attraverso gli Handles
Esempio di interazione
tra OPC Data Access Server e Client
Scelta del tipo di lettura/scrittura: Refresh.
Le letture (sincrone o asincrone) richiedono grossi
trasferimenti di dati quando è necessario leggere molti
OPCItems di un OPCGroup
E' necessario specificare l'Handle di ogni OPCItem
La modalità Refresh si usa quando il client ha necessità di
LEGGERE (SOLO LEGGERE) tutti gli OPCItem objects
di un OPCGroup object "attivo"
E' possibile selezionare come sorgente Cache/Device
In tal caso non bisogna trasferire alcun Handle
La modalità Refresh sulla scrittura non viene supportata
nelle versioni 1.x e 2.0, ma solo nella 3.0
Esempio di interazione
tra OPC Data Access Server e Client
Scelta del tipo di lettura/scrittura: Lettura
Automantica dei Dati su Modifica di Valore.
Vi è la possibilità di richiedere che il Server invii al Client
solo i valori degli OPCItem objects che hanno subito una
modifica dall'ultimo valore
Il Data Access Client deve aver creato un OPCGroup
specificando tutti i tre parametri: PercentDeadband,
RequestedUpdateRate, ActiveState
Il Server leggerà tutti i valori di tali OPCItem objects,
valutando opportune condizioni in base alle quali il server
potrà inviare o meno i valori al client in modo automatico
Esempio di interazione
tra OPC Data Access Server e Client
Durante la definizione del namespace nel Server, viene
definita per ciascuna variabile il EU (Engineering Unit) type
e l'EU information (ampiezza del range di variazione).
Se l'EU type è "analog" il Server si comporta nel seguente
modo:
Calcola il valore assoluto dell'EU information
Moltiplica il risultato per il valore della PercentDeadband relativo ad
un OPCGroup object
Il server legge i valori degli OPCItem object per ciascun OPCGroup
secondo il RequestedUpdateRate
Per ogni lettura viene calcolata la differenza in valore assoluto tra
l'ultimo valore letto e quello attuale
Se tale differenza è più grande del valore calcolato come detto prima,
allora il valore appena letto dell'OPCItem object viene inviato al client
Esempio di interazione
tra OPC Data Access Server e Client
90
80
0.1*(70-40)=3
0.1*(70-40)=3
70
50-45=5>3
|41-45|=4>3
60
50
40
30
1000 ms
EU Type Analog,
RequestedUpdateRate= 1000ms
EU-Information {40,70}
PercentDeadBand=0.1
Esempio di interazione
tra OPC Data Access Server e Client
Il Client riceve tutti i valori degli OPCItem objects che hanno
subito una variazione compatibile con il criterio prima illustrato
Il client riesce a distinguere i singoli valori di ciascun OPCItem
object grazie alla coppia ServerHandle-ClientHandle
E' importante sottolineare che i valori RequestedUpdateRate e
PercentageDeadBand sono gli stessi per tutti gli oggetti OPCItem
di un OPCGroup.
Da notare inoltre il diverso comportamento degli oggetti
OPCItem in un OPCGroup a seconda del EU Information
Il tipo di scambio è applicabile solo a Items con EU Type
"Analog" di dati semplici. Non applicabile a:
Tutti i dati con l'altro valore previsto per EU Type "Enumerated"
Tipi di dati strutturati
Interfaccia Automation
L'interfaccia Automation permette di "mascherare" i
metodi di accesso al Data Access Server
Viene fornito un "Automation Wrapper" che, in
ambiente Windows, è realizzato da una dll, che
permette l'accesso al Data Access Server
Ogni Client crea un'istanza del Wrapper dll
Interfaccia Automation
OPCServer
OPCGroups
(collection)
OPCBrowser
OPCGroup
OPCItems
(collection)
OPCItem
Differrenze con l'Interfaccia
Custom:
Vi è un oggetto che rende
possibile la funzione di
browsing. Se il server non
supporta tale funzione,
l'oggetto non esiste
Vi sono oggetti di tipo
"collezione"
Interfaccia Automation
Eventi
L'interfaccia Automation supporta il meccanismo di notifica degli
eventi fornito in Visual Basic 5.0.
Il Server Automation controlla l'occorrenza di un evento in
corrispondenza ad una chiamata del client di tipo: AsyncRefresh,
AsyncRead, AsyncWrite e Data Changes (in accordo alle specifiche
utente)
In generale, per ciascun oggetto vengono gestiti eventi.
Ad esempio per l'oggetto OPCServer esiste l'evento "ServerShutDown".
L'implementazione dell'Interfaccia Automation si basa sull’assunzione
che il Client riesca a gestire questi eventi.
Interfaccia Automation
OPCServer Object
L'oggetto offre tutti i metodi dell'interfaccia Custom dell'oggetto
OPCServer, tranne:
i metodi per fare il browsing del namespace, e per aggiungere e rimuovere
gli oggetti OPCGroup
Tali metodi sono disponibili rispettivamente negli oggetti OPCBrowser e
OPCGroups (collection) dell'Interfaccia Automation
Sono disponibili (tra gli altri) i seguenti metodi:
GetOPCServers(NodeName), ritorna l'ID dei server disponibili (registrati)
Connect(Id,NodeName), permette la connessione con il Data Access
Server che implementa la Custom Interface
Disconnect
CreateBrowser, crea l'oggetto Browser (solo se supportato dal Server)
Esempi di Metodi dell'Oggetto OPCServer
GetOPCServers(Optional Node As Variant) As Variant
Node è opzionale. Esempi di valori ammessi: “server.com”,
“www.vendor.com”, “180.151.19.75”.
Esempio di programma che memorizza la lista degli OPC
Server registrati un una macchina, in una standard VB listbox.
Dim AllOPCServers As Variant
AllOPCServers = AnOPCServer.GetOPCServers
For i = LBound(AllOPCServers) To UBound(AllOPCServers)
listbox.AddItem AllOPCServers(i)
Next i
Interfaccia Automation
Eventi dell'OPCServer Object
ServerShutDown. E' generato dal Server prima di disattivarsi, in modo
che il client rilasci le sue risorse.
Dim WithEvents AnOPCServer As OPCServer
Private Sub AnOPCServer_ServerShutDown(ByRef aServerReason As String)
‘ write your client code here
End Sub
Interfaccia Automation
OPCBrowser Object
Sono disponibili metodi per permettere al client la "navigazione" nel
namespace del Server
ShowBranches,
MoveUp
ShowLeafs,
MoveToRoot,
MoveDown,
MoveTo,
E’ istanziato dal metodo CreateBrowser (OPCServer), se il Server
supporta il browsing
OPCGroups Object (Collection)
Non esistono oggetti corrispondenti nell'interfaccia custom
Tale oggetto è usato per aggiungere, gestire e rimuovere oggetti
OPCGroup
Permette di impostare il default per gli OPCGroup object creati dal
client (le proprietà possono essere cambiate per ogni OPCGroup
object)
Esiste un evento (GlobalDataChange) gestito da OPCGroups object,
che avvisa il client di una modifica del valore o dello stato in un
OPCGroup object
Interfaccia Automation
OPC Groups Collection
Attributi
DefaultGroupIsActive
Metodi
Add
DefaultGroupUpdateRate
Remove
DefaultGroupDeadband
RemoveAll
GlobalDataChange. Il Server notifica al client:
Eventi
L'id dell’oggetto OPCGroup relativo alla modifica
Il numero di items, i relativi ids, valori, quality e timestamps
Un parametro per specificare che l'evento è generato in corrispondenza
ad una precedente:
AsyncRefresh
Richiesta di aggiornamento automatico dei dati (su cambiamento)
Interfaccia Automation
OPCGroup Object
Permette l'accesso alle proprietà del Gruppo
Offre tutti i metodi disponibili nell'interfaccia Custom per l'OPCGroup
Object
Vengono usati nomi differenti per lo scambio dati:
SyncRead e SyncWrite per lo scambio Sincrono
AsyncRead, AsyncWrite, AsyncRefresh e AsyncCancel per lo scambio Asincrono
Interfaccia Automation
OPC Group
Attributi
IsActive. Questo attributo controlla lo stato attivo del gruppo. Un
gruppo che è attivo acquisisce dati in modo automatico
IsSubscribed. Questo attributo controlla le notifiche asincrone al
gruppo.
DeadBand. Una deadband è espressa come percentuale della scala
completa (i valori ammessi vanno da 0 a 100 o da 0 a 1)
UpdateRate. La massima velocità alla quale gli eventi DataChange
(Refresh e Aggiornamento automatico dati) possono essere generati.
La velocità è espressa in millisecondi.
Gli attributi assumo valore di default dal OPC Groups Collection
Interfaccia Automation
OPCGroup Object: SyncRead
Questa funzione legge il valore, la qualità e il timestamp per uno o più
item in un gruppo. La lettura può avvenire dalla cache o dal device.
I parametri del metodo sono:
Source: OPC_DS_CACHE o OPC_DS_DEVICE (dalla cache solo se
l’item è attivo)
NumItems: Il numero di items che devono essere letti
ServerHandles: Array degli identificatori degli items del server che
devono essere letti.
Values: Array di valori.
Qualities: array di interi che rappresentano le Qualities degli items letti.
TimeStamps: array di TimeStamps. Se il dispositivo non può fornire un
timestamp il server provvederà a fornirne uno.
Errors: Array di Long che indica se ci sono stati errori leggendo il valore,
il timestamp e qualità degli item.
La funzione viene eseguita fino al completamento prima di ritornare i
valori.
Interfaccia Automation
OPCGroup Object: SyncWrite
Scrive in uno o più items di un gruppo. I valori sono scritti
SOLO nel DEVICE.
Parametri
NumItems: Numero di item che devono essere scritti
ServerHandles: Array degli identificatori degli items del server
che devono essere scritti.
Values: Array di valori.
Errors: Array di Long che indicano il successo delle singole
operazioni di scrittura degli items.
Interfaccia Automation
OPCGroup Object: AsyncRead
Legge uno o più items di un gruppo. Il risultato (il o i valori degli
item) è restituito attraverso l’evento AsyncReadComplete associato
all’oggetto OPCGroup.
L’evento AsyncReadComplete associato all’oggetto OPCGroup verrà
svegliato dal Server non appena sarà pronto il risultato dell’operazione
AsyncRead
Parametri:
NumItems: Il numero di item che devono essere letti.
ServerHandles: Array degli identificatori degli items del server
che devono essere letti.
Errors: Array di Long che indicano il successo delle singole
operazioni di lettura degli items.
TransactionID: La transactionID specificata dal client.
CancelID: Una transaction ID generata dal server. E’ fornita per
permettere al client di cancellare la ‘transaction’.
Interfaccia Automation
OPCGroup Object: AsyncWrite
Scrive uno o più items di un gruppo. Il risultato (la conferma) è
restituito attraverso l’evento AsyncWriteComplete associato
all’oggetto OPCGroup
L’evento AsyncWriteComplete associato all’oggetto OPCGroup verrà
svegliato dall’Automation Server non appena sarà pronto il risultato
dell’operazione AsyncWrite.
Parametri:
NumItems: Il numero di item che devono essere scritti.
ServerHandles: Array degli identificatori degli items del server che
devono essere scritti.
Values: Array di valori
TransactionID: La transactionID specificata dal client.
CancelID: Una transaction ID generata dal server. E’ fornita per
permettere al client di cancellare la ‘transaction’.
Interfaccia Automation
OPCGroup Object: AsyncRefresh
Legge tutti gli Items “attivi” di un OPCGroup “attivo”
La lettura avviene con frequenza non superiore a
Updaterate
Il Refresh deve essere annullato da AsyncCancel
I risultati sono restituiti attraverso l’evento DataChange
associato all’oggetto OPCGroup e l'evento
GlobalDataChange associato all'oggetto OPCGroups.
OPCGroup Object: AsyncCancel
Richiede che il Server cancelli una transizione in sospeso.
Un evento AsyncCancelComplete indicherà se la
cancellazione è avvenuta o meno.
Interfaccia Automation
Eventi dell’OPCGroup Object
Esistono Eventi che informano il client del completamento di
una precedente chiamata asincrona o circa la modifica di un
valore
DataChange: L’evento DataChange si verifica quando un valore o la
qualità di un item all’interno del gruppo è cambiato in corrispondenza:
in
corrispondenza di una richiesta di AsyncRefresh
della richiesta di aggiornamento automatico dei valori
AsyncReadComplete: Questo evento avviene quando un AsyncRead è
completato
AsynsWriteComplete: Questo evento avviene quando un AsyncWrite
è completato.
AsyncCancelComplete: Questo evento viene svegliato non appena un
AsyncCancel è completato.
Interfaccia Automation
OPC Group
Attributi
IsActive
IsSubscribed
UpdateRate
OPCItems
SyncRead
SyncWrite
AsyncRead
(AsyncReadComplete)
AsyncWrite
AsyncRefresh
AsyncCancel
(AsyncCancelComplete)
Metodi
(AsyncWriteComplete)
Eventi
DeadBand
DataChange
(AsyncRefresh e
Aggiornamento dati)
AsyncCancelComplete
(AsyncCancel)
(DataChange e
GlobalDataChange)
AsyncReadComplete
(AsyncRead)
AsyncWriteComplete
(AsyncWrite)
Interfaccia Automation
OPCItems Object Collection
Permette l'aggiunta, la gestione e la rimozione degli oggetti OPCItems
Alcuni Metodi: AddItem, AddItems, Remove, Validate, SetActive
OPCItem Object
Sono disponibili i metodi read e write per leggere e
scrivere un item (sono entrambe blocking)
Esempio di Programmazione con
l'Interfaccia Automation
' General startup initialization
Private Sub Form_Load()
'Create a new OPC Server object
Set ConnectedOPCServer = New OPCServer
ConnectedOPCServer.Connect "Kepware.KepserverEx.V4"
' Add the group
Set ConnectedServerGroups = ConnectedOPCServer.OPCGroups
Set ConnectedGroup = ConnectedServerGroups.Add("Test1")
' Set the update rate for the group
ConnectedGroup.UpdateRate = 500
' Subscribe the group so that you will be able to get the data change callbacks from the server
ConnectedGroup.IsSubscribed = True
' Identify only one item to be added in the group
ItemCount = 1
OPCItemIDs(1) = "Channel_1.Device_1.R0"
ClientHandles(1) = 1
' Add an Item Collection where to add the previous item
Set OPCItemCollection = ConnectedGroup.OPCItems
OPCItemCollection.DefaultIsActive = True
OPCItemCollection.AddItems ItemCount, OPCItemIDs, ClientHandles, ItemServerHandles,
ItemServerErrors
End Sub
OPC e XML
Il Working Group "OPC and XML" iniziò il lavoro di definizione
dello standard nel Marzo del 2000 (conclusione 2002)
Obiettivi erano:
Integrazione di OPC con Microsoft BizTalk
Integrazione di OPC in applicazioni Web utilizzando XML
Le tecnologie utilizzate sono: XML, Web Services, SOAP, BizTalk
Le specifiche definiscono un servizio OPC XML come Web
Service (uso di WSDL)
OPC e XML
Le specifiche OPC XML Data Access si differenziano da quelle
basate su tecnologia COM, per motivi legati alla tecnologia
XML/HTTP
Interazione client/server “short-term”
Protocollo stateless HTTP
Difficoltà nel realizzare Web Services meccanismi che permettano
di creare oggetti per ciacun client secondo la filosofia COM
Non vengono definiti i gruppi
Se il client vuole un aggiornamento automatico dei dati, dovrà
sempre effettuare la richiesta di lettura (se niente è cambiato
nessun valore è tornato al client)
OPC e XML
Methods
Browse
GetProperties
GetStatus
Description
Queries the hierarchical namespace of the server for the
names of all the available items (tags).
Returns extra information associated with one or more
item.
Returns info about the server, version information, current
mode, overall health etc.
Returns the value quality and timestamp for one or more
items.
Indicates a list of items for which the client wants
Subscribe
continuous updates.
Removes a list of items indicated in a previous call to
SubscriptionCancel
Subscribe
SubscriptionPolledRefresh Returns all items indicated in a subscription that have
changed since the previous call to
SubscriptionPolledRefresh.
Read
Write
Writes new values to one or more items.
OPC Compliance Test
I produttori di software OPC devono superare dei
test:
Errori dovuti a differenti ed incorrette interpretazioni della specifica
OPC e/o a implementazioni incorrette ed incomplete
Attualmente solo per i Server, visto che un errore in un Client viene
scoperto dalla corrispondente risposta errata da parte del Server
Il superamento di un test permette di acquisire una
certificazione
OPC Foundation rende disponibili:
Un framework test, test cases e l'OPC Compliance Client
Il Compliance Test Client è un software che realizza:
Stress, Logical e Interface tests