Vai al contenuto
PLC Forum


incremento variabile reale di 0.25


incus

Messaggi consigliati

Salve a tutti,

 

in un progetto TiaPortal mi sono accorto che se a una variabile reale ci addiziono un valore di 0.25 di volta in volta (vedi allegato), quando il valore reale raggiunge 4194304.0, l'operazione si arresta.

Se cambio l'addendo in un valore maggiore di 0.25, l'operazione riprende a contare.

Non sto cercando un modo alternativo per risolvere il problema, vorrei capire il perchè si comporta in questo modo.

 

Qualcuno ne sa qualcosa?

 

P.S. lo stesso comportamento lo ha anche il simulatore, per maggior precisione uso il TIAPortal V14sp1 e una CPU S71214C V4.2.

 

Buona giornata:thumb_yello:

kop addition.png

Link al commento
Condividi su altri siti


Ciao. Questo comportamento è abbastanza normale. Il formato real è un numero rappresentato in formato esponenziale, non in binario come i numeri interi, quindi più il numero diventa grande e più le parti piccole vengono ignorate proprio per via del formato di rappresentazione. Se devi mantenere un conteggio così devi usare un altro real che per esempio incrementi di 1 ogni volta che il tuo conteggio supera il milione e poi sottrai questo numero dal conteggio attuale. Purtroppo per come è rappresentato il formato real non puoi sommare o sottrarre un numero molto piccolo se il tuo numero è enorme

Link al commento
Condividi su altri siti

28 minuti fa, 84paolo scrisse:

Ciao. Questo comportamento è abbastanza normale. Il formato real è un numero rappresentato in formato esponenziale, non in binario come i numeri interi, quindi più il numero diventa grande e più le parti piccole vengono ignorate proprio per via del formato di rappresentazione. Se devi mantenere un conteggio così devi usare un altro real che per esempio incrementi di 1 ogni volta che il tuo conteggio supera il milione e poi sottrai questo numero dal conteggio attuale. Purtroppo per come è rappresentato il formato real non puoi sommare o sottrarre un numero molto piccolo se il tuo numero è enorme

Grazie per la tempestività :D

Link al commento
Condividi su altri siti

Ho trovato, proprio in questo forum, un documento che spiega nel dettaglio il perché di questo comportamento, questo è il link.

 

Riassumendo, questo "errore" di calcolo è dovuto al fatto che Real ha una precisione fino alla sesta cifra decimale, LReal fino alla quindicesima, quindi 10^y, dove y > 6 (Real) o 15 (LReal). Ad esempio (Real): 100 000 000 + 1 = 100 000000

 

Correggetemi se sbaglio....

 

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...