Logic

La pagina Logic, la sua colonna Spazio degli indirizzi, le cartelle, la barra dei comandi, il ciclo della logica e l'unico punto di scrittura dietro ogni pannello, e i tre permessi che decidono che cosa la pagina disegna.

Visualizza come Markdown

Logic è la terza voce della barra di navigazione. Si apre per qualunque ruolo che abbia Visualizzare Logic, e la sua intestazione dice « Definire variabili (valori derivati o scrivibili) e azioni (script che li scrivono), composti sullo spazio degli indirizzi. » È una pagina a elenco e dettaglio (come funzionano le pagine): una colonna intitolata Spazio degli indirizzi a sinistra, una barra dei comandi e un pannello di dettaglio a destra. Tutto ciò che modifichi qui si salva da solo mentre scrivi; non c'è alcun pulsante di salvataggio in tutta la pagina.

In quest'area

Pagina Che cosa tratta
Lo spazio degli indirizzi Le sette radici riservate, come si scrive e si ripulisce un indirizzo, la casella di filtro e i tre modi per immettere un indirizzo.
Variabili L'editor di variabile: identità e indirizzo, le nature Espressione e Memoria, la scheda Valore, Imposta valore.
Espressioni Il linguaggio delle espressioni, la superficie di lettura di un punto, le regole che il valutatore impone, l'editor di script.
Azioni L'editor di azione, che cosa può scrivere uno script, ogni messaggio di convalida, Esegui e Abilita/Disabilita.
Attivatori L'editor di attivatore e il pianificatore a intervallo.
Allarmi L'editor di allarme, la macchina a stati, la segnalazione, Tacita e Tacita tutti.
Da altre pagine Le radici System, Server, Connector e Process, il pannello del punto e l'avviso che nomina la pagina che le modifica.

La radice Assets della stessa colonna è un gruppo a sé: Risorse tratta Images, Icons, Colors, Symbols e Connection types.

La colonna Spazio degli indirizzi

La colonna elenca le radici dello spazio degli indirizzi sotto due intestazioni. Definiti qui contiene ciò che questa pagina crea e modifica: Variables, Alarms, Actions, Triggers e Assets. Da altre pagine contiene ciò che si limita a mostrare: System, Server, Connector e Process. Ogni radice della prima intestazione porta un conteggio (Variables e Alarms contano le loro definizioni, Actions e Triggers le proprie, Assets la somma delle sue cinque categorie), e la radice Alarms, ogni cartella di allarme e ogni riga di allarme portano un punto colorato con la priorità peggiore che contengono tra quelle attive o in attesa di tacitazione; il punto si spegne appena l'allarme riceve risposta.

L'albero è pigro: un ramo si carica quando lo espandi. I valori in tempo reale non vengono mai disegnati nell'albero; li mostra il pannello di dettaglio del nodo selezionato, aggiornati due volte al secondo.

Comando Che cosa fa
Filtra… Restringe l'albero alle righe il cui nome contiene il testo, senza distinguere maiuscole e minuscole. Una cartella sopravvive quando un suo discendente corrisponde, e si apre fino alle corrispondenze; la radice Assets si restringe alle categorie il cui nome corrisponde, oppure arriva intera quando corrisponde solo il proprio nome; una radice dello spazio degli indirizzi il cui nome corrisponde resta elencata e carica il suo ramo quando la espandi, mentre le sezioni Actions e Triggers elencano solo le righe che corrispondono.
Nuovo… (piede della colonna) Apre il menu di creazione: Nuova variabile, Nuova azione, Nuovo attivatore, Nuovo allarme, poi Nuova cartella con una destinazione per sezione (Variables, Alarms, Actions, Triggers). Tutto quello che si crea qui arriva alla radice della sua sezione con il primo nome libero della serie Variable1, Action1, Trigger1, Alarm1 o Folder1. Una definizione nuova non si apre (vedi Creare e copiare); una cartella nuova apre il suo campo del nome sulla sua riga nell'albero. Disegnato solo per un ruolo che ha Configurare Logic; grigio con il motivo mentre la stazione è bloccata.
Espandi tutto / Comprimi tutto Apre ogni ramo (caricando ogni livello mentre si apre) oppure richiude tutto fino alle radici.
Clic destro Su una radice di sezione, su una delle cartelle dell'operatore, su una riga di definizione o sulla riga Images, Icons, Colors o Symbols: seleziona la riga e apre il suo menu (qui sotto). Su un nodo di un'altra pagina non si apre nulla.

