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: 1716
- 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: 1716
- 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: 1716
- 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: 1716
- 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
-
- Moderatore
- Posts: 1716
- Joined: 29/10/2010, 10:09
- Contact:
Re: Conversione DWORD a REAL
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)
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)
-
- Posts: 31
- Joined: 13/01/2019, 12:23
Re: Conversione DWORD a REAL
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).