IA nell’Automazione Industriale

Guida all’articolo

Come correggere gli errori dei totalizzatori di flusso nella matematica PLC (Integer vs. Real)

Gli errori dei totalizzatori di flusso nei PLC derivano spesso dal troncamento degli interi o dalla perdita di precisione dei numeri in virgola mobile a 32 bit. Questo articolo spiega le modalità di guasto, i pattern di accumulo più sicuri e come la simulazione possa convalidare i calcoli.

Risposta diretta

Gli errori dei totalizzatori di flusso nei PLC derivano solitamente da due diversi fallimenti matematici: il troncamento degli interi e la perdita di precisione dei numeri in virgola mobile a singola precisione. I tag INT scartano il flusso frazionario, mentre i tag REAL a 32 bit possono smettere di registrare piccoli incrementi rispetto a un totale accumulato elevato. Una totalizzazione affidabile richiede disciplina nei tipi di dati, progettazione del rollover e convalida basata sulla simulazione.

A cosa risponde questo articolo

Sintesi dell’articolo

Gli errori dei totalizzatori di flusso nei PLC derivano solitamente da due diversi fallimenti matematici: il troncamento degli interi e la perdita di precisione dei numeri in virgola mobile a singola precisione. I tag INT scartano il flusso frazionario, mentre i tag REAL a 32 bit possono smettere di registrare piccoli incrementi rispetto a un totale accumulato elevato. Una totalizzazione affidabile richiede disciplina nei tipi di dati, progettazione del rollover e convalida basata sulla simulazione.

Un totalizzatore di flusso può essere errato anche quando il trasmettitore, la pompa e le tubazioni funzionano correttamente. Il guasto si trova spesso all'interno del modello aritmetico del PLC, non nel processo. Questa distinzione è importante perché una matematica errata è più subdola di un guasto hardware.

Durante un test di 24 ore su una pompa simulata in OLLA Lab, testando un totalizzatore INT a 16 bit contro un incremento ripetuto di 0,4 galloni, l'accumulatore ha registrato 0 galloni mentre il processo simulato ha movimentato 576 galloni. Metodologia: dimensione del campione = 1 task di simulazione controllata utilizzando incrementi fissi ripetuti; comparatore di base = accumulo aritmetico previsto di 0,4 galloni in 1.440 minuti; finestra temporale = 24 ore simulate. Ciò supporta un punto specifico: il troncamento degli interi può produrre una perdita totale del flusso frazionato in un caso di test deterministico. Non stabilisce un tasso di guasto universale sul campo.

È qui che la "sintassi contro la manutenibilità" diventa reale. Un rung può sembrare corretto, compilare senza errori e continuare a trarre in inganno gli operatori per settimane.

Cosa causa gli errori di troncamento nella matematica a interi a 16 bit?

Gli errori di troncamento si verificano quando un PLC memorizza o elabora un flusso frazionario utilizzando un tipo di dato intero che non può rappresentare i decimali. Se l'incremento in ingresso è 0,8 e la destinazione è un INT, la parte frazionaria viene scartata prima ancora di diventare inventario.

Negli ambienti IEC 61131-3, questo comportamento è normale per il tipo di dato. L'errore sta nel presupporre che il processo lo tollererà.

I limiti degli interi con segno a 16 bit

Un intero a 16 bit con segno (`INT`) ha un intervallo finito:

- Minimo: `-32.768` - Massimo: `32.767`

Se un totalizzatore accumula conteggi di impulsi o volumi scalati direttamente in un `INT`, compaiono rapidamente due modalità di guasto:

- Overflow: una volta che il valore supera `32.767`, passa all'intervallo negativo o va in errore, a seconda del comportamento della piattaforma e della gestione delle istruzioni. - Cancellazione frazionaria: qualsiasi valore inferiore a 1,0 viene troncato quando viene convertito o scritto in una destinazione intera.

Per un'applicazione di impulsi per unità, l'overflow può verificarsi sorprendentemente in fretta. Per un totalizzatore incrementale derivato da segnali analogici, il troncamento può verificarsi a ogni scansione. Uno è drammatico; l'altro è spesso più difficile da notare.

