Automotika Inserito: 6 dicembre 2014 Segnala Inserito: 6 dicembre 2014 Buongiorno a tutti. sono nuovo e vorrei porvi un quesito sulla somma tra numeri in virgola mobile, devo contare gli impulsi di un contatore e il codice è il seguente: U "UTF COGENERATORE" FP M 31.1 SPBNB _004 L "Variabili_Contatori".utf_coge L 1 +I T "Variabili_Contatori".utf_coge _004: NOP 0 //////////////////////////////////////////////////////////////////////////////////////// U( U( L "Variabili_Contatori".utf_coge L 100 ==I ) FP M 31.5 SPBNB _005 L "Variabili_Contatori".UTF_Cogeneratore L "Variabili_Contatori".appoggiovirgola (valore 0,01) +R T "Variabili_Contatori".UTF_Cogeneratore UN OV SAVE CLR _005: U BIE ) SPBNB _006 L 0 T "Variabili_Contatori".utf_coge _006: NOP 0 Praticamente conto gli impulsi del mio ingresso, quando arrivo a 100 impulsi sommo di 0,01 la mia variabile "Variabili_Contatori".UTF_Cogeneratore. Il problema è che a lungo andare il valore assume 3 decimali dopo la virgola e dopo vari conteggi a causa dell'arrotondamento il valore diventa diverso da quello del contatore, ad esempio io sommo 0,01 al numero 4567,88 il risultato da 4567,89 dopo qualche conteggio mi ritrovo valori tipo 4567,893 che arrotondando diventa 4567,89. quindi non incrementa. come posso risolvere questo inghippo' spero di essere stato chiaro e che qualcuno mi possa aiutare. Grazie
JumpMan Inserita: 6 dicembre 2014 Segnala Inserita: 6 dicembre 2014 (modificato) Ciao e benvenuto nel forum. Per chiarimenti sul formato REAL puoi leggere qui: http://www.plcforum.info/file/corrieri/Real_Numbers.pdf Se ho ben capito tu hai un contatore integer che quando arriva a 100 incrementa di 0.01 un altro contatore real, ma questo 2° contatore real a cosa ti serve? per visualizzarlo su un HMI? se sì puoi modificarlo in DINT e impostare sull'HMI 2 posizioni decimali. Modificato: 6 dicembre 2014 da JumpMan
batta Inserita: 6 dicembre 2014 Segnala Inserita: 6 dicembre 2014 (modificato) Quello che succede è assolutamente normale. Per risolvere, hai solo due modi: utilizzare variabili in virgola mobile a 64 bit anziché 32 bit, oppure utilizzare variabili DINT al posto delle REAL. Visto che S7-300 non gestisce virgola mobile a 64 bit, non ti resta che utilizzare il secondo metodo. Dato che lavorando con interi non puoi certo fare incrementi di 0,01, devi incrementare di una unità e tenere conto che le ultime due cifre sono decimali. Se devi per forza passare questo valore ad una variabile REAL, potresti fare come segue: ........ FP M 31.5 SPBNB _005 L "Variabili_Contatori".UTF_Cogeneratore_x100 // Variabile di tipo DINT + L#1 T "Variabili_Contatori".UTF_Cogeneratore_x100 DTR L 0.01 *R T "Variabili_Contatori".UTF_Cogeneratore ........ In questo modo potrai gestire valori fino a 2147483647 che, con due cifre decimali, diventa 21474836,47. Tieni presente che questo valore in realtà ti verrà visualizzato come 2.147484e+007 Non potrai quindi vedere ogni singolo incremento di 0.01. Se questo numero lo devi visualizzare su un pannello operatore, ti conviene usare la variabile di tipo DINT e impostare la visualizzazione con due cifre decimali. Modificato: 6 dicembre 2014 da batta
Automotika Inserita: 6 dicembre 2014 Autore Segnala Inserita: 6 dicembre 2014 Ciao. io devo visualizzare sul pannello il valore del contatore, è un contatore in Mwh e devo visualizzare ogni singolo incremento, se ho ben capito dici di usare il valore in DINT e quindi nel pannello mettere la virgola con 2 cifre decimali..... non ci avevo pensato Grazie mille del tuo consiglio
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