Azioni
L'editor di azione: identità e posizione, il blocco di script, che cosa uno script può leggere e scrivere, ogni messaggio di convalida, il verbo Esegui e la sua registrazione, Abilita e Disabilita, Copia ed Elimina, e i limiti di un'esecuzione.
Un'azione è un blocco di istruzioni JavaScript che legge lo spazio degli indirizzi e scrive variabili di memoria e tag. Le azioni sono la via di scrittura di Logic: girano su richiesta (Esegui), su un attivatore, oppure da un Pulsante di dashboard collegato a esse. Seleziona un'azione sotto la sezione Azioni della colonna di Logic (oppure creane una con Nuovo… > Nuova azione) per aprirne l'editor; leggere richiede Visualizzare Logic, modificare Configurare Logic, eseguire Comandare Logic.
L'intestazione mostra il segno dell'azione, il nome, la riga « Uno script che esegui su richiesta, o che un attivatore esegue per te, scrivendo variabili e tag. » e una pillola Disabilitata mentre l'azione è spenta. La colonna del modulo contiene IDENTITÀ e SCRIPT; la barra contiene ULTIMA ESECUZIONE.
Identità
| Campo | Che cos'è | Valori e valore predefinito | Effetto |
|---|---|---|---|
| Nome | Il nome visualizzato e l'etichetta sotto cui viene registrata un'esecuzione. | Testo libero; un'azione nuova si chiama ActionN; un nome vuoto si salva come Action. |
Si salva da solo a ogni battuta. Le azioni sono referenziate per identità, quindi rinominare non riscrive nulla e non rompe nulla. |
| Riga di posizione | Dove l'azione è archiviata, a parole: Actions / Startup / Walk setpoint. |
Sola lettura. | Un'azione non ha indirizzo; la riga è un posto, mai qualcosa da scrivere in un'espressione. Si cambia con Sposta in nell'albero. |
| Descrizione (facoltativa) | Testo libero. | Vuota all'inizio. | Nessuno. |
Script
La scheda SCRIPT è l'editor di script con il suggerimento « Istruzioni JavaScript (let, if, for, funzioni). Scrivere le variabili di memoria per assegnazione (Variables.Setpoint = 21.5;) e i tag con Connector.Driver.Device.Tag.Write(value). Le letture non passano dal controllo di qualità: verificare .State() e proteggere i vuoti con ?? prima dell'aritmetica. » Lo script si salva da solo a ogni battuta e viene convalidato ogni mezzo secondo; il messaggio compare sotto il suggerimento. La convalida non esegue mai lo script.
Uno script è normale JavaScript in modalità strict (variabili locali, if, cicli, funzioni, Math, Date, JSON) sullo stesso spazio degli indirizzi e sulla stessa superficie di lettura delle espressioni, con due differenze. Le letture non passano dal controllo di qualità: un vuoto si legge come null, quindi verifica .State() e proteggi l'aritmetica con ??; trattare una lettura cattiva è proprio ciò a cui servono le azioni. E uno script può leggere le variabili di espressione (il loro valore pubblicato); solo un'espressione non può referenziarle.
Che cosa può scrivere un'azione
Esattamente due costrutti modificano l'impianto, ed entrambi passano dall'unico punto di scrittura registrato:
| Scrittura | Forma | Destinazione |
|---|---|---|
| Assegnazione a memoria | Variables.Setpoint = 21.5; oppure Variables.Forno.Setpoint = 21.5; |
Una variabile di memoria, livelli di cartella compresi. Il valore viene convertito al tipo di uscita della variabile e marcato per la ritenzione quando la variabile è ritentiva. |
| Scrittura di tag | Connector.Simulated.Pump.Cmd.Write(true); |
Un tag vivo. Il valore è un valore ingegneristico: percorre all'indietro la catena di conversione del tag fino al valore grezzo che il dispositivo accetta. |
Una scrittura è immediata: quello che era stato applicato prima di un errore resta applicato, e il diario mostra ogni scrittura da vecchio a nuovo sotto l'origine Azione. Una scrittura fallita solleva un errore e interrompe quell'esecuzione, con il motivo nel suo esito:
- « Scrittura su 'X' rifiutata: il valore non è finito. » (NaN o infinito)
- « 'Tag' non è materializzato nel connector. » (un dispositivo disabilitato, o un tag che il server integrato non porta)
- « Non è stato possibile convertire 'value' per 'Tag'. »
- « 'X' è protetta in scrittura da '
<chi la tiene>'. » (una ricetta in corso o un interblocco tengono la sorgente) - « Scrittura su 'Tag' non riuscita. Il server è in esecuzione? »
- « Variabile 'X' non trovata. » e « 'Variables.X' è una variabile di espressione: viene calcolata, mai scritta. »
Che cosa rifiuta la convalida
| Messaggio | Causa |
|---|---|
| Serve uno script. | L'editor è vuoto. |
| Errore di script: … | Il testo non si analizza. |
| Gli indirizzi devono essere statici: a 'Root' si accede con un segmento calcolato. | Variables[name] o qualunque segmento non letterale. |
| Indirizzo incompleto '…'. | Un riferimento troppo corto per nominare un punto. |
| 'X' non è stato trovato. | Una lettura, o una destinazione di assegnazione, che non si risolve in nulla. |
| Assegnare alla variabile stessa: Variables.Name = valore. | Il lato sinistro di = nomina un membro, oppure scende più a fondo di quanto l'indirizzo di una variabile consenta. |
| 'X' è una variabile di espressione: viene calcolata, mai scritta. | Assegnare a una variabile di espressione. |
| I punti 'Connector' sono di sola lettura. Scrivere i tag con Connector.Driver.Device.Tag.Write(value). | Assegnare a una radice diversa da Variables (Process ha il suo messaggio). |
| I punti di Process sono di sola lettura nelle Azioni; i comandi di prova e le scritture di preparazione non sono supportati dagli script. | Assegnare a un punto di Process, o chiamarci Write. |
| I comandi di prova di Process non si possono chiamare dalle Azioni; i punti di comando espongono valori di prontezza di sola lettura. | Chiamare Process.<Model>.<Unit>.Commands.Start() o qualunque altro punto di comando; un punto Commands legge soltanto se il comando potrebbe essere eseguito adesso. |
| Gli operatori ++ e -- non sono supportati sui punti. Usare Variables.Name = Variables.Name.ValueToReal() + 1. | Variables.N++. |
| Write(value) è la scrittura di un tag: Connector.Driver.Device.Tag.Write(value). | Write chiamato su qualcosa che non è l'indirizzo di un tag. |
Le variabili locali di JavaScript (let x = 1; x = x + 1;) non sono toccate da queste regole.
Esegui
Esegui è il verbo iniziale della barra sopra un'azione aperta; è disegnato solo per un ruolo che ha Comandare Logic ed è grigio con « Runtime fermo » mentre la stazione è in sola lettura (il blocco di progettazione non lo rende grigio: eseguire è comandare, non configurare). Quando il ruolo ha anche Configurare Logic, la bozza nell'editor viene salvata per prima e l'esecuzione riguarda la definizione salvata; senza quel permesso, l'esecuzione riguarda la definizione durevole (i campi sono di sola lettura, quindi le due non differiscono mai).
Ogni esecuzione gira sulla sola coda della logica con un motore di script nuovo, così nessuno stato trapela tra un'esecuzione e l'altra e un'esecuzione non si intreccia mai con un ciclo, con un'altra azione o con una scrittura dell'operatore. Un'esecuzione viene interrotta oltre 500 ms (« Lo script è stato interrotto: ha superato il limite di tempo di 500 ms (ciclo infinito?). »), 100.000 istruzioni o 4 MB di memoria, ciascuno con un messaggio che nomina il limite. Un'azione disabilitata fallisce senza essere eseguita (« L'azione è disabilitata. »); un runtime fermo risponde « Il runtime della logica non è in esecuzione. » Il registro delle azioni riferisce « Esecuzione riuscita in 12 ms. » oppure « Esecuzione non riuscita: <motivo> ». Solo il fallimento arriva alla console di Eventi, sotto il nome dell'azione insieme a chi l'ha invocata: Manuale per il verbo, il nome dell'attivatore per un'esecuzione pianificata. Viene registrato come avviso la prima volta, riassunto mentre continua a fallire con la stessa causa, e annotato ancora una volta quando rientra, e quella riga di rientro è l'unica voce che un'esecuzione riuscita scriva mai lì. Un'esecuzione che semplicemente riesce, e ogni valore che scrive, va solo alla cattura dettagliata: uno script che scrive a ogni ciclo produce migliaia di valori, e una console piena di quelli è una console in cui nessuno riesce a leggere le notizie della stazione.
La barra ULTIMA ESECUZIONE mostra quando l'azione è stata eseguita l'ultima volta (oppure « Mai eseguita. »), « Durata: N ms », l'ultimo errore in una nota di attenzione, e il promemoria « Le esecuzioni girano sulla sola coda della logica. Solo un'esecuzione fallita arriva alla console di Eventi; un'esecuzione riuscita, e ogni valore che scrive, restano nella cattura dettagliata. Gli attivatori invocano le azioni secondo la loro pianificazione. » La barra appartiene all'azione viva: un salvataggio automatico non la svuota mai; un riavvio del runtime sì.
Comandi
| Comando | Che cosa fa | Grigio quando | Non disegnato quando |
|---|---|---|---|
| Esegui | Salva la bozza (con Configurare Logic) e mette in coda un'esecuzione. | Il runtime è fermo. | Il ruolo non ha Comandare Logic. |
| Abilita / Disabilita | Commuta Abilitata; un'azione disabilitata rifiuta Esegui e lascia inattivo ogni attivatore collegato a lei. | La stazione è bloccata o in sola lettura. | Il ruolo non ha Configurare Logic. |
| Copia | Duplica l'azione nella radice Azioni con un nome libero e apre la copia, che non ha alcuna esecuzione registrata né alcun attivatore collegato. | La stazione è bloccata o in sola lettura. | Il ruolo non ha Configurare Logic. |
| Elimina azione | Chiede « Eliminare 'X'? Questo rimuove l'azione. L'operazione non è reversibile. » Un attivatore collegato a lei resta senza collegamento, non viene eliminato. | La stazione è bloccata o in sola lettura. | Il ruolo non ha Configurare Logic. |
Il pannello della radice Azioni elenca ogni azione con il suo stato nella colonna Valore: « Abilitata · ultima esecuzione <quando> », con « · errore » quando l'ultima esecuzione è fallita, oppure « Disabilitata ».
Che cosa non fanno le azioni
Non inviano i comandi di prova di Process, non preparano una procedura e non aggiungono un commento a una prova (quei punti sono valori di prontezza e di preparazione, in sola lettura); non tacitano gli allarmi; non girano in parallelo; non conservano stato tra un'esecuzione e l'altra e non condividono funzioni; e non scattano per un cambio di valore o per una condizione, ma solo con Esegui, con l'intervallo di un attivatore o con un pulsante di dashboard.