Data e Ora
Logica Temporale
Padroneggia l'orologio del tuo PLC. Dalla marcatura temporale precisa degli eventi ai calcoli temporali complessi e alle conversioni di formato, controlla ogni millisecondo.
Perché gestire il tempo in un PLC?
La gestione del tempo è fondamentale per l'automazione industriale. Consente la registrazione precisa degli eventi di produzione, l'attivazione di attività di manutenzione pianificate, il calcolo dei tempi di ciclo della macchina e la sincronizzazione dei sistemi distribuiti tramite protocolli NTP.
I moderni PLC Siemens offrono tipi di dati avanzati come DTL (Date and Time Long) che fornisce l'accesso diretto ai singoli componenti (Anno, Mese, Giorno, Ora) senza complesse manipolazioni di bit, semplificando notevolmente la programmazione rispetto ai formati DT legacy.
Lettura del Tempo
Accesso agli orologi di sistema e locali
T_CONV — Estrazione ora di sistema
T_CONVCosa fa
Estrae componenti specifici da un valore di data/ora o converte tra formati. È essenziale per ottenere ore/minuti leggibili da un timestamp grezzo.
Quando usarlo
Quando è necessario visualizzare solo l'ora su un HMI da un tag Date_And_Time completo.
Suggerimenti per esperti
Usa T_CONV per convertire un TOD (Time_Of_Day) in una String per una facile registrazione.
Assicurati che i tipi di input e output siano compatibili per evitare errori di overflow.
In SCL, questa istruzione è spesso gestita implicitamente da semplici assegnazioni.
RD_SYS_T — Lettura ora di sistema
RD_SYS_TCosa fa
Legge l'ora di sistema corrente della CPU (UTC). A differenza di RD_LOC_T, non include l'ora legale o gli offset del fuso orario.
Quando usarlo
Ideale per la registrazione interna dove è richiesto un riferimento temporale continuo e senza salti (evita problemi durante i cambi di ora legale).
Suggerimenti per esperti
Usa sempre UTC per l'archiviazione nel database per garantire la coerenza globale.
L'uscita RET_VAL fornisce informazioni di stato (ad esempio, se l'orologio è sincronizzato).
Combinalo con RD_LOC_T si devi visualizzare sia l'ora 'Tecnica' che quella 'Umana'.
Aritmetica
Calcoli su durate e timestamp
T_ADD — Aggiungi tempo
T_ADDCosa fa
Aggiunge una durata (Time o LTime) a un punto temporale specifico. Gestisce correttamente gli overflow di minuti, ore e giorni.
Quando usarlo
Calcolo di un tempo di scadenza o di un punto di riavvio programmato (ad esempio, ora corrente + 24 ore).
Suggerimenti per esperti
Molto utile per implementare watchdog personalizzati con durate dinamiche.
Usa i tipi LTime per la precisione al nanosecondo sulle CPU S7-1500.
Se il risultato supera la data massima (Anno 2262), la CPU imposta uno stato di errore.
T_DIFF — Differenza di tempo
T_DIFFCosa fa
Calcola la differenza tra due timestamp e restituisce il risultato come una durata (Time o LTime).
Quando usarlo
Misurazione della durata esatta di una fase del processo o calcolo dell'uptime di una macchina.
Suggerimenti per esperti
Perfetto per i calcoli OEE (Overall Equipment Effectiveness).
Sottraendo una data più grande da una più piccola si ottiene un valore Time negativo.
Sui S7-1200/1500, usa i tag DTL per un accesso più facile ai componenti della differenza.
Conversione
Cambiamenti di formato e gestione delle String
T_CONV — Conversione da DT a DTL
T_CONVCosa fa
Converte il legacy DATE_AND_TIME (8 byte) nel moderno formato DTL o viceversa.
Quando usarlo
Quando si interfaccia codice legacy o blocchi di comunicazione con la nuova logica ottimizzata per S7-1500.
Suggerimenti per esperti
Preferisci DTL per tutti i nuovi progetti per evitare la complessità BCD (Binary Coded Decimal).
La conversione in DTL ti consente di scrivere 'MyTag.MONTH' direttamente nel tuo codice.
Fai attenzione alla precisione dei millisecondi che potrebbe essere troncata in alcuni formati.
DT_TO_STRING — Serializzazione del tempo
DT_TO_STRCosa fa
Converte un valore di data/ora in un formato String leggibile. STRING_TO_DT esegue l'inverso.
Quando usarlo
Invio di timestamp a un file CSV su una memory card o comunicazione con un'API web.
Suggerimenti per esperti
La stringa di output segue il formato ISO 8601 (YYYY-MM-DD-HH:MM:SS.ms).
Usa STRING_TO_DT per analizzare le date ricevute da un database SQL esterno.
Nota che le operazioni sulle String richiedono più risorse della CPU; usale con parsimonia nei cicli veloci.
DATE_AND_TIME vs DTL
Scegliere la giusta struttura temporale
| Caratteristica | DATE_AND_TIME (Legacy) | DTL (Moderno) |
|---|---|---|
| Dimensione | 8 Byte | 12 Byte |
| Codifica | BCD (Complesso da leggere) | Interi (Direttamente leggibili) |
| Accesso ai componenti | Richiede bit masking | Strutturato (Tag.Month) |
| Intervallo | Dal 1990 al 2089 | Dal 1970 al 2262 |
| Supporto S7-1200/1500 | Solo compatibilità | Nativo e raccomandato |
| Precisione | 10 ms | 1 Nanosecondo |
Domande frequenti
Qual è la differenza tra ora di sistema e ora locale?
L'ora di sistema (RD_SYS_T) è sempre UTC, fornendo un riferimento stabile. L'ora locale (RD_LOC_T) si adatta al tuo fuso orario specifico e alle regole dell'ora legale (DST) configurate nelle proprietà della CPU.
Come sincronizzare l'orologio del PLC con un server?
Abilita NTP (Network Time Protocol) nella configurazione hardware della CPU. Fornisci l'IP del tuo server di riferimento orario e il PLC regolerà automaticamente il suo orologio interno.
Perché il mio DATE_AND_TIME mostra valori strani in Hex?
Il DT legacy utilizza la codifica BCD. Un valore di 25 in Decimale viene memorizzato come 16#25 in BCD. Usa sempre le istruzioni di conversione o DTL per leggere correttamente i valori.
Posso calcolare direttamente la differenza tra due tag DTL?
In SCL, puoi semplicemente usare l'operatore '-' tra due tag DTL. TIA Portal chiamerà automaticamente l'istruzione T_DIFF per te.