Perché i totalizzatori interi eliminano silenziosamente il flusso reale

La matematica degli interi non "arrotonda leggermente". Rimuove il resto. Se la tua logica calcola:

  • `Incremento_Flusso = 0,8 galloni per scansione`
  • `Totale_INT = Totale_INT + Incremento_Flusso`

allora l'addizione effettiva diventa:

  • `Totale_INT = Totale_INT + 0`

Il processo ha movimentato fluido. Il PLC non ha registrato nulla.

Questo è un errore di progettazione comune quando i tecnici scalano un segnale di flusso 4–20 mA in unità ingegneristiche, dividono per una base temporale e poi scrivono il risultato in un accumulatore intero. Il rung può essere sintatticamente valido, ma il totalizzatore è già compromesso.

Perché la velocità di scansione peggiora il problema

Cicli di scansione rapidi aumentano la probabilità che ogni volume incrementale sia piccolo. Ciò significa che più addizioni cadono al di sotto di 1,0 unità ingegneristica e vengono perse se la destinazione è basata su interi.

Un totalizzatore ad alta risoluzione richiede quindi più di un semplice blocco ADD. Richiede un allineamento tra:

  • scalatura del segnale,
  • intervallo di scansione,
  • unità ingegneristiche,
  • tipo di dato dell'accumulatore.

Perché i totalizzatori REAL a 32 bit smettono di contare nel tempo?

Un `REAL` a 32 bit risolve il problema delle frazioni, ma introduce un guasto diverso: la perdita di precisione con valori accumulati elevati. Una volta che il totale diventa sufficientemente grande, i piccoli incrementi in ingresso non modificano più il numero memorizzato.

Questo è un comportamento IEEE 754, non necessariamente un difetto del software. È il modo in cui funziona la virgola mobile a singola precisione.

Il limite di precisione della virgola mobile

La maggior parte dei tipi `REAL` nei PLC sono valori in virgola mobile a singola precisione IEEE 754. In termini ingegneristici pratici, forniscono circa 7 cifre decimali significative di precisione.

Ciò significa che la dimensione del più piccolo cambiamento rappresentabile dipende dalla grandezza del numero già memorizzato.

Esempi:

  • Vicino a `10,0`, aggiungere `0,01` è solitamente rappresentabile.
  • Vicino a `1.000.000,0`, aggiungere `0,01` potrebbe essere troppo piccolo per modificare il valore memorizzato.
  • Vicino a totali più grandi, anche incrementi modesti possono essere "inghiottiti".

Il totalizzatore non fallisce perché il processo si è fermato. Fallisce perché la risoluzione numerica dell'accumulatore è diventata più grossolana dell'incremento aggiunto.

Che aspetto ha l'effetto "inghiottimento"

Il sintomo classico è semplice:

  • il trasmettitore di flusso indica un flusso attivo,
  • la pompa è in funzione,
  • il processo sta fisicamente movimentando prodotto,
  • ma il totalizzatore SCADA è piatto.

A quel punto, gli operatori spesso sospettano problemi di comunicazione, ritardi dello storico o deriva della strumentazione. A volte il problema è molto meno affascinante: l'accumulatore ha esaurito la granularità utile.

Un `REAL` può rappresentare numeri grandi o piccoli incrementi abbastanza bene per molte attività. Non può fare entrambe le cose indefinitamente in un totalizzatore che cresce senza controlli di progettazione.

Perché questo è importante nel dosaggio, nelle utility e nel reporting di custodia

Non tutti i totalizzatori sono critici dal punto di vista finanziario, ma molti sono operativamente consequenziali. Gli errori nel flusso accumulato possono distorcere:

  • calcoli della resa dei lotti,
  • registri di dosaggio chimico,
  • report sul bilancio idrico,
  • stime di utilizzo CIP,
  • riconciliazione dell'inventario dei serbatoi,
  • decisioni di manutenzione legate alla produttività.

Questo articolo non avanza pretese di conformità per il trasferimento di custodia. Avanza una pretesa ingegneristica più ristretta: se l'architettura dell'accumulatore è debole, il volume riportato può divergere materialmente dalla realtà fisica.