Il menu del clic destro porta, a seconda della riga e del ruolo: Nuova variabile / Nuova azione / Nuovo attivatore / Nuovo allarme (nella cartella o nella radice su cui si è fatto clic), Nuova cartella (grigia, con il motivo, su una cartella già al terzo livello), Esegui (righe di azione), Tacita (righe di allarme), Tacita tutti (la radice Alarms), Abilita o Disabilita (azioni, attivatori e allarmi), Sposta in (un sottomenu con la radice della sezione e ogni cartella in cui la riga si può archiviare), Copia, l'eliminazione con il nome della barra (Elimina variabile e così via), e su una cartella Rinomina cartella e Rimuovi cartella. Su Images, Icons, Colors e Symbols porta la loro barra: Importa immagine…, Nuova icona utente, Nuovo colore, Nuovo simbolo utente, Importa simbolo… e Copia l'istruzione per la chat. Un ruolo senza Configurare Logic riceve solo Esegui, Tacita e Tacita tutti quando ha Comandare Logic, e Copia l'istruzione per la chat su Symbols; una riga senza nessuno di questi non apre alcun menu.

L'area di dettaglio resta vuota finché non selezioni qualcosa: « Selezionare un nodo per esaminarlo: variabili, azioni, attivatori e allarmi aprono il proprio editor. Crearne uno con Nuovo. »

La barra dei comandi

La barra disegna i verbi del nodo selezionato. Quello che il ruolo non permette mai non viene disegnato; quello che la situazione rifiuta adesso resta disegnato, grigio, con il motivo nel suo suggerimento: « La configurazione è bloccata mentre un'unità è in esecuzione. » durante un'operazione di progettazione, « Runtime fermo » mentre la stazione gira in sola lettura.

Selezione Gruppo iniziale Gruppo finale (di pericolo)
Una delle cartelle dell'operatore Nuova variabile / azione / attivatore / allarme (il tipo che la sua sezione contiene), Nuova cartella (grigia con « Questa cartella è già al livello più profondo consentito. » al limite di profondità), Rinomina cartella Rimuovi cartella
Una variabile Copia Elimina variabile
Un'azione Esegui, Abilita o Disabilita, Copia Elimina azione
Un attivatore Abilita o Disabilita, Copia Elimina attivatore
Un allarme Tacita, Abilita o Disabilita, Copia Elimina allarme
La radice Alarms Tacita tutti
Assets, Images Importa immagine…
Assets, Icons Nuova icona utente
Assets, Colors Nuovo colore
Assets, Symbols Nuovo simbolo utente, Importa simbolo…, Copia l'istruzione per la chat
Un nodo System, Server, Connector o Process L'avviso di modifica altrove e il suo pulsante Apri

