AVEVA PI

Riferimento del driver AVEVA PI - la PI Web API in HTTPS, autenticazione con token o Basic, indirizzamento AF e per punto PI, letture e scritture.

Visualizza come Markdown

Il driver AVEVA PI legge e scrive un AVEVA PI System attraverso la PI Web API, l'interfaccia REST del sistema (JSON su HTTP). È un driver in modo client, cioè è Ganter Lab a collegarsi al servizio PI Web API, e il trasporto è HTTPS per impostazione predefinita: il driver mette le credenziali del dispositivo su ogni richiesta che fa, quindi una connessione non cifrata le pubblicherebbe. L'HTTP in chiaro esiste solo come scelta esplicita per il singolo dispositivo.

Un tag indirizza un attributo AF, un punto PI oppure uno stream grezzo della PI Web API, e ne legge il valore istantaneo, cioè quello corrente.

Campi di connessione

Campo Che cos'è Formato Predefinito
Indirizzo host Il nome host o l'indirizzo IP del server PI Web API. Nome host o IP vuoto
Porta TCP La porta TCP del servizio. Zero significa il valore predefinito del driver, 443. numero di porta 0 (= 443)
Percorso della risorsa Il percorso di radice del servizio aggiunto dopo l'autorità. Vuoto, oppure una / sola, significa la radice standard della PI Web API, piwebapi. Qualunque altro percorso è il percorso che il driver apre, esattamente come è scritto: un servizio pubblicato dietro un proxy inverso su /pi si raggiunge a /pi, e non gli viene aggiunto nulla. Scrivi tutto il percorso di cui avrebbe bisogno un browser, piwebapi compreso dove il servizio risponde ancora lì. testo di percorso vuoto (= piwebapi)
Invia in HTTP semplice Fa scendere questo solo dispositivo da HTTPS all'HTTP in chiaro. Disattivato significa HTTPS, il trasporto normale della PI Web API. Il pannello ne dichiara la conseguenza: in HTTP semplice il token di autorizzazione o la password vengono inviati non cifrati a ogni richiesta. Usalo solo per una PI Web API che non risponde su nessun altro trasporto. attivo / disattivo disattivo
Nome utente L'account per l'autenticazione HTTP Basic, usato solo quando non è impostato alcun token di autorizzazione. Vuoto (e senza token) lascia le richieste anonime. Testo libero vuoto
Password del dispositivo La password abbinata al nome utente. Protetta a riposo per utente di Windows; un segreto inserito sotto un altro account Windows si presenta come illeggibile e va reinserito. Testo libero vuoto
Token di autorizzazione Un token inviato come Authorization: Bearer … a ogni richiesta. Quando è impostato vince sulla coppia nome utente e password. Protetto a riposo allo stesso modo. Testo del token vuoto

Alla connessione il driver verifica la radice del servizio (HEAD, ripiegando su GET). In HTTPS il certificato TLS del servizio deve superare la normale convalida dei certificati di Windows. L'intervallo di interrogazione è configurabile: il valore predefinito del dispositivo (1000 ms) vale per ogni tag che non dichiari il proprio.

Indirizzamento dei tag

Il campo Percorso PI del tag accetta quattro forme:

Forma Ha l'aspetto di Come viene risolta
Percorso di attributo AF \\AFServer\Database\Element\SubElement\|Attribute Cercato una volta con attributes?path=… per ottenere il WebId dell'attributo
Percorso di punto PI \\PIServer\TagName Cercato una volta con points?path=… per ottenere il WebId del punto
WebId La stringa opaca del WebId stessa Usata direttamente (riconosciuta come un gettone lungo senza \, \|/)
URL relativo streams/{webId}/value, streamsets/…, attributes?…, points?… Inviato tale e quale sotto la radice del servizio

Le ricerche di percorso vengono tenute in cache per 12 ore, così l'interrogazione a regime non le ripete. Per le prime tre forme la lettura esegue una GET sul valore istantaneo dello stream (streams/{webId}/value) ed estrae il campo JSON Value; un URL relativo viene letto alla lettera, quindi puntalo a un endpoint che risponda con un documento di valore. Il risultato viene convertito nel tipo di dato dichiarato dal tag.