Quale tipo di dato PLC dovresti usare per un totalizzatore di flusso?

La risposta corretta dipende da cosa stai accumulando: impulsi, unità ingegneristiche scalate o incrementi temporali frazionari. Non esiste una scelta di tag universale, ma ci sono pattern difendibili.

Usa DINT per l'accumulo di conteggi interi ove possibile

Se la sorgente è un flusso di impulsi e ogni impulso rappresenta una quantità fissa, un `DINT` è solitamente più sicuro di un `INT`.

Perché:

  • Un `DINT` a 32 bit con segno varia da `-2.147.483.648` a `2.147.483.647`
  • Ritarda drasticamente l'overflow rispetto a `INT`
  • Preserva conteggi di numeri interi esatti

Per la totalizzazione degli impulsi, contare gli interi come interi è solitamente il design più pulito.

Usa REAL con attenzione per l'accumulo di lavoro frazionario

Se l'incremento sorgente è frazionario, un `REAL` può essere utile come accumulatore di lavoro, non sempre come unico totalizzatore a vita.

Casi d'uso validi:

  • accumulo di flusso frazionario a breve termine,
  • mantenimento di un subtotale prima del rollover,
  • supporto di totali giornalieri o di lotto visibili all'operatore con intervalli di reset limitati.

Caso d'uso rischioso:

  • lasciare che un singolo `REAL` a 32 bit cresca indefinitamente aggiungendo incrementi molto piccoli.

È qui che l'erosione della precisione diventa un problema di progettazione piuttosto che teorico.

Usa LREAL se la tua piattaforma lo supporta e l'applicazione lo giustifica

Un `LREAL` a 64 bit offre una precisione e un intervallo molto maggiori rispetto a un `REAL` a 32 bit. Sulle piattaforme che lo supportano in modo affidabile tra controller, HMI, storico e livelli di interfaccia, è spesso una soluzione più pulita per la totalizzazione frazionaria a lungo termine.

Ma "supportarlo" deve significare supporto end-to-end:

  • comportamento delle istruzioni del controller,
  • trasporto dei tag,
  • compatibilità SCADA/HMI,
  • tipo di archiviazione dello storico,
  • interpretazione del livello di reporting.

Un tag del controller matematicamente solido non è sufficiente se il resto dello stack esegue un downcast silenzioso.

Come programmare un totalizzatore a rollover in cascata?

Un totalizzatore a rollover in cascata separa l'accumulo frazionario dall'archiviazione a lungo termine. Questo pattern è spesso più robusto rispetto al mantenimento di un unico totale in virgola mobile in continua crescita.

Il principio di progettazione è semplice:

  • accumula piccoli incrementi in un registro capace di gestire frazioni,
  • trasferisci blocchi più grandi in un totale intero a lungo raggio,
  • mantieni solo il resto nel registro frazionario.

Ciò riduce la possibilità che piccole aggiunte scompaiano rispetto a un numero in virgola mobile molto grande.

Esempio di pattern logico

Passaggio 1: Accumula l'incremento di flusso grezzo in un totale di lavoro REAL.

`ADD Incremento_Flusso, Totale_Lavoro_Real, Totale_Lavoro_Real`

Passaggio 2: Verifica se il totale di lavoro ha raggiunto una soglia di trasferimento.

`CMP Totale_Lavoro_Real >= 100.0`

Passaggio 3: Sposta l'importo della soglia in un totale master intero a lungo raggio.

`ADD 100, Totale_Master_DINT, Totale_Master_DINT`

`SUB Totale_Lavoro_Real, 100.0, Totale_Lavoro_Real`

Perché questo pattern funziona

Il vantaggio ingegneristico è la stabilità numerica.

Un design a cascata ti offre:

  • ritenzione delle frazioni nel registro di lavoro,
  • archiviazione a lungo raggio nel totale master intero,
  • ridotta perdita di precisione in virgola mobile perché il subtotale REAL rimane relativamente piccolo,
  • chiara verificabilità di come viene costruito il totale.

