La catena di conversione
La conversione tipizzata che ogni tag condivide, dalla lettura grezza al valore ingegneristico, le due politiche di lettura non valida, le azioni per i valori fuori intervallo, le trasformazioni booleane e di stringa, e come una scrittura percorre le fasi all'indietro.
Ogni tag condivide una sola catena di conversione tipizzata che trasforma la lettura grezza nel valore ingegneristico. La catena vive nel tag stesso: la scheda Conversione della pagina Tag e la griglia del dispositivo mostrano le stesse fasi, e il valore che arriva in Logic, sulle dashboard, nel registratore e sul nodo OPC UA pubblico è quello che esce dall'ultima fase.
Prima il grezzo
La catena parte dal valore grezzo convertito al tipo di dato del tag, non dall'oggetto proprio del driver: un driver che consegna 3,7 a un tag Int32 legge 4 in cima alla scheda, e ogni fase prosegue da quel 4. Una lettura che il tipo dichiarato non può proprio contenere (testo dove è dichiarato un numero) è una lettura vuota, mai uno zero di comodo. All'altro capo il valore ingegneristico viene riconvertito allo stesso tipo, quindi un tag Float si arrotonda a quello che un float può rappresentare.
Le fasi
Per i tipi numerici la catena è una successione di fasi, ciascuna con la propria casella di spunta; una fase disabilitata lascia passare il suo ingresso, e la scheda mostra il valore corrente alla fine di ogni fase, così puoi seguire una lettura viva attraverso i calcoli:
| Fase | Valore predefinito | Che cosa fa |
|---|---|---|
| Scalatura | attiva | scalato = grezzo × Angolare + Lineare. Angolare vale 1 all'inizio, Lineare 0. Un Angolare pari a 0 viene rifiutato dove viene scritto (« Un fattore di scalatura pari a 0 azzererebbe ogni lettura. Immettere il fattore per cui moltiplicare (1 mantiene il valore). »), perché azzererebbe ogni lettura e l'anteprima e la catena salvata non devono mai contraddirsi. |
| Taratura | disattiva | Una seconda coppia lineare applicata al valore scalato: tarato = scalato × Angolare + Lineare. Tenuta separata dalla Scalatura perché una correzione prima e dopo non disturbi i calcoli di campo, e governata da un permesso proprio; vedi Taratura. Un Angolare pari a 0 viene rifiutato allo stesso modo. |
| Lettura non valida | sempre mostrata | Due politiche per le letture che non portano un numero utilizzabile (qui sotto). Non è una casella di spunta: il suo « spento » è già una delle risposte. |
| Limiti | disattiva | Giudica il valore rispetto a Min (predefinito 0) e Max (predefinito 100) e applica l'azione scelta per i valori fuori intervallo (qui sotto). Gli estremi vengono normalizzati, quindi un Min sopra il Max non fallisce mai: il minore dei due è il pavimento. |
| Decimali | attiva | Arrotonda a Decimali cifre, predefinito 2, accettato da 0 a 15. |
Entrambe le fasi lineari portano una procedura guidata Due punti che calcola la coppia a partire da due punti di riferimento; è descritta passo per passo su Taratura.
Il dispositivo ha risposto senza un numero
Una termocoppia interrotta, un canale senza sensore: la lettura è arrivata, l'apparecchiatura parla, ma la misura è NaN. Solo tag numerici, e la qualità resta buona in entrambi i casi:
| Politica | Effetto |
|---|---|
| Lascialo passare (predefinita) | Il NaN viaggia oltre intatto e salta del tutto la fase Limiti, qualunque azione quella fase porti: i limiti giudicano numeri, e qui non ce n'è. L'infinito non è NaN e satura comunque sul campo. |
| Sostituisci con un valore | Il numero dichiarato prende il posto da questa fase in poi ed entra in Limiti, Decimali e nella conversione finale come qualunque lettura. |
Il dispositivo non ha risposto
Un timeout, un cavo tranciato, un'apparecchiatura spenta, un'eccezione del driver. Ogni tipo, benché a un tag che legge una marca temporale, un identificatore o un blocco di byte vengano offerte solo le prime due politiche: un sostituto dichiarato è un numero, e nessuno di quei tre si può ricavare da uno.
| Politica | Effetto |
|---|---|
| Mostra l'errore (predefinita) | Il tag si legge vuoto e la sua qualità diventa cattiva, così il fallimento affiora ovunque nello stesso momento. |
| Mantieni l'ultimo valore buono | L'ultima lettura arrivata resta in vista, senza scadenza, finché l'apparecchiatura non risponde di nuovo. Le marche temporali continuano a puntare a quella lettura, perché è quello il momento in cui il numero è stato misurato. Prima che arrivi la prima lettura non viene tenuto nulla; allora il tag si legge vuoto. |
| Sostituisci con un valore | Il numero dichiarato viene presentato così com'è dichiarato: non c'è alcuna lettura da far passare per le fasi, quindi non viene scalato, tarato o arrotondato, solo convertito al tipo del tag. Offerta su ogni tipo in cui la conversione porta un numero, cioè ogni tipo tranne DateTime, Guid e ByteString. |
Un sostituto non è mai silenzioso: la scheda Valore in tempo reale stampa il perché (« Ultimo valore buono, tenuto mentre il dispositivo non risponde. »), il punto in tempo reale diventa ambra, e il server OPC UA integrato pubblica il valore con uno stato di sostituzione invece che semplicemente buono. Resta pubblicato per tutto il tempo che la politica richiede: un dispositivo che continua a non rispondere non fa alternare a un client esterno il sostituto e un errore di lettura, quindi quello che quel client legge è quello che il pannello mostra. La lettura stessa si riprende il punto nel momento in cui il dispositivo risponde, e lo stesso fa spegnere il sostituto. Scegliere un sostituto è scegliere la disponibilità, quindi allarmi ed espressioni continuano a giudicare il punto come se avesse un valore; quello che costa viene ripagato alla luce del sole, perché il diario registra comunque la lettura fallita e lo stato di salute riferisce comunque il dispositivo offline. Un sostituto risponde a « che cosa dovrebbe mostrare questo punto », mai a « l'apparecchiatura c'è ». Una sostituzione dichiarata fuori dai limiti abilitati riceve un avviso dove viene scritta: « Fuori dai limiti [0, 100]: il valore che sostituisce una lettura fallita. »
Valori fuori intervallo
Le azioni dei Limiti per un valore fuori da Min e Max:
| Azione | Il valore diventa | Qualità |
|---|---|---|
| Nessun valore | Un vuoto (nessun valore). | buona |
| Limitazione (predefinita) | L'estremo più vicino. | buona |
| Errore e nessun valore | Un vuoto. | cattiva (guasto sui limiti) |
| Errore e limitazione | L'estremo più vicino. | cattiva (guasto sui limiti) |
| NaN | NaN. | buona. Offerta solo per i tag Float e Double, il cui tipo la può rappresentare; permette a un canale di Process di classificare il valore non valido. Un'azione NaN lasciata su un tag intero da una scrittura di agente o da un backup ripristinato degrada al vuoto di Nessun valore. |
Un guasto sui limiti confluisce nella qualità effettiva del tag, così il punto in tempo reale, le espressioni delle proprietà e gli allarmi vedono tutti il valore fuori limite come cattivo senza altri collegamenti, e la scheda Conversione stampa « Il valore 130 è fuori dai limiti [0, 100]. » Resta comunque una condizione di processo e non un problema di connessione, e lo stato di salute del dispositivo non conta il dispositivo offline per questo.
Booleani, stringhe e altri tipi
I tipi non numerici hanno le loro trasformazioni nella stessa scheda Conversione:
- Boolean: Inverti riferisce la negazione logica del valore grezzo.
- String: Inizio della sottostringa (a partire da 0) e Lunghezza ritagliano una finestra dalla stringa grezza; una lunghezza vuota arriva fino alla fine, e gli estremi fuori intervallo vengono riportati dentro invece di far fallire la lettura.
- Ogni altro tipo (DateTime, Guid, ByteString) passa invariato e non mostra alcuna scheda Conversione.
Mostra l'errore e Mantieni l'ultimo valore buono valgono per ogni tipo; Sostituisci con un valore è offerto ovunque un numero dichiarato possa diventare una lettura, quindi un tag DateTime, Guid o ByteString non lo elenca. La politica su NaN vale solo per i tag numerici.
Le scritture percorrono la catena all'indietro
Il campo di scrittura della scheda Valore in tempo reale prende un valore ingegneristico e percorre all'indietro, in ordine, le fasi abilitate e invertibili: riporta tra Min e Max quando Limiti è abilitata (una scrittura viene sempre riportata dentro, mai abbandonata, qualunque sia l'azione sui limiti), toglie la taratura ((valore − Lineare) ÷ Angolare), toglie la scalatura allo stesso modo, poi converte al tipo del tag. L'arrotondamento perde informazione e non viene percorso all'indietro. Un ingresso booleano riapplica Inverti. Una sottostringa è solo visualizzazione, quindi una scrittura di stringa invia il valore intero così com'è; DateTime, Guid e ByteString passano invariati. Un valore scritto da un client OPC UA esterno sul nodo pubblico è già grezzo e non attraversa nulla di tutto questo.