Copia duplica la definizione selezionata nella radice della sua sezione, con il nome dell'originale quando è libero e altrimenti Name (2), Name (3) e così via, e evidenzia la copia nella tabella di quella radice invece di aprirla (vedi Creare e copiare); un allarme copiato parte da Normale, un attivatore copiato parte senza pianificazione, un'azione copiata non ha alcuna esecuzione registrata. Abilita e Disabilita commutano il contrassegno Abilitato della definizione con lo stesso salvataggio automatico di qualunque campo. Ogni Elimina chiede prima (« Eliminare 'X'? … L'operazione non è reversibile. ») e riferisce « Eliminato. » nel registro delle azioni; eliminare una variabile o un allarme lascia irrisolti ogni espressione, script, condizione e collegamento di dashboard che ne nominava l'indirizzo, cosa che Convalida elenca. Un'eliminazione arriva sul genitore di ciò che ha eliminato: la schermata va alla cartella in cui la definizione era archiviata, o alla radice della sua sezione, selezionata e aperta nell'albero con la sua tabella di ciò che resta, e Rimuovi cartella arriva allo stesso modo sulla cartella sopra o sulla radice della sezione.

Creare e copiare

Creare non apre mai ciò che ha creato, e una copia è una creazione. Nuova variabile, Nuova azione, Nuovo attivatore e Nuovo allarme, sia dal Nuovo… della colonna, sia dal menu del clic destro di una radice di sezione o di una cartella, sia dalla barra di una cartella aperta, creano la riga con il primo nome libero della sua serie e portano la schermata alla pagina del suo genitore: la cartella in cui è stata archiviata, oppure la radice della sezione. L'albero seleziona quel genitore e lo espande, la tabella della pagina evidenzia la riga nuova e la porta in vista, e il registro delle azioni legge « Elemento 'Variable1' creato. Aprirlo per modificarlo. » Una creazione fatta dalla barra della cartella stessa lascia la schermata su quella cartella. Copia fa lo stesso alla radice della sua sezione, e il registro delle azioni legge « Copiato in 'Setpoint (2)'. Aprire la copia per modificarla. » Un filtro digitato nella casella Filtra… viene svuotato all'arrivo, perché il genitore e la riga nuova siano nell'albero e possano comparire selezionati e aperti.

La pagina di una radice di sezione o di una delle cartelle dell'operatore è una tabella di ciò che contiene, con Nome, Indirizzo e Valore, e in fondo a ogni riga un Apri che apre la definizione esattamente come la sua riga nell'albero (sulla radice Alarms, un ruolo con Comandare Logic vi trova anche Tacita). Una variabile il cui tipo di uscita è Icona, Immagine o Colore disegna nella sua cella Valore la sua icona, la sua immagine o il suo campione di colore, abbastanza piccolo per la riga (un colore mostra anche il suo esadecimale); la cella non scrive mai il sorgente dell'icona. Premere una riga la sceglie, e la riga scelta è la riga evidenziata: l'evidenziazione resta finché non si sceglie un'altra riga o non si porta la colonna altrove. Una cartella nuova è l'eccezione: apre il suo campo del nome sulla sua riga nell'albero.

Cartelle

Ognuna delle quattro sezioni si può organizzare in cartelle. Una cartella appartiene a una sezione e contiene solo gli elementi di quella sezione; si annida al massimo per tre livelli. Una cartella è solo organizzazione: non ha permessi, non ha valutazione e non ha stato.

Per Variables e Alarms la catena di cartelle compone l'indirizzo: una variabile in Forno si legge Variables.Forno.Setpoint, una nella sua sottocartella Zona1 si legge Variables.Forno.Zona1.Setpoint. Un livello di una sezione è un unico spazio di nomi di segmento, condiviso dalle sue cartelle e dalle sue definizioni: due cartelle possono contenere ciascuna un Setpoint, ma niente archiviato allo stesso livello può ridursi allo stesso segmento, e l'editor rifiuta un nome simile mentre lo scrivi, nominando l'indirizzo già preso. Actions e Triggers sono referenziati per identità, quindi le loro cartelle organizzano solo l'albero e i loro pannelli mostrano una riga di posizione invece di un indirizzo.

Comando Che cosa succede
Nuova cartella Crea una cartella vuota chiamata FolderN e apre il suo campo del nome sulla riga dell'albero; lasciare il campo vuoto o invariato mantiene quel nome.
Rinomina cartella Apre il campo del nome sulla riga. Ogni indirizzo sotto la cartella si sposta con lei, ogni riferimento viene riscritto e il registro delle azioni dice quanti (« Cartella rinominata; 3 riferimenti aggiornati. »).
Sposta in Archivia una cartella o una definizione sotto un'altra cartella della stessa sezione, oppure di nuovo alla radice della sezione; indirizzi e riferimenti seguono. L'elenco offre solo le destinazioni legittime: mai la cartella stessa, una sua sottocartella, un'altra sezione o un livello dove le sue sottocartelle supererebbero il limite di profondità.
Rimuovi cartella Chiede prima, dicendo che cosa si sposta: « I suoi 3 elementi passano a Variables; nulla viene eliminato. I riferimenti agli indirizzi che si spostano vengono aggiornati. » Gli elementi e le sottocartelle risalgono di un livello; la rimozione viene rifiutata quando due di loro si scontrerebbero nella destinazione.

Il ciclo della logica e la coda

Il runtime gira su due corsie, e nessuna delle due aspetta mai un'apparecchiatura. Il ciclo gira ogni 100 ms su una sola coda sequenziale: valuta ogni variabile di espressione, poi ogni condizione di allarme abilitata, in quest'ordine, così una condizione legge i valori delle variabili di questo ciclo, e porta anche le scritture in memoria e di tag che arrivano da altrove e le tacitazioni degli allarmi. La corsia delle azioni esegue gli script delle azioni, uno alla volta, nell'ordine in cui sono stati chiesti. Una scansione separata, anch'essa ogni 100 ms, mette sulla corsia delle azioni gli attivatori scaduti.

Poiché le due corsie sono indipendenti, un ciclo può capitare nel mezzo di uno script, quindi due letture dello stesso script possono vedere cicli diversi; in cambio, uno script che si ferma ad aspettare un dispositivo trattiene soltanto le azioni dietro di sé, e mai le espressioni, gli allarmi o l'operatore. Le scritture non si contendono nulla: l'ordine si mantiene dov'è il filo, una coda per dispositivo (vedere più sotto). I consumatori (dashboard, canali, questa pagina) leggono lo stato pubblicato; niente su questa pagina fa scattare una valutazione a mano.

Scrivere valori

Ogni scrittura passa da un unico punto, qualunque cosa l'abbia iniziata: l'assegnazione di uno script o Write(...), il campo Imposta il valore di una variabile di memoria, un comando di dashboard, una ricetta di Process, l'agente, un client OPC UA esterno che scrive un nodo pubblico, un client Modbus che scrive una riga della mappa del server Modbus che consente la scrittura. Quel punto rifiuta un valore che non è finito o che non si può convertire nel tipo della destinazione, rifiuta una sorgente che una ricetta in corso o un interblocco tiene bloccata (nominando chi la tiene), registra la scrittura da valore vecchio a valore nuovo sotto la sua origine (Operatore, MCP, la prova) e la applica. Ciò che quel punto decide, lo decide senza chiedere nulla a nessuno: il valore, la destinazione, il blocco e perfino se il dispositivo sia connesso. Una scrittura di tag che ammette viene poi consegnata alla coda di consegna propria di quel dispositivo dentro Connector, dove i valori dovuti a quel dispositivo partono uno alla volta, nell'ordine in cui sono arrivati, mentre gli altri dispositivi vengono serviti in parallelo; un valore che lì una scrittura più recente sullo stesso tag supera non lascia mai la coda, e il più recente è quello che l'apparecchiatura riceve. Chi ha chiesto è chi aspetta la risposta, fuori dalla logica e nel proprio codice: il componente di dashboard, la scrittura a mano della pagina del tag, lo strumento dell'agente, il client OPC UA esterno, il client Modbus, una ricetta in corso, e uno script soltanto dove ha detto WriteAndWait. La scrittura la cui origine è un'azione fa eccezione: va solo alla cattura dettagliata, mai alla console di Eventi, perché uno script che scrive a ogni ciclo produce migliaia di valori e seppellirebbe sotto di essi le notizie della stazione. Della console, di un'azione restano i fallimenti. Una scrittura di tag prende il valore ingegneristico e percorre all'indietro la catena di conversione del tag fino al valore grezzo che il dispositivo accetta. I dettagli sono su Variabili e Azioni.

Permessi e blocchi

Permesso Che cosa consente qui
Visualizzare Logic Aprire la pagina e leggere tutto quello che c'è sopra, valori in tempo reale compresi.
Configurare Logic Creare, modificare, rinominare, spostare, copiare, abilitare, disabilitare ed eliminare variabili, azioni, attivatori, allarmi e cartelle, e curare la libreria delle risorse.
Comandare Logic Scrivere un valore di memoria, eseguire un'azione, tacitare gli allarmi, qui, sulle dashboard e nella pagina Eventi.

Un ruolo che ha solo Visualizzare Logic legge tutta la pagina: gli editor sono inerti sotto una nota (« Il ruolo in uso può vedere la Logic ma non può configurarla (variabili, azioni, attivatori, allarmi e risorse). ») e non viene disegnato alcun verbo di configurazione o di comando. Un ruolo che ha Comandare ma non Configurare tiene attivi Esegui, Tacita, Tacita tutti e Imposta valore. Mentre un'unità di Process tiene la stazione, la pagina mostra l'avviso di blocco di progettazione e ogni verbo di configurazione e ogni campo degli editor è grigio; Esegui, Tacita e Imposta valore restano disponibili. Mentre il runtime è fermo, sia la configurazione sia il comando rifiutano con « Runtime fermo »; l'albero e i pannelli restano leggibili ma non portano dati in tempo reale. Il catalogo dei permessi è su Permessi.

Che cosa non fa la pagina

Non c'è Salva e non c'è Annulla: una battuta è una modifica salvata (il registro delle azioni dice « Salvato. »), e un salvataggio rifiutato ricarica il campo con quello che la stazione conserva. Le definizioni che l'agente crea, modifica o elimina con i propri strumenti, o che un'altra finestra modifica, arrivano da sole nella colonna aperta. Un editor aperto su una definizione eliminata così si chiude, e il registro delle azioni la nomina e dice che è stata eliminata fuori dall'editor. Lo storico degli allarmi, la console di Eventi e le dashboard vivono sulle loro pagine.