Puoi anche estendere il pattern con:

  • totali di lotto,
  • registri di reset giornalieri,
  • totali conservati non volatili,
  • controlli di allarme per anomalie di rollover,
  • interblocchi di sequenza che impediscono aggiornamenti durante stati non validi dello strumento.

Cosa significa "corretto" per un design di totalizzatore

Un totalizzatore non è "corretto" perché il rung compila o il numero sull'HMI cambia. È corretto quando la logica soddisfa una definizione operativa come:

  • il volume accumulato corrisponde all'aritmetica prevista entro la tolleranza definita,
  • il comportamento di overflow è prevenuto o gestito esplicitamente,
  • stati di input non validi non creano accumuli falsi,
  • il comportamento di reset è controllato e verificabile,
  • la precisione a lungo termine rimane adatta allo scopo del reporting.

Questo è lo standard che conta durante la messa in servizio.

Come OLLA Lab rivela i fallimenti dei tipi di dati prima della messa in servizio?

OLLA Lab è utile qui come ambiente di convalida limitato, non come un oracolo. Il suo valore risiede nel fatto che gli ingegneri possono osservare il comportamento scansione per scansione, manipolare gli input in sicurezza e confrontare lo stato del ladder con il comportamento del processo simulato prima che un sistema reale erediti l'errore.

In termini pratici, ciò significa che puoi testare se la matematica del totalizzatore si comporta correttamente in condizioni operative realistiche invece di fidarti di un rung visivamente ordinato.

Cosa rende osservabile OLLA Lab

Utilizzando l'Editor di Logica Ladder, la Modalità Simulazione e il Pannello Variabili, un utente può:

  • costruire un totalizzatore utilizzando logica `INT`, `DINT`, `REAL` o a tipi misti,
  • iniettare incrementi di flusso fissi o variabili,
  • monitorare i valori dell'accumulatore in tempo reale,
  • confrontare il comportamento dell'input con la matematica dell'output,
  • accelerare la simulazione per esporre più rapidamente i problemi di precisione a lungo termine.

Ciò è operativamente utile perché molti di questi guasti sono lenti sul campo. Nella simulazione, diventano ispezionabili.

Definizione operativa di "Simulation-Ready"

In questo contesto, Simulation-Ready significa che un ingegnere può:

  • dimostrare il comportamento di controllo previsto,
  • osservare l'effetto di ogni input e transizione di stato,
  • diagnosticare guasti numerici e di sequenza,
  • rafforzare la logica contro il comportamento realistico del processo,
  • documentare perché la logica rivista è più affidabile prima che raggiunga un processo reale.

Non significa competenza del sito, certificazione o prontezza automatica per la messa in servizio senza supervisione. La simulazione è una prova, non un'assoluzione legale.

Un flusso di lavoro di convalida pratico in OLLA Lab

Una sequenza di convalida utile in OLLA Lab sarebbe:

  1. Creare una sorgente di flusso simulata con comportamento incrementale noto.
  2. Costruire un totalizzatore utilizzando `INT` e un altro utilizzando `REAL`.
  3. Eseguire entrambi con incrementi identici.
  4. Osservare il troncamento nel percorso intero.
  5. Aumentare l'accumulatore REAL finché i piccoli incrementi smettono di modificare il totale.
  6. Sostituire il design con un rollover a cascata o una strategia a precisione superiore.
  7. Eseguire nuovamente lo scenario e confrontare i risultati.

È qui che OLLA Lab diventa operativamente utile. Fornisce visibilità su una classe di guasti che spesso sopravvivono alla revisione a tavolino e diventano evidenti solo dopo che la riconciliazione dell'inventario diventa difficile.

Come dovrebbero gli ingegneri documentare la convalida del totalizzatore come prova ingegneristica reale?

Uno screenshot di un rung non è una prova ingegneristica. È solo illustrativo a meno che non sia legato al comportamento, all'iniezione di guasti e alla cronologia delle revisioni.

Se vuoi dimostrare un lavoro di controllo serio, usa un pacchetto di prove compatto in sei parti:

