Sei sulla pagina 1di 50

OPC Data Access Specification

DCOM-based

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 (nome oggetti OPCxxxxx)
 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
 Ad esempio setpoint o valore di una variabile misurata
OPC Data Access Specification
 Nell'organizzazione ad albero del Namespace, gli Items
sono le foglie e i nodi servono ad organizzare le foglie
 Ciascun Item e ciascun Nodo caratterizzato da
Propriet
 Ad esempio: il nome del produttore di un device, parametri
tecnici, etc.
 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
OPC Data Access Specification
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:
Tra gli OPC Object esiste una gerarchia. Ad esempio:
OPCServer Object, root
OPCGroup Object, usati per organizzare gli OPCItem Object
OPCItem Object, che in genere corrisponde ad un Item
E' possibile definire OPCItem Objects che corrispondono
alle Propriet di un Item.
Esempio: un OPCItem object relativo alla propriet di un sensore
di temperatura definita come intervallo di manutenzione.
OPC Data Access Specification
 L'organizzazione degli OPCItem da parte del Client
pu essere fatta in base a diversi criteri scelti
dall'utente. Ad esempio:
 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 OPC Object


per ogni OPC Data Access Client connesso
 Il Namespace unico ed mantenuto dal Server
OPC Data Access Specification
DCOM-based
Custom Interface
OPC Data Access Specification
Custom Interface
Oggetto istanziato nel lato Client:
OPCClient Object

Oggetti istanziati nel lato Server, per ogni Client


connesso:
OPCServer Object
OPCGroup Object
OPCItem Object
OPC Data Access Specification
Custom Interface

OPC Client

OPCServer
OPCGroup OPCGroup
OPC
OPCItem OPCItem OPCItem OPCItem
Data
Access
Root
Server
Node 1 Node 2

Node 11
Item 3 Item 4
Item 1 Item 2

Componente Server
OPC e DCOM

 OPCClient, OPCServer e OPCGroup Objects sono


degli oggetti DCOM e hanno interfaccia Automation
e Custom

 OPCItem Object sono oggetti DCOM con la sola


interfaccia Automation
 semplificazione dell'implementazione, in quanto molto
spesso la lettura degli OPCItem Objects viene realizzata
tramite gli OPCGroup Objects
OPC e DCOM
IOPCDataCallBack OPC
Client
IOPCServerShutdown
IOPCCommon
IOPCServer
IConnectionPointContainer OPC
IOPCItemProperties Server
[IOPCServerPublicGroups]
[IOPCBrowseServerAddressSpace]
[IPersistFile]
IOPCItem Mgt
IOPCGroupStateMgt
[IOPCPublicGroupStateMgt]
IOPCSyncIO OPC
IOPCASyncIO2 Group
IConnectionPointerContainer
IEnumOPCItemAttributes
IOPCASyncIO
IDataObject
Scambio Informativo
 Sono definite differenti modalit dello scambio
informativo tra OPC Data Access Server e Client:
 Lettura (device, cache) di uno o pi OPCItems
 Scrittura (device, cache) di uno o pi OPCItems
Scrittura su cache solo nellultima versione DA (3.0)
 Refresh di un OPCGroups
 Aggiornamento Automatico dei Dati

 E' stato definito anche il formato dello scambio


informativo:
 Actual Data (Valore)
 Time Stamp (Informazione Temporale)
 Status Information (Qualit)
Scambio Informativo
 Actual Data. Vengono utilizzati i 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. E' codificato su 8 bytes e permette di rappresentare il
tempo in incrementi di 100ns.
 Si usa l'UTC di Windows (Universal Time Coordinated)
 Viene fornito dai device se lo supportano, altrimenti viene inserito dal
Server.
 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" se Quality
Bad)
 Limit (2 bit): informazioni diagnostiche (es.sensor failure)
Attivit di un OPC Data Access Client

1. La prima attivit eseguita dal Data Access Client


quella di creare l'oggetto OPCServer
2. Il Cliente crea uno o pi OPCGroups
3. Il Client accede all'oggetto OPCServer, per fare un
browsing del namespace al fine di avere informazioni
sulla struttura e ottenere gli identificatori degli items
4. Creazione di OPCItems
 scelta di eventuale modifica di codifica dati
