marcob1984 Inserito: 13 novembre 2015 Segnala Inserito: 13 novembre 2015 (modificato) Buongiorno a tutti,sono nuovo sulla sezione "linguaggi di programmazione" perchè sono nuovo anche nel mondo c# e VB (ho pochissime nozioni, ho sempre programmato plc). Oggi mi ritrovo con la necessità di leggere e scrivere dei dati da un database di un plc siemens S7-300 con VB.Net (Visual studio 2015 - Visual basic). Domanda: se ho una serie di 4 byte in HEX, come faccio ad unirli e a convertirli nel numero reale corrispondente?Esempio: byte 0 = 00; byte 1 = 80; byte 2 = 1D; byte 3 = 44, corrisponde a 630.0 (6.300000e+002)Grazie Modificato: 13 novembre 2015 da marcob1984
lucios Inserita: 14 novembre 2015 Segnala Inserita: 14 novembre 2015 (modificato) Puoi usare la classe "BitConverter" con il metodo "BitConverter.ToSingle".Dai un'occhiata quiCiao Modificato: 14 novembre 2015 da lucios
GiRock Inserita: 14 novembre 2015 Segnala Inserita: 14 novembre 2015 Guarda che 0x00801D44 non fa di certo 630 manco a girarlo, ma bensì 8396100...
dott.cicala Inserita: 14 novembre 2015 Segnala Inserita: 14 novembre 2015 sarà nuovo anche in sistemi di numerazione.....
marcob1984 Inserita: 17 novembre 2015 Autore Segnala Inserita: 17 novembre 2015 (modificato) Grazie Lucios per la tua risposta. Proverò la tua soluzione e ti farò sapere.Per GiRock e dott.cicala: vi illustro la situazione che mi ritrovo nel database del PLC: ho dichiarato un numero di tipo REAL e gli ho assegnato un valore correspondente a 630.0 (6,300000e+002). La memoria di questo "REAL" occupa 4 byte. Se visualizzo i 4 byte splittati su una VAT (tabella delle variabili) leggo i valori in HEX postati sopra. Se aprite un qualsiasi sito (es: http://gregstoll.dyndns.org/~gregstoll/floattohex/ o http://www.h-schmidt.net/FloatConverter/IEEE754.html )in cui potete fare la conversione da HEX a Float, scoprirete che inserendo il valore "441D8000" vi darà come risultato 630.0. Modificato: 17 novembre 2015 da marcob1984
marcob1984 Inserita: 17 novembre 2015 Autore Segnala Inserita: 17 novembre 2015 Grazie Lucios, è proprio la "classe" che mi serviva, provato e funziona.GiRock, la tua conversione è semplicemente da HEX a DEC. Nella mia domanda iniziale avevo chiaramente scritto "convertirli in reale", che equivale a dire floating point. Forse non ero stato chiaro, correggimi se sbaglio
dott.cicala Inserita: 17 novembre 2015 Segnala Inserita: 17 novembre 2015 Esempio: byte 0 = 00; byte 1 = 80; byte 2 = 1D; byte 3 = 44, corrisponde a 630.0 (6.300000e+002)
lucios Inserita: 17 novembre 2015 Segnala Inserita: 17 novembre 2015 Non c'è di che.La classe BitConverter è veramente molto utile
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