Page 1 of 1
					
				Conversione DWORD a REAL
				Posted: 24/06/2020, 11:13
				by Goliath86
				buongiorno,
sapreste cortesemente dirmi come convertire una DWORD in un REAL? Leggo da Modbus il valore 16#43C966F3 e dovrei visualizzarlo in REAL con la virgola.
Grazie mille
			 
			
					
				Re: Conversione DWORD a REAL
				Posted: 24/06/2020, 11:21
				by Pixsys tecnico 1
				Salve,
dal gruppo funzioni "Operators and blocks" può usare la funzione "TO_REAL". Se la libreria è suddivisa in cartelle (default per le nuove versioni di LogicLab), la funzione si trova nella sotto-cartella "Conversion".
			 
			
					
				Re: Conversione DWORD a REAL
				Posted: 24/06/2020, 11:33
				by Goliath86
				Grazie della risposta:
se provo:
VOLTAGE_A := TO_REAL(16#43c966f3);
Nella finestra Watch di LogicLab vedo il valore 1137272576.000 invece mi aspetterei 402.804
			 
			
					
				Re: Conversione DWORD a REAL
				Posted: 24/06/2020, 12:05
				by Pixsys tecnico 1
				Se il valore letto deriva da una lettura Modbus, questo sarà associato ad un variabile, inserisca tra le parentesi della funzione la variabile e non il suo valore in esadecimale
			 
			
					
				Re: Conversione DWORD a REAL
				Posted: 24/06/2020, 12:16
				by Goliath86
				Risulta sempre lo stesso valore anche se metto la variabile
			 
			
					
				Re: Conversione DWORD a REAL
				Posted: 24/06/2020, 12:19
				by Pixsys tecnico 1
				è possibile che il dato sia inteso con il segno (negativo)?
Il risultato che lei ottiene (1137272576.000) è la conversione in decimale del numero esadecimale 43C966F3, con 3 punti decimali quindi è "potenzialmente" corretto, da dove ricava 402.804?
Tenga presente che una Dword è sempre intesa come intera
			 
			
					
				Re: Conversione DWORD a REAL
				Posted: 24/06/2020, 12:20
				by Goliath86
				Sì è col segno
			 
			
					
				Re: Conversione DWORD a REAL
				Posted: 24/06/2020, 12:22
				by Goliath86
				Pixsys tecnico 1 wrote:è possibile che il dato sia inteso con il segno (negativo)?
Il risultato che lei ottiene (1137272576.000) è la conversione in decimale del numero esadecimale 43C966F3, con 3 punti decimali quindi è "potenzialmente" corretto, da dove ricava 402.804?
Tenga presente che una Dword è sempre intesa come intera
Se inserisco il numero esadecimale su questo sito ottengo come risultato il dato corretto
https://gregstoll.com/~gregstoll/floattohex/ 
			 
			
					
				Re: Conversione DWORD a REAL
				Posted: 24/06/2020, 17:01
				by Pixsys tecnico 1
				Il problema probabilmente è l'interpretazione del dato dal Modbus, dovrebbe leggere il registro che le interessa e salvarlo direttamente in una variabile REAL (non DWORD). Il fatto probabilmente è che il numero che acquisisce dal modbus ha già l'informazione del "punto" ma salvandolo in una dword di fatto salva un altro valore.
Provi ad associare direttamente una REAL al registro modbus che sta acquisendo.
			 
			
					
				Re: Conversione DWORD a REAL
				Posted: 24/06/2020, 19:01
				by Goliath86
				Pixsys tecnico 1 wrote:Il problema probabilmente è l'interpretazione del dato dal Modbus, dovrebbe leggere il registro che le interessa e salvarlo direttamente in una variabile REAL (non DWORD). Il fatto probabilmente è che il numero che acquisisce dal modbus ha già l'informazione del "punto" ma salvandolo in una dword di fatto salva un altro valore.
Provi ad associare direttamente una REAL al registro modbus che sta acquisendo.
Già provato e non è servito. Provato a leggere da Modbus direttamente in REAL e nessun valore letto; provato a passare la variabile letta in DWORD ad una variabile REAL e niente (stesso risultato ottenuto con la funzione TO_REAL()). Unica soluzione: ho creato io una funzione per la conversione ed ora il dato viene correttamente convertito da DWORD a REAL come testato su vari siti di conversione dati. La variabile DWORD in realtà è un FLOAT32 mappato su due registri Modbus adiacenti; quindi contiene già l'indicazione del "punto"; dovevo solo convertirlo in un decimale leggibile da HMI. Con la mia funzione ora va.
Grazie lo stesso
 
			 
			
					
				Re: Conversione DWORD a REAL
				Posted: 25/06/2020, 11:35
				by Pixsys tecnico 1
				Possibile allora che le due singole WORD fossero scambiate? Parte alta e parte bassa intendo
PS: non capisco perchè associando un FLOAT32 ai registri non leggete nulla, che funzioni state usando? (lettura su generic modbus, strumento mappato sul catalogo o cosa)
			 
			
					
				Re: Conversione DWORD a REAL
				Posted: 02/07/2020, 21:54
				by Goliath86
				Leggiamo tramite il Generic Modbus. I due registri sono effettivamente invertiti ma anche swappandoli non siamo riusciti a leggere il valore float correttamente (neanche forzando un valore manualmente in esadecimale senza passare per il Modbus).