5. Modifica propriet Items e/o Groups (es.ActiveState)
6. Operazioni di Lettura/Scrittura
7. Disconnessione
 pu avvenire anche da parte del Server
Browsing
 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*)
Creazione di OPCGroups
 La creazione degli OPCGroup dovuta solo a motivi di
organizzazione degli OPCItems
 Per ciascuna richiesta di creazione di un Oggetto OPCGroup, il
Data Access Client specifica:
 Symbolic Name: Nome del Gruppo. 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 Aggiornamento Automatico dei valori degli item 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 l'Aggiornamento Automatico sia per
l'Aggiornamento della Cache.
 PercentDeadband: determina il criterio di invio delle variabili da parte
del Server (range di cambiamaneto). Serve per l'Aggiornamento
Automatico dei valori degli item.
Creazione di OPCItems

 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)
Creazione di OPCItems

 ClientHandle.
Problema: diversi Client potrebbero creare OPCItem
Objects in un Server, con riferimento allo stesso
FullyQualified ItemId.
Allo scopo di creare una corrispondenza uno-a-uno tra
OPCItem object e Item, 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.
Creazione di OPCItems

 In risposta a ciascuna richiesta di creazione di


OPCItem object, il Data Access Server invia:
 Risultato di conferma sulla capacit del Server 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)
Operazioni di Lettura/Scrittura

 E' possibile leggere sia dalla Cache sia dal Device


 La lettura dalla Cache abilitata solo per OPCItems
"attivi" appartenenti all'OPCGroup "attivo"
 Il parametro RequestedUpdateRate determina la frequenza
con cui il Server aggiorna i dati in cache
 Nel caso di lettura da Device il dato letto
direttamente dal device quando richiesto
 L'operazione di scrittura riferita solo al Device (ad
eccezione della versione 3.0)
Operazioni di Lettura/Scrittura
 Lettura/Scrittura Synchronous di un Singolo OPCItem
 Con la lettura/scrittura sincrona il Client deve attendere la
conferma ad ogni richiesta
 Lettura/Scrittura Asynchronous di un Singolo OPCItem
 Con la lettura/scrittura asincrona ogni richiesta fatta dal
