Vai al contenuto
PLC Forum


Errore Somma Tra Real


Reverendo bit

Messaggi consigliati

Reverendo bit

Ciao,

Ho un problema con una semplice somma tra due variabili real.

Si tratta di un totalizzatore di portata, in OB32 (richiamato ogni second) viene eseguita una semplicissima somma in ladder.

Nel blocco ADD_R gli ingressi sono così collegati:

IN1, DB20.DBD70 - Portata acqua totalizzata

IN2, DB20.DBD100 - Portata acqua istantanea

OUT, DB20.DBD70 - Portata acqua totalizzata

Succede che il cliente lamenta che il totalizzatore non incrementa più, e che solo se la portata è sopra un certo valore continua ad incrementare.

attualmente la DB20.DBD70 - Portata acqua totalizzata ha un valore di 1.55696e+008

la DB20.DBD100 - Portata acqua istantanea ha un valore di 6.554

Se la portata si mantiene su questo valore la Portata acqua totalizzata non incrementa e nessun errore nella parola di stato.

Se la portata sale sopra gli 8 m3allora la Portata acqua totalizzata incrementa nuovamente.

Qualcuno sa il perchè?

Link al commento
Condividi su altri siti


I numeri real sono rappresentati con un valore (mantissa) ed un esponente. Per la mantissa ci sono solo 23 bit disponibili e il campo è ridotto. Ciò che stai aggiungendo è troppo sproporzionato al totale e non ci sono più bit disponibili.
1,55696E+008 / 6,554 = 23755874,2753 semplificando, 23755874 in binario 1011010100111110001100010 sono 25 bit come rapporto tra totale attuale e incremento
Siccome la sproporzione tra il totalizzatore e l'incremento ha superato i 23 bit il conteggio non può andare avanti, perchè l'incremento è sproporzionatamente piccolo.

"solo se la portata è sopra un certo valore continua ad incrementare" appunto.

Dovrai rifare il conteggio, ti consiglio di:
- fare un piccolo totalizzatore come quello attuale con numeri real per esempio che arrivi fino a un metro cubo.
- quando superi il metro cubo sottrai dal totalizzatore un metro cubo in real e aggiungi al totale generale in DINT il numero 1

Modificato: da rguaresc
Link al commento
Condividi su altri siti

Reverendo bit

Ciao rguaresc,

Grazie per la dritta anche se fino a ieri avrei dato per scontato che se avessi fatto una routine di incremento avrei potuto incrementare un real da 0 al suo valore massimo.

fatto è che ho provato anche con il simulatore ed il risultato non cambia, arrivati ad un certo valore la variabile non incrementa più.

Il problema è stato anche cercare di spiegare al cliente il problema continua a credere che ci sia un'errore in logica.

Di questo problema non ho trovato nessuna descrizione in nessuna manuale, e per poter essere esaustivo devo dare una spiegazione matematica.

Quindi carta penna e calamaio.

Ciao Grazie.

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...