Insieme al campione si legge il verdetto proprio dell'archivio. Un valore che l'archivio marca come non buono, come dubbio oppure come sostituito (un numero inserito a mano invece che misurato) non è una lettura dell'apparecchiatura, quindi non viene pubblicato come tale: il tag passa a cattiva qualità e il motivo dice quale dei tre casi fosse. Lo stesso succede quando la risposta non porta alcun valore, oppure risponde con uno stato digitale invece che con un valore singolo, e in quel caso il nome dello stato fa parte del motivo. Al loro posto non viene inventato nulla, e nessun documento arriva come se fosse la misura.

Esempi:

  • \\PI-SRV01\FURNACE.TEMP: un classico punto PI.
  • \\AF-SRV\Plant\Line 3\Furnace|Temperature: un attributo AF.
  • streams/F1DPmNQx2kqBk0qbIVMoxAVBJw/value: un URL di stream grezzo, utile quando hai già il WebId da un altro strumento.

Scritture

I tag con una modalità di accesso scrivibile scrivono attraverso l'endpoint di stream della PI Web API: una POST di {"Timestamp":"*","Value":…} (la marca temporale * significa adesso) su streams/{webId}/value. La scrittura ha bisogno di un WebId risolvibile, quindi funziona per i tag indirizzati per percorso AF, per percorso di punto PI, per WebId e anche per un URL relativo streams/…: il WebId viene letto da quell'URL e la scrittura arriva sull'endpoint di valore di quello stream, qualunque sotto-risorsa di lettura (per esempio recorded) l'indirizzo portasse oltre. Tre forme relative vengono rifiutate, perché ciascuna risponde con un documento invece che con il valore di un solo stream e una scrittura indirizzerebbe la risorsa sbagliata: streamsets/…, attributes?… e points?…. Il rifiuto nomina le forme accettate. Che la scrittura arrivi dipende poi anche dal fatto che la PI Web API sia configurata per le scritture e che l'account abbia accesso in scrittura al punto.

Il valore che scrivi nella casella di scrittura del tag è il valore ingegneristico; le fasi di conversione del tag vengono percorse all'indietro prima che il valore grezzo vada sul bus, come è descritto nella pagina Connector.

Tipi di dato supportati

Boolean, Int32, Int64, Float, Double e String. I punti PI numerici sono di solito Float o Double. Uno stato digitale non è un valore singolo, quindi un punto che risponde con uno si legge come cattiva qualità nominando lo stato, qualunque tipo il tag dichiari.

Comandi

Oltre a leggere e scrivere punti, a un endpoint della PI Web API si può chiedere di fare qualcosa, e quali richieste accetti è affare del servizio stesso. Dichiarane ciascuno sul dispositivo, nella scheda Comandi della sua pagina: un nome, l'URL relativo a cui viene inviato con una POST sotto la radice del servizio e, facoltativamente, il nome dell'unico valore che accetta, che viaggia come corpo della richiesta. Il verbo Invia della riga lo manda e riferisce quello che il servizio ha risposto; il comando diventa anche un metodo sul dispositivo nello spazio degli indirizzi OPC UA proprio di questa stazione.

Rilevamento

Il pulsante Rileva legge un solo servizio. Metti il suo indirizzo e l'elemento AF da cui parte il percorso nella scheda Ambito della scansione della pagina del driver, separati da un #: https://pi-host/piwebapi#\\AF-SRV\Plant\Line 3. La scansione risolve quell'elemento, percorre ogni elemento sotto di lui e offre il dispositivo con un punto per ogni attributo, ciascuno indirizzato dal proprio stream. La scansione legge il servizio senza credenziali, perché gira prima che esista il dispositivo che le porterebbe, quindi una PI Web API che autentica ogni richiesta non risponde nulla e il dispositivo va aggiunto a mano: aggiungi il servizio per host e aggiungi i tag con i loro percorsi AF o PI, come descrive il flusso per aggiungere un dispositivo nella pagina Connector.