Conversione DWORD a REAL
-
- Posts: 31
- Joined: 13/01/2019, 12:23
Conversione DWORD a REAL
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
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
-
- Moderatore
- Posts: 1666
- Joined: 29/10/2010, 10:09
- Contact:
Re: Conversione DWORD a REAL
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".
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".
-
- Posts: 31
- Joined: 13/01/2019, 12:23
Re: Conversione DWORD a REAL
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
se provo:
VOLTAGE_A := TO_REAL(16#43c966f3);
Nella finestra Watch di LogicLab vedo il valore 1137272576.000 invece mi aspetterei 402.804
-
- Moderatore
- Posts: 1666
- Joined: 29/10/2010, 10:09
- Contact:
Re: Conversione DWORD a REAL
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
-
- Posts: 31
- Joined: 13/01/2019, 12:23
Re: Conversione DWORD a REAL
Risulta sempre lo stesso valore anche se metto la variabile
-
- Moderatore
- Posts: 1666
- Joined: 29/10/2010, 10:09
- Contact:
Re: Conversione DWORD a REAL
è 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
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
-
- Posts: 31
- Joined: 13/01/2019, 12:23
Re: Conversione DWORD a REAL
Se inserisco il numero esadecimale su questo sito ottengo come risultato il dato correttoPixsys 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
https://gregstoll.com/~gregstoll/floattohex/
-
- Moderatore
- Posts: 1666
- Joined: 29/10/2010, 10:09
- Contact:
Re: Conversione DWORD a REAL
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.
Provi ad associare direttamente una REAL al registro modbus che sta acquisendo.
-
- Posts: 31
- Joined: 13/01/2019, 12:23
Re: Conversione DWORD a REAL
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.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.
Grazie lo stesso