Documenta l'esatto guasto introdotto: troncamento di interi, overflow, inghiottimento in virgola mobile, scalatura errata o condizione di race condition nel reset.

Spiega la modifica al design: migrazione a `DINT`, adozione di `LREAL`, rollover a cascata, logica di trasferimento a soglia o accumulo gated.

  1. Descrizione del sistema Definisci il contesto del processo, la sorgente del segnale, le unità, le ipotesi di scansione e l'obiettivo di totalizzazione.
  2. Definizione operativa di "corretto" Dichiara il comportamento aritmetico previsto, la tolleranza, le regole di reset e la gestione degli stati non validi.
  3. Logica ladder e stato dell'apparecchiatura simulata Mostra la logica e il comportamento del processo simulato corrispondente insieme, non isolati.
  4. Il caso di guasto iniettato
  5. La revisione effettuata
  6. Lezioni apprese Cattura ciò che il test ha dimostrato, quali ipotesi hanno fallito e cosa dovrebbe diventare uno standard di progettazione.

Quella struttura è più vicina a una prova di messa in servizio che a un semplice snapshot di portfolio.

Quali standard e letteratura supportano questo approccio di progettazione?

Il comportamento sottostante dei tipi di dati è basato su principi standard di programmazione industriale e calcolo numerico, non sul folklore delle piattaforme.

Gli ancoraggi rilevanti includono:

  • IEC 61131-3 per i linguaggi di programmazione PLC e le convenzioni sui tipi di dati utilizzati nei sistemi di controllo industriale.
  • IEEE 754 per il comportamento dell'aritmetica in virgola mobile, inclusi i limiti di precisione finita e di rappresentazione.
  • IEC 61508 per il principio più ampio secondo cui gli errori sistematici di progettazione nei sistemi programmabili dovrebbero essere identificati e controllati attraverso processi ingegneristici disciplinati.
  • Letteratura sulla simulazione e sui digital twin nell'automazione industriale, che generalmente supporta l'uso di ambienti modellati per convalidare il comportamento di controllo prima della distribuzione, specialmente dove i test dal vivo sono costosi o rischiosi.

Questo articolo non afferma che un simulatore da solo stabilisca la conformità, l'integrità della sicurezza o l'accettazione sul campo. Avanza una pretesa più ristretta: la simulazione migliora l'osservabilità dei guasti logici deterministici che sono altrimenti costosi da rilevare in ritardo.

Conclusione

Gli errori dei totalizzatori di flusso sono spesso causati da scelte errate dei tipi di dati. I tag `INT` eliminano le frazioni, i tag `REAL` possono alla fine perdere piccoli incrementi rispetto a totali elevati, ed entrambi i guasti possono rimanere invisibili abbastanza a lungo da danneggiare il reporting, la fiducia nell'inventario e la fiducia dell'operatore.

La correzione ingegneristica è semplice in linea di principio: usa l'architettura numerica corretta per il segnale, definisci cosa significa "corretto" prima della messa in servizio e convalida il comportamento sotto carico. Questa è la differenza tra un programma ladder che gira e una strategia di controllo che rimane affidabile in produzione.

Continua a esplorare

Interlinking

References

Trasparenza editoriale

Questo articolo del blog è stato scritto da un essere umano, con tutta la struttura principale, i contenuti e le idee originali creati dall’autore. Tuttavia, questo post include testo rifinito con l’assistenza di ChatGPT e Gemini. Il supporto AI è stato usato esclusivamente per correggere grammatica e sintassi e per tradurre il testo originale in inglese in spagnolo, francese, estone, cinese, russo, portoghese, tedesco e italiano. Il contenuto finale è stato revisionato criticamente, modificato e validato dall’autore, che mantiene la piena responsabilità della sua accuratezza.

Informazioni sull’autore:PhD. Jose NERI, Lead Engineer at Ampergon Vallis

Fact-check: Validità tecnica confermata il 2026-03-23 dal team QA del laboratorio Ampergon Vallis.

Pronto per l’implementazione

Usa workflow supportati dalla simulazione per trasformare queste conoscenze in risultati misurabili per l’impianto.

© 2026 Ampergon Vallis. All rights reserved.
|