Vai al contenuto
PLC Forum


Valori Interi A 32 Bit E Protocollo Modbus


paolopap

Messaggi consigliati

Salve a tutti.

Quando un dato viene letto, via modbus, come intero a 32 bit dalla combinazione di due registri adiacenti, tipicamente io seguo questa regola:

valore = (REGISTRO1 << 16) + REGISTRO2

dove REGISTRO1 è quello dall'offset minore.

Alcuni dispositivi, tuttavia, considerano quest'altra regola:

valore = (REGISTRO2 << 16) + REGISTRO1

Mi chiedo a questo punto:

c'è una regola che _dovrebbe_ essere seguita e che determina quale dei due registri va shiftato, oppure ogni costruttore può regolarsi a modo proprio?

grazie

Link al commento
Condividi su altri siti


Non c'è nessuna regola o specifica al riguardo.

Tieni presente che il protocollo modbus si basa su registri 16bit e non contempla registri a 32bit.

Link al commento
Condividi su altri siti

non hai una regola generale , sicuramente puoi leggere il dato dai due registri attigui, meglio sarebbe se pi riesci a gestirne la "formattazione"...curiosità vuoi per caso leggere da un driver CT?

Link al commento
Condividi su altri siti

Non ho la certezza assoluta, ma credo che la regola sia data dal tipo di CPU (Intel vs Motorola) vedi questo link

Modificato: da max.riservo
Link al commento
Condividi su altri siti

Se avete bisogno di una spiegazione big-endian vs little-endian la cosa non è difficilisima da capire,

sono due diversi tipi di rappresentazione, quello big-endian identifica il bit più significativo a sinistra cioè all'inizio, mentre little-endiam tutto il contrario.

I processore IA32, cioè queli Intel per capirci, sono little-endian, quindi se devi leggere da un indirzzo di memoria tipo 0x12345678, il bit più significativo sarà quello a destra, quindi lo leggerai in queto modo 78563412.

Per i processori Spark e Motorola, si usa la notazione big-endian, quindi come li trovi cosi te li prendi, in fila.

Attenzione però, io non ne capisco di Protocollo Modbus, però conosco bene il protocollo TCP/IP e in quest ultimo proprio per unificare l'eterogeneità dei sistemi, si effettuano conversioni per uniformare la rappresentazione in big-endian.

Se qualcosa non è chiaro chiedi pure.

Saluti

Link al commento
Condividi su altri siti

  • 11 months later...

Carissimo Tommaso,il tuo post capita direi a fagiolo,mi sono fatto con VbExpress tutta la conversione da Big to Little e viceversa e con qualche problema pur di leggere dei real a 32 bit sul plc schneider,e credimi ho faticato,tuttavia c'è ancora qualche problemino e la devo affinare,la rete naturalmente è ethernet con protocollo MDBus che va su di una porta del plc attraverso dei drive contenuti nel web server integrato,le 2 function sono parecchio lunghe,naturalmente con una leggo i 2 registri a 16 bit e con quell'altra li scrivo,ma santo cielo non c'è un modo per fare la stessa cosa senza morirci dietro così tanto? ;) non sai consigliarmi?anche perchè poi dovro leggere e scrivere circa 2000 variabili ed insomma richiamare le 2 function tutte le volte.... :huh:

Ciao

Link al commento
Condividi su altri siti

  • 1 year later...

Se la distanza è 100 mt ti consiglio una ricevente "CAME",con un antennino esterno va anche oltre se c'è visibilità.
Certo il costo è diverso da quello che hai preso tu ma la qualità è assicurata. :)

Link al commento
Condividi su altri siti

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