SuperD Inserito: 9 ottobre 2006 Segnala Inserito: 9 ottobre 2006 Ciao a tutti,sto leggendo via ModBus dei parametri da alcuni fancoil, i Sp delle temperature mi vengono passate in 16 bit real. Ovviamente con il PLC che ho io (ET200S CPU) non riesco a leggere questo valore.Qualcuno di voi mi potrebbe dare un aiuto di come fare la conversione di questi valori in modo che io possa leggerli correttamente nel mio PLC?
poix Inserita: 9 ottobre 2006 Segnala Inserita: 9 ottobre 2006 mi sembra che col modbus devi invertire i byte, lo hai gia' fatto?ciao ciao
batta Inserita: 9 ottobre 2006 Segnala Inserita: 9 ottobre 2006 Come già fatto notare da Piero: real a 16 bit?Io non ho mai sentito parlare di real a 16 bit. La dimensione di una variabile real è di 4 byte, 32 bit.Informati bene sul formato della variabile che devi leggere e facci sapere.
Piero Azzoni Inserita: 9 ottobre 2006 Segnala Inserita: 9 ottobre 2006 per essere preciso alla paranioa, dato che si parla di modbus la dimensione di un real e' di 2 wordcomunque sempre 32 bit sono
SuperD Inserita: 10 ottobre 2006 Autore Segnala Inserita: 10 ottobre 2006 (modificato) Il passaggio è il seguente: io ho una rete EIB, collegata a questa ho inserito un Bridge che mi legge i Sp delle temperature e me li rende disponibili in Modbus. Il 16 bit real è una formato standard utilizzato da EIB. La struttura del floating point che ricevo è la seguente:S: segno; E: esponenteM: mantissaquesto è il formato del dato che mi viene passato: SEEE EMMM MMMM MMMM Modificato: 10 ottobre 2006 da SuperD
rguaresc Inserita: 10 ottobre 2006 Segnala Inserita: 10 ottobre 2006 (modificato) questo è il formato del dato che mi viene passato: SEEE EMMM MMMM MMMMNon e' sufficiente. Nella rappresentazione dei numeri real i componenti binari devono rappresentare dei valori frazionari secondo una qualche convenzione; non puo' essere una codifica diretta componente per componente.Se per esempio il formato che dai codificasse 10.0 nella forma 0000 1000 0000 0001 = (+1) X (10^1) X 1non sarebbe piu' possibile codificare 0,000001. Dovresti vedere esattamente come EEEE codifica l'esponente, come MMM... codifica la mantissa e con quale formula si compongono le parti per dare il valore decimale "umano".Informazioni sulla costruzione del codice REAL in step 7 le trovi aprendo un progetto, blocchi chiusi, "argomenti della guida.." "Tipi di dati semplici --> REAL Modificato: 10 ottobre 2006 da rguaresc
Piero Azzoni Inserita: 10 ottobre 2006 Segnala Inserita: 10 ottobre 2006 concordo al 100.% con rguarescpurtroppo la fantasia umana (nel senso negativo del termine) e' senza limititempo fa' ebbi a che fare con un vendor che si era inventato i real da 1 word e mezza (24 bit) ed in conseguenza a cio' nessun supervisore tranne il suo riusciva a leggere il pastrocchiomodbus e' nato con integer, cioe' interi di 16 bitpoi furono aggiuntele altre tipologie, quelle standardgli integer a 32 biti real a 32 bitse costui si e' inventeto un real a 16 bit l'unica cosa che puoi fare e' laggerlo come se fosse un integer poi elaborarlo con una routines che secondo il modello matematico che hai espresso ti restituisca un reala standardun lavoro questo non semplicissimo ma neanche trasscendantale(' evidente a questo punto che i limiti strutturali del numero evidenziati nel post precedene rimango tutti)
SuperD Inserita: 10 ottobre 2006 Autore Segnala Inserita: 10 ottobre 2006 (modificato) grazie per i suggerimenti Pietro e rguaresc, ora vedo come posso risolvere il problema, e vi farò sapere.ciao Modificato: 10 ottobre 2006 da SuperD
Livio Orsini Inserita: 10 ottobre 2006 Segnala Inserita: 10 ottobre 2006 tempo fa' ebbi a che fare con un vendor che si era inventato i real da 1 word e mezza (24 bit) ed in conseguenza a cio' nessun supervisore tranne il suo riusciva a leggere il pastrocchioPiero non è un'invenzione di un costruttore di supervisori.I real in 24 bits erano normalmente usati con i micro a 8 bits, tanto che ho ancora, in una vecchia libreria INTEL , tutte le routines di conversione, e le operazioni fondamentali, funzionanti a 24 bits (3 bytes).Però float con soli 16 bits mi sembra poco. Probabilmente, visto il range limitato delle variabili da trasmettere, si è voluto ottimizzare il tutto in una sola word.
poix Inserita: 10 ottobre 2006 Segnala Inserita: 10 ottobre 2006 sei sicuro di leggere il valore giusto dal lato EIB?Se e' una temperatura e' in formato EIS5 che e' si a 16bit che pero' ha una rappresentazione tutta strana... del tipoS,EEEE,MMMMMMMMMMMS: segnoEEEE: esponenteMMMMMMMMMMM: mantissapuoi trovare un covertitore qui.ciao ciao
walterword Inserita: 10 ottobre 2006 Segnala Inserita: 10 ottobre 2006 piccola parentesi , con i plc siemens bisogna invertire i byte all'interno della word .ciao
Piero Azzoni Inserita: 10 ottobre 2006 Segnala Inserita: 10 ottobre 2006 seconda piccola parentesi con altri device invece bisogna, con i real e gli nteger in doppia precisione invertire la lo_W con la hi_W
batta Inserita: 11 ottobre 2006 Segnala Inserita: 11 ottobre 2006 Se, come indicato da poix, il formato è EIS5, ed è corretto il convertitore linkato, allora MMMMMMMMMMM non rappresenta una mantissa, ma semplicemente un valore, EEEE rappresenta l'esponente (base 2) e S rappresenta il segno. Le cifre decimali sono 2 fisse.Per esempio, un numero in floating point a 32 bit (precisione singola) rappresentato secondo lo standard IEEE 754 è così formato:S,EEEEEEEE,MMMMMMMMMMMMMMMMMMMMMMMS = SegnoE (8 bit) = esponenteM (23 bit) = mantissaL'esponente è da considerare con un offset di 127 per poter rappresentare anche esponenti negativi. Si possono gestire valori di esponente da 1 (corrispondente a -126) a 254 (corrispondente a 127)C'è poi un bit nascosto, impostato sempre a 1, che rappresenta (in binario) la parte intera del numero.Insomma, per poter fare una conversione c'è bisogno di conoscere meglio il formato. In particolare penso si possa affermare che non ci sono dubbi sul bit del segno, mentre non si conosce come vada interpretato l'esponente e se quella definita mantissa sia veramente una mantissa.Il motivo per cui qualcuno abbia perso tempo ad inventare un simile formato mi è del tutto oscuro.
poix Inserita: 11 ottobre 2006 Segnala Inserita: 11 ottobre 2006 hai ragione! e' proprio il valore!comunque se serve una mano a leggere il lavoro e convetirlo posso dare una mano.Avevo perso diverso tempo l'anno scorso per risolvere il problema.ciao ciao
Piero Azzoni Inserita: 11 ottobre 2006 Segnala Inserita: 11 ottobre 2006 Il motivo per cui qualcuno abbia perso tempo ad inventare un simile formato mi è del tutto oscuro purtroppo la fantasia umana (nel senso negativo del termine) e' senza limiti
SuperD Inserita: 11 ottobre 2006 Autore Segnala Inserita: 11 ottobre 2006 (modificato) Ciao a tutti,inanzi tutto ho risoltro il problema in una altra maniera, però comunque sono molto interessato a capire il come interpretare questo formato di dato. Riporto quello scritto da manuale: S è il se segno,E è l'esponente (0.. 15)M è la Mantissa (-2048 .. 2047)SEEEEMMMMMMMMMMMquesta è tutta la documentazione su questo formato di dato che ho in possesso, oppure devo considerare che "purtroppo la fantasia umana (nel senso negativo del termine) e' senza limiti" Modificato: 11 ottobre 2006 da SuperD
rguaresc Inserita: 11 ottobre 2006 Segnala Inserita: 11 ottobre 2006 In questo formato il concetto di mantissa è diverso da quello IEEE. la conversione mi sembra:REAL = ( 2^E * M ) / 100oltre al segno.
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