Vai al contenuto
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




Valori Interi A 32 Bit E Protocollo Modbus


Messaggi consigliati

Inserito:

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


Inserita:

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.

Inserita:

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?

Inserita: (modificato)

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

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

  • 11 months later...
Inserita:

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

  • 1 year later...
Inserita:

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

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