Eventi
La registrazione della stazione su ciò che è accaduto: cronologie durature di allarmi, occorrenze e interblocchi accanto alla console di diagnostica in tempo reale, con ricerca, filtri ed esportazione CSV/JSON.
Eventi è la pagina che risponde alla domanda "che cosa è accaduto?". Sta nel gruppo di fondo della barra di navigazione (Convalida, Eventi, Agente, Impostazioni, Account) e porta quattro schede: Allarmi, Occorrenze e Interblocchi sono cronologie durature lette dal diario degli eventi della stazione, e Console è il flusso di diagnostica in tempo reale in cui scrive ogni sottosistema. L'intestazione della pagina dice "Storici persistenti di allarmi, occorrenze e interblocchi, e la console di diagnostica in tempo reale."
Vedere la pagina richiede il permesso Visualizzare gli eventi (area Sistema): sia la voce della
barra sia l'indirizzo /events vi sono subordinati. Ogni ruolo di fabbrica lo possiede per
impostazione predefinita, "Non connesso" compreso, e Admin lo possiede sempre; un ruolo creato vuoto
nasce senza di esso, e un amministratore può toglierlo a qualsiasi ruolo diverso da Admin. Esportare
da una scheda qualsiasi richiede in più Esportare/importare gli storici.
Le schede e i loro indirizzi
| Scheda | Che cosa elenca | Indirizzo | Pagina |
|---|---|---|---|
| Allarmi | Gli allarmi in attesa adesso, sulla cronologia duratura delle transizioni di stato degli allarmi | /events?view=alarms |
Allarmi |
| Occorrenze | Ogni fronte di occorrenza osservato durante una prova o dal sorvegliante Always fuori prova | /events?view=occurrences |
Occorrenze |
| Interblocchi | Ogni transizione della ritenuta di fermo dell'interblocco di un'unità | /events?view=interlocks |
Interblocchi |
| Console | Le ultime 500 voci di diagnostica del programma in esecuzione | /events?view=console |
Console |
La pagina si apre su Allarmi. Un clic su una scheda riscrive l'indirizzo (lo sostituisce, così la
striscia delle schede non riempie mai la pila di ritorno del browser), e un collegamento che porta
view= atterra su quella scheda; un valore che la pagina non conosce la lascia aprire su Allarmi. È
così che l'indicatore di allarme della barra di stato (la campana con "N attivi (M non tacitati)",
disegnata solo mentre un allarme è attivo o in attesa di una tacitazione) raggiunge l'elenco degli
allarmi: naviga a /events?view=alarms, la schermata dove ciò che sta contando è insieme letto e
risposto, mai la pagina Logic dove gli allarmi si configurano.
Console resta montata dietro le altre schede, così il suo inseguimento della coda e la sua posizione di scorrimento sopravvivono a un cambio; ciascuna delle tre cronologie conserva la propria ricerca, il proprio filtro, le proprie righe e la propria selezione mentre ci si sposta fra loro.
Chi può vedere ed esportare
| Permesso | Che cosa apre in questa pagina | Senza di esso |
|---|---|---|
| Visualizzare gli eventi | La voce della barra, l'indirizzo e ogni scheda | La voce non viene disegnata e l'indirizzo viene rifiutato |
| Esportare/importare gli storici | Esporta su ogni scheda (CSV, JSON) e Crea pacchetto di supporto su Console | Il pulsante Esporta non viene disegnato; una pressione che raggiunga comunque il gestore risponde "Per esportare gli eventi serve il permesso Esportare/importare gli storici." nel registro delle azioni |
| Comandare Logic | Tacita e Tacita tutti nella scheda Allarmi | I verbi non vengono disegnati; le righe restano leggibili |
| Modificare le impostazioni | Avvia la cattura e Arresta la cattura su Console | Il pulsante non viene disegnato; lo stato della cattura è comunque annunciato ai lettori di schermo |
I permessi sono decisi per connessione, così un circuito di browser connesso come un altro utente vede il proprio insieme di pulsanti, e un accesso, un'uscita o una modifica di ruolo li ridisegna subito. Il catalogo è su Permessi.
Come si comportano le tre cronologie
Le schede Allarmi, Occorrenze e Interblocchi condividono una sola condotta, così cambiare scheda non cambia mai le regole:
| Comportamento | Dettaglio |
|---|---|
| Finestra | Ogni scheda elenca 500 eventi per pagina, quelli che corrispondono alla sua ricerca, al suo filtro e al periodo scelto, dal più recente (una parità sull'istante è sciolta dall'ordine di inserimento). Sotto l'elenco, Più recenti e Meno recenti percorrono il resto del diario una pagina per volta, e la fascia compare solo finché c'è un'altra pagina da raggiungere. La pagina più recente segue il diario in tempo reale; una pagina più indietro resta ferma, così un evento che arriva adesso non spinge in giù quello che stai leggendo. |
| Periodo | Due caselle di data, Dal e Al, ciascuna un estremo del periodo letto. Una casella vuota non è alcun limite, quindi con entrambe vuote la scheda legge tutto il diario, e il giorno scelto come limite finale rientra per intero, fino al suo ultimo istante. La croce accanto azzera la coppia e riporta la scheda alla prima pagina. |
| Ricerca | Una casella di testo il cui testo segnaposto nomina le colonne su cui confronta (nome, messaggio, sorgente, modello, unità, procedura, autore, a seconda della scheda). Il confronto è "contiene", senza distinzione fra maiuscole e minuscole, applicato 250 ms dopo che si smette di digitare; gli spazi iniziali e finali sono ignorati. |
| Filtro di livello | Un elenco per scheda: Priorità su Allarmi, Gravità su Occorrenze, Transizione su Interblocchi. Cambiarlo rilegge subito il diario. |
| Aggiorna | Il pulsante con la freccia circolare rilegge il diario su richiesta; il suo suggerimento nomina la scheda ("Aggiorna gli eventi di allarme", "Aggiorna le occorrenze", "Aggiorna gli eventi di interblocco"). Resta in grigio mentre una lettura è in corso. |
| Aggiornamento in tempo reale | Ogni evento consolidato nel diario interroga di nuovo da sé la scheda aperta, con le richieste raggruppate perché una raffica costi una sola lettura (circa 200 ms dopo l'ultimo consolidamento). Una scheda che non si sta guardando viene riletta al ritorno. |
| Selezione | Un clic su una riga apre il pannello di dettaglio a destra. La selezione è conservata attraverso gli aggiornamenti tramite l'id dell'evento, e abbandonata se la riga non è nella pagina letta; la croce nella testata del pannello lo chiude. |
| Copia evento | Il pulsante in fondo al pannello di dettaglio copia l'evento come una sola riga di testo: istante completo, genere, livello, nome, riepilogo della transizione, messaggio e, per occorrenze e interblocchi, le identità. Il registro delle azioni risponde "Evento copiato negli appunti.", oppure "Gli appunti hanno rifiutato la copia." quando il browser l'ha negata. |
| Esporta | Esporta apre un menu con Esporta in CSV… ed Esporta in JSON… per ogni evento che la ricerca, il filtro e il periodo raggiungono, pagina dopo pagina, non solo le righe disegnate. Il pulsante resta in grigio finché la pagina è vuota. |
| Registrazione non filtrata | Il diario non è filtrato né da chi ha effettuato l'accesso né da ciò che quel ruolo può vedere altrove: è la registrazione tecnica della stazione, e una riga mancante in silenzio farebbe mentire lo storico. |
L'elenco e il pannello di dettaglio
Ogni riga porta la data e l'ora dell'evento nel formato configurato in Lingua e formati, un punto nel tono del suo livello, il nome dell'evento, un riepilogo della transizione su una riga e, sul bordo destro, la parola propria del livello (la priorità, la gravità o la transizione). I toni seguono una sola scala su ogni superficie: il tono critico per un allarme Critico, un'occorrenza Critica o uno scatto di interblocco; il tono di cautela per Alta, Avviso e "Sorgente sicura"; il tono di attenzione per Media; neutro per il resto.
Il pannello di dettaglio si apre con il distintivo del livello e il nome, poi l'istante completo con i millisecondi, il riepilogo della transizione, il messaggio (o "Nessun messaggio acquisito." quando la definizione non ne aveva), un riquadro EVENTO con Livello e ID evento, e uno o più riquadri di istantanea i cui campi sono elencati dalla pagina di ciascuna scheda.
La riga di stato
Sotto ogni cronologia: "N mostrati · pagina 1", dove N conta le righe della pagina aperta, seguito da " · filtrati" mentre una ricerca, un filtro di livello o un periodo è in vigore; "N mostrati · aggiornamento…" durante una rilettura; a destra, "1 selezionato" mentre una riga è selezionata e "Aggiornato hh:mm:ss", l'ora dell'ultima lettura riuscita.
Stati di caricamento, di vuoto e di errore
| Stato | Che cosa mostra la scheda |
|---|---|
| Prima lettura | "Caricamento degli eventi di allarme…" con "Lettura dal diario persistente degli eventi di allarme più recenti che corrispondono." (il sostantivo segue la scheda). |
| Niente registrato | "Nessun evento di allarme finora" con una riga che dice che cosa comparirà lì; la pagina di ogni scheda cita la propria. |
| Nessuna corrispondenza | "Nessun evento di allarme corrisponde a questi filtri" con "Modifica la priorità o i termini di ricerca per allargare questo storico." (priorità, gravità o transizione, a seconda della scheda). |
| Il diario non si lascia leggere | "Impossibile caricare gli allarmi" con "Il diario persistente non è temporaneamente disponibile. I log della Console non ne risentono." e un pulsante Riprova; la riga di stato dice "Allarmi non disponibili". |
| Un aggiornamento successivo fallisce | Le ultime righe buone restano sullo schermo e il registro delle azioni segnala "Aggiornamento degli allarmi non riuscito." |
Esportare una cronologia
I due formati sono download del browser, quindi funzionano allo stesso modo nella finestra della
stazione e in un browser remoto; il registro delle azioni risponde "Esportati N evento/i in" seguito
dal nome del file, oppure "Esportazione non riuscita.". Il nome del file porta la scheda e un timbro
ordinabile: alarm-history-20260902-143000.csv, occurrence-history-<stamp>.json,
interlock-history-<stamp>.csv.
Ogni istante è scritto nel formato di visualizzazione configurato, e il file dichiara una volta il
riferimento temporale: il CSV lo nomina nell'intestazione della sua prima colonna, "Timestamp
(UTC-03:00)" (oppure "Timestamp (UTC)"), e il JSON è una busta con un campo TimeZone di primo
livello accanto a un array Events. Oltre a ciò che la riga mostra, le colonne portano l'intera
istantanea congelata, identità comprese (l'id dell'evento, gli id dell'allarme, dell'occorrenza o
dell'osservazione, gli id del modello e dell'unità), così una cronologia esportata si può mettere in
relazione con i file delle prove e con i rapporti. Una cella CSV che comincia con =, +, - o
@ è preceduta da un apostrofo perché un foglio di calcolo la apra come testo e non come formula.
La pagina di ogni scheda elenca le proprie colonne.
Che cosa conserva il diario
Le tre cronologie vivono in events.db, un database a sé nella cartella dati della stazione accanto
a config.db e history-index.db, con una tabella in sola aggiunta per cronologia. Ciò che viene
scritto è un'istantanea presa nell'istante dell'evento (nomi, priorità, messaggio, modello, unità,
sorgente, il valore osservato), così rinominare, modificare o eliminare la definizione in seguito
non riscrive mai ciò che la stazione ha detto in quel momento. Niente in questa pagina, né altrove
nell'applicazione, elimina una riga: la conservazione tiene le 100.000 righe più recenti per
cronologia, potando le più vecchie per ordine di inserimento a ogni aggiunta, così un orologio
corretto non può sfrattare un evento fresco.
Il diario sopravvive a un riavvio e a un ripristino della configurazione: un backup copia soltanto il database di configurazione e la cartella degli asset, quindi ripristinarne uno non porta con sé il diario né lo riporta indietro. È una registrazione di transizioni, non di stato: dopo un riavvio il registro degli allarmi ricava di nuovo ogni allarme dal primo ciclo, le tacitazioni che erano in sospeso vanno perdute, e la cronologia mostra semplicemente ciò che è accaduto prima e dopo.
Gli eventi raggiungono il diario attraverso una coda ordinata che non blocca mai il runtime: il
produttore prende subito l'istantanea, un unico scrittore consolida nell'ordine di arrivo, e un
consolidamento che continua a fallire è ritentato fino a dieci volte prima che l'evento sia scartato
con una riga Errore in Console. Un'occorrenza osservata durante una prova è scritta prima nel
file di quella prova (la sorgente che leggono Storici e rapporti) e poi copiata nel diario con lo
stesso id di evento e il contesto della prova; un'osservazione fatta fuori da una prova da
un'occorrenza Always va soltanto nel diario. Le transizioni di interblocco e di allarme non hanno
registrazione al di fuori del diario. Un agente con l'area Logs aperta legge lo stesso diario
attraverso event_history_read, in sola lettura (vedi Aree consentite).
La console accanto alla registrazione
Console è una cosa diversa dalle tre cronologie: una vista scorrevole di 500 voci del flusso di diagnostica del programma, in memoria, perduta al riavvio e svuotata da Svuota la vista. Le due si sovrappongono là dove il runtime racconta ciò che sta facendo. Un fronte di occorrenza lascia una riga in Console sotto l'area Process (un'attivazione al livello della sua gravità: Critica come errore, Avviso come avviso, Info come informazione), e così fa una transizione di interblocco (uno scatto come avviso, una sorgente sicura e un riarmo come informazione). Le transizioni di allarme non compaiono in Console: la traccia del valutatore è dettaglio diagnostico che soltanto una cattura dettagliata registra. Le cronologie sono la registrazione tipizzata; Console spiega il runtime che le sta attorno.
Che cosa Eventi non fa
- Non configura nulla. Gli allarmi si definiscono su Logic > Alarms, le occorrenze sotto Process > Setup > Occurrences e l'interblocco di fermo su Process > Definition > Automation.
- Non riarma alcun interblocco: quello è il componente Interlock su una dashboard o la vista propria dell'unità.
- Non ha filtro per unità o prova: cerca per nome, oppure apri la prova in Storici per la sua registrazione di occorrenze.
- Non elimina nulla e non modifica nulla; soltanto la conservazione toglie righe.
- Mentre il runtime è fermo questa pagina non viene disegnata affatto: ogni schermata tranne Account è sostituita dall'avviso di pausa, cronologie comprese. Il diario stesso resta intatto e si legge esattamente come prima una volta riavviato il runtime.