client viene notificata subito (non l'esito!)
 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:
 E' possibile (tranne qualche caso) selezionare la Cache o il
Device
 E' necessario specificare esplicitamente gli OPCItem
objects attraverso gli Handles
Operazioni di Lettura/Scrittura
 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/Scrivere tutti gli OPCItem objects "attivi" 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
Operazioni di Lettura
Operazioni di Lettura Cache Device
Synchronous Read SI SI
Asynchronous Read Solo nelle vecchie
specifiche SI
Refresh SI SI

 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 (CallBack)
 E' pi adatto per l'accesso al device
 Refresh: il client chiede i valori di tutti gli OPCItems Object "attivi" di un
OPCGroup Object "attivo"
Operazioni di Scrittura
Operazioni di Cache Device
Scrittura
Solo nella versione 3.0
Synchronous Write SI
Solo nella versione 3.0
Asynchronous Write SI
Solo nella versione 3.0 Solo nella versione 3.0
Refresh

 Synchronous Write: il client chiama il metodo e aspetta l'esito


dell'operazione di scrittura
 Asynchronous Write: il client chiama il metodo, ottenendo
conferma immediata. L'esito verr consegnato dopo (CallBack)
Aggiornamento Automatico dei Dati
 Vi la possibilit di richiedere che il Server invii al
Client solo i valori degli OPCItem objects che hanno
subito una "certa" 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
Aggiornamento Automatico dei Dati
Durante la definizione del Namespace nel Server,
viene definita per ciascuna variabile (item):
EU (Engineering Unit) Type. Uno dei possibili
valori "Analog"
EU Information (ampiezza del range di
variazione)

L'aggiornamento automatico dei dati ha luogo solo


se l'EU type "Analog"
Aggiornamento Automatico dei Dati
Il Server si comporta nel seguente modo:
Calcola il valore dell'ampiezza del range fornito da EU
Information
Moltiplica il risultato per il valore della PercentDeadband
(0-1) relativo ad un OPCGroup object
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 (mantenuto in Cache) e
quello attuale
Se tale differenza pi grande del valore calcolato come
detto prima, allora il valore appena letto dell'OPCItem
object viene memorizzato in Cache ed inviato al client
(CallBack)
Aggiornamento Automatico dei Dati

90 Aggiornamento Cache Aggiornamento Cache


80 0.1*(70-40)=3 0.1*(70-40)=3
70 50-45=5>3 |41-50|=9>3
60
50
40
30

1000 ms
EU Type=Analog RequestedUpdateRate= 1000ms
EU Information = {40,70} PercentDeadBand=0.1
OPC Data Access Specification
DCOM-based
Automation Interface

http://www.opcfoundation.org/
OPC Data Access Specification
Automation Interface
 L'interfaccia OPC Automation permette di "mascherare" i metodi di
accesso al Data Access Server
 Viene fornito un "OPC 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
 Fornisce al programmatore Visual Basic delle interfacce pi semplici
(senza l'uso di puntatori) per accedere alle stesse funzionalit ottenibili
dalla interfaccia Custom.

Automation Client (VB)


Automation Interface

OPC Automation Wrapper

Custom Interface (COM / DCOM)

OPC Custom Interface Server


Interfaccia OPC Automation
Differenze con l'Interfaccia
Custom:
OPCServer OPCBrowser rende possibile
la funzione di browsing
OPCGroups Se il server non supporta tale
OPCBrowser
(collection) funzione, l'oggetto non esiste
Vi sono oggetti di tipo
"collezione"
OPCGroup
OPCGroups Collection
OPCItems Creazione, rimozione,
(collection) impostazioni propriet,
gestione callback
OPCItemsCollection
OPCItem
Creazione, rimozione,
impostazioni propriet
Eventi dell'Interfaccia OPC Automation

 L'interfaccia Automation supporta il meccanismo di notifica


degli eventi fornito in Visual Basic.
 In generale, per ciascun oggetto OPC vengono gestiti eventi
 Ad esempio per l'oggetto OPCServer esiste l'evento
"ServerShutDown".
 Una classe di eventi sono relativi a chiamate del client di tipo
Asincrono:
 AsyncRefresh, AsyncRead, AsyncWrite e Data Changes
 L'implementazione dell'Interfaccia Automation si basa
sullassunzione che il Client riesca a gestire questi eventi.
OPCServerObject

 L'oggetto offre tutti i metodi dell'interfaccia Custom dell'oggetto


OPCServer
 L'oggetto NON offre i metodi per fare il browsing del
namespace, e per aggiungere e rimuovere gli oggetti OPCGroup
 Browsing offerto dall'oggetto OPCBrowser
 Aggiunta/Rimozione di Gruppi offerto da OPCGroupsCollection
 Esempi di metodi disponibili:
 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 (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 nella macchina locale, 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
Eventi dell'OPCServerObject

 ServerShutDown. E' generato dal Server prima di


disattivarsi, in modo che il client rilasci le sue risorse.
 Esempio di programma lato client che gestisce lo
spegnimento del Server DA
Dim WithEvents AnOPCServer As OPCServer

Private Sub AnOPCServer_ServerShutDown(ByRef aServerReason As String)

write your client code here


End Sub
OPCBrowserObject

 Sono disponibili metodi per permettere al client la


"navigazione" nel namespace del Server
ShowBranches
ShowLeafs
MoveToRoot
MoveDown
MoveTo
MoveUp
 E istanziato dal metodo CreateBrowser
(OPCServerObject), se il Server supporta il browsing
OPCGroupsCollectionObject

 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 di un item del
gruppo (CallBack)
OPCGroupsCollectionObject

Attributi DefaultGroupIsActive DefaultGroupUpdateRate DefaultGroupDeadband

Metodi Add Remove RemoveAll

GlobalDataChange. Il Server notifica al client:


L'Id delloggetto OPCGroup relativo alla modifica
Eventi Il numero di Items, i relativi Ids, valori, quality e timestamps
Un parametro per specificare che l'evento generato in corrispondenza
ad una precedente:
Refresh
Richiesta di aggiornamento automatico dei dati (su cambiamento)
OPCGroupObject

 Permette l'accesso al Gruppo (Lettura/Scrittura)


 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 (CallBack)
OPCGroupObject
 Attributi
 IsActive. Questo attributo controlla lo stato attivo del
gruppo.
 IsSubscribed. Questo attributo abilita le notifiche asincrone
(CallBack)
Non Esiste nell'Interfaccia Custom
Ad esempio il Refresh non pu essere realizzato se questo attributo
non settato, in quanto Refresh viene implementato come servizio
asincrono
 DeadBand. I valori ammessi vanno da 0 a 100 o da 0 a 1
 UpdateRate. La velocit espressa in millisecondi.
 Gli attributi assumo valore di default dal OPC Groups
Collection
OPCGroupObject
 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
litem 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.
OPCGroupObject

 SyncWrite
 Scrive in uno o pi items di un gruppo.
 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.
OPCGroupObject
 AsyncRead
 Legge uno o pi items di un gruppo. Il risultato (il o i valori degli
item) restituito attraverso levento AsyncReadComplete associato
alloggetto OPCGroup.
 Levento AsyncReadComplete associato alloggetto OPCGroup
verr svegliato dal Server non appena sar pronto il risultato
delloperazione 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.
OPCGroupObject
 AsyncWrite
 Scrive uno o pi items di un gruppo. Il risultato (la conferma)
restituito attraverso levento AsyncWriteComplete associato
alloggetto OPCGroup
 Levento AsyncWriteComplete associato alloggetto OPCGroup
verr svegliato dallAutomation Server non appena sar pronto il
risultato delloperazione 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.
OPCGroupObject
 AsyncRefresh
 Legge tutti gli Items attivi di un OPCGroup attivo
(attributo IsSubscribed attivato)
 La lettura avviene con frequenza non superiore a UpdateRate
 Il Refresh deve essere annullato da AsyncCancel
 I risultati sono restituiti attraverso levento DataChange
associato alloggetto OPCGroup e l'evento
GlobalDataChange associato all'oggetto
OPCGroupsCollection.

 AsyncCancel
 Richiede che il Server cancelli una transizione in sospeso.
Un evento AsyncCancelComplete indicher se la
cancellazione avvenuta o meno.
OPCGroupObject

IsActive IsSubscribed DeadBand


Attributi
UpdateRate

SyncRead SyncWrite AsyncRead


(AsyncReadComplete)
Metodi AsyncRefresh
AsyncWrite AsyncCancel
(AsyncWriteComplete) (DataChange e
GlobalDataChange)
(AsyncCancelComplete)

DataChange AsyncReadComplete AsyncWriteComplete


(AsyncRefresh e (AsyncRead) (AsyncWrite)
Eventi Aggiornamento dati)

AsyncCancelComplete
(AsyncCancel)
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 entrambi blocking)
Esempio di Programmazione di un OPC
Client con l'Interfaccia OPC Automation
Private Sub Form_Load()
Set ConnectedOPCServer = New OPCServer 'Create a new OPC Server object
ConnectedOPCServer.Connect "Kepware.KepserverEx.V4"
Set ConnectedServerGroups = ConnectedOPCServer.OPCGroups 'Add a Groups
Collection
Set ConnectedGroup = ConnectedServerGroups.Add("Test1") ' Add the group
ConnectedGroup.UpdateRate = 500 ' Set the update rate for the group
ConnectedGroup.IsSubscribed = True ' Activate callbacks from the server
ItemCount = 1 ' Identify only one item to be added in the group
OPCItemIDs(1) = "Channel_1.Device_1.R0"
ClientHandles(1) = 1
Set OPCItemCollection = ConnectedGroup.OPCItems ' Add an Item Collection
OPCItemCollection.DefaultIsActive = True
OPCItemCollection.AddItems ItemCount, OPCItemIDs, ClientHandles,
ItemServerHandles, ItemServerErrors ' Add an Item
End Sub
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