Last visit was: It is currently 25/09/2020, 10:57


All times are UTC + 1 hour [ DST ]




Post new topic Reply to topic  [ 12 posts ]  Go to page 1, 2  Next
Author Message
 Post subject: Conversione DWORD a REAL
PostPosted: 24/06/2020, 11:13 

Joined: 13/01/2019, 13:23
Posts: 11
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


Top
Offline Profile  
 
 Post subject: Re: Conversione DWORD a REAL
PostPosted: 24/06/2020, 11:21 
Moderatore

Joined: 29/10/2010, 10:09
Posts: 1335
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".


Top
Offline Profile  
 
 Post subject: Re: Conversione DWORD a REAL
PostPosted: 24/06/2020, 11:33 

Joined: 13/01/2019, 13:23
Posts: 11
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


Top
Offline Profile  
 
 Post subject: Re: Conversione DWORD a REAL
PostPosted: 24/06/2020, 12:05 
Moderatore

Joined: 29/10/2010, 10:09
Posts: 1335
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


Top
Offline Profile  
 
 Post subject: Re: Conversione DWORD a REAL
PostPosted: 24/06/2020, 12:16 

Joined: 13/01/2019, 13:23
Posts: 11
Risulta sempre lo stesso valore anche se metto la variabile


Top
Offline Profile  
 
 Post subject: Re: Conversione DWORD a REAL
PostPosted: 24/06/2020, 12:19 
Moderatore

Joined: 29/10/2010, 10:09
Posts: 1335
è 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


Top
Offline Profile  
 
 Post subject: Re: Conversione DWORD a REAL
PostPosted: 24/06/2020, 12:20 

Joined: 13/01/2019, 13:23
Posts: 11
Sì è col segno


Top
Offline Profile  
 
 Post subject: Re: Conversione DWORD a REAL
PostPosted: 24/06/2020, 12:22 

Joined: 13/01/2019, 13:23
Posts: 11
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/


Top
Offline Profile  
 
 Post subject: Re: Conversione DWORD a REAL
PostPosted: 24/06/2020, 17:01 
Moderatore

Joined: 29/10/2010, 10:09
Posts: 1335
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.


Top
Offline Profile  
 
 Post subject: Re: Conversione DWORD a REAL
PostPosted: 24/06/2020, 19:01 

Joined: 13/01/2019, 13:23
Posts: 11
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


Top
Offline Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 12 posts ]  Go to page 1, 2  Next

All times are UTC + 1 hour [ DST ]


Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Jump to:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Theme created StylerBB.net & kodeki