Vai al contenuto
PLC Forum


Conversione 16 Bit Real In 32 Bit Real


Messaggi consigliati

Inserito:

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? :(:(


Inserita:

mi sembra che col modbus devi invertire i byte, lo hai gia' fatto?

ciao ciao

Inserita:

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.

Inserita:

per essere preciso alla paranioa, dato che si parla di modbus

la dimensione di un real e' di 2 word

comunque sempre 32 bit sono

Inserita: (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: esponente

M: mantissa

questo è il formato del dato che mi viene passato: SEEE EMMM MMMM MMMM

Modificato: da SuperD
Inserita: (modificato)

questo è il formato del dato che mi viene passato: SEEE EMMM MMMM MMMM

Non 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 1

non 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: da rguaresc
Inserita:

concordo al 100.% con rguaresc

purtroppo la fantasia umana (nel senso negativo del termine) e' senza limiti

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 pastrocchio

modbus e' nato con integer, cioe' interi di 16 bit

poi furono aggiuntele altre tipologie, quelle standard

gli integer a 32 bit

i real a 32 bit

se 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 standard

un lavoro questo non semplicissimo ma neanche trasscendantale

(' evidente a questo punto che i limiti strutturali del numero evidenziati nel post precedene rimango tutti)

Inserita: (modificato)

grazie per i suggerimenti Pietro e rguaresc, ora vedo come posso risolvere il problema, e vi farò sapere.

ciao :D

Modificato: da SuperD
Inserita:
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 pastrocchio

Piero 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.

Inserita:

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 tipo

S,EEEE,MMMMMMMMMMM

S: segno

EEEE: esponente

MMMMMMMMMMM: mantissa

puoi trovare un covertitore qui.

ciao ciao

Inserita:

piccola parentesi , con i plc siemens bisogna invertire i byte all'interno della word .

ciao

Inserita:

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

Inserita:

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,MMMMMMMMMMMMMMMMMMMMMMM

S = Segno

E (8 bit) = esponente

M (23 bit) = mantissa

L'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.

Inserita:

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

Inserita:
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
Inserita: (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)

SEEEEMMMMMMMMMMM

questa è 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" :D:D

Modificato: da SuperD
Inserita:

In questo formato il concetto di mantissa è diverso da quello IEEE. la conversione mi sembra:

REAL = ( 2^E * M ) / 100

oltre al segno.

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 account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...