Reverendo bit Inserito: 22 luglio 2014 Segnala Share Inserito: 22 luglio 2014 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 More sharing options...
rguaresc Inserita: 22 luglio 2014 Segnala Share Inserita: 22 luglio 2014 (modificato) 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: 22 luglio 2014 da rguaresc Link al commento Condividi su altri siti More sharing options...
Reverendo bit Inserita: 23 luglio 2014 Autore Segnala Share Inserita: 23 luglio 2014 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 More sharing options...
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora