Sto realizzando un progetto su EB800 per comandare una serie di termoregolatori Pixsys ATR243-21ABC-T connessi su una linea RS485 e protocollo MODBUS RTU. I dispositivi sono slave e possono essere configurati con indirizzi da 1 a 254. L’indirizzo 255 è broadcast mentre 0 è broadcast senza risposta da parte dello slave. Le funzioni supportate sono:
– WORD READING (max 20 word) (0x03, 0x04)
– SINGLE WORD WRITING (0x06)
– MULTIPLE WORDS WRITING (max 20 word) (0x10)
Gli indirizzi modbus partono da 0 (tipo dipositivo) e arrivano a 4072 (parametro 72). Nel mio progetto utilizzo le seguenti funzioni
– 6x (Es. imposto il setpoint con 6x-1101)
– 6x_Bit (Es. Attivo/disattivo la regolazione con 6x_Bit-0101600)
– 4x (Es. Leggo la temperatura attuale con 4x-1099)
– 4x_Bit (Es. Leggo lo stato del tuning con 4x_Bit-0301706)
Il mio problema è che il driver MODBUS RTU fa partire il conteggio degli indirizzi da 1 contandolo come 0. Quindi, per esempio, quando cerco di leggere il setpoint (4x-1101) in realtà leggo la temperatura attuale non filtrata (indirizzo 1100).
Risolverei velocemente decrementando di 1 tutti gli indirizzi che vado a leggere, ma vorrei mantenere la corrispondenza tra gli indirizzi indicati nel manuale del regolatore e gli indirizzi utilizzati nel progetto. Il driver MODBUS RTU (zero-based addressing) sembrerebbe fare al caso mio, ma non ha la funzione 6x_Bit che mi serve anche se la uso per soli tre indirizzi su ogni dispositivo(6x_Bit-0101600 ; 6x_Bit-0100901 ; 6x_Bit-0100900 ).
Tutta questa premessa per chiedere:
– E’ possibile rimappare gli indirizzi con un offset di -1 ?
– C’è qualche alternativa al comando 6x_Bit? Tipo settare un singolo bit su una word che poi viene scritto con 6x.