[ModbusRtu] ajout d'un paramètre à modbus_t

Bonjour,

J’utilise la bibliothèque ModbusRtu avec des RS-485 TTL montés sur des Nano.

Le dialogue fonctionne, mais je voudrais pouvoir piloter la carte en fonction d’un paramètre.
Par exemple, dans un cas, l’appel déclenche l’envoi de données, dans un autre cas, il modifie un réglage.
Il me servira aussi pour paginer les réponses, parce que j’ai des données à transmettre qui dépassent la capacité du buffer et je dois faire plusieurs appels successifs.

Mais dans ce protocole, le maître appelle l’esclave en lui passant cinq paramètre :

typedef struct
{
    uint8_t u8id;          /*!< Slave address between 1 and 247. 0 means broadcast */
    uint8_t u8fct;         /*!< Function code: 1, 2, 3, 4, 5, 6, 15 or 16 */
    uint16_t u16RegAdd;    /*!< Address of the first register to access at slave/s */
    uint16_t u16CoilsNo;   /*!< Number of coils or registers to access */
    uint16_t *au16reg;     /*!< Pointer to memory image in master */
}
modbus_t;

J’ai bien essayé d’en ajouter un sixième, mais mes connaissances en C++ sont insuffisantes.

J’ai ajouté un “PARAM_A” dans la trame, ainsi que dans la structure

enum MESSAGE
{
    ID                             = 0, //!< ID field
    FUNC, //!< Function code position
    ADD_HI, //!< Address high byte
    ADD_LO, //!< Address low byte
    NB_HI, //!< Number of coils or registers high byte
    NB_LO, //!< Number of coils or registers low byte
    PARAM_A,
    BYTE_CNT  //!< byte counter
};

ici également + création des getter/setter

 au8Buffer[ PARAM_A ]    = telegram.u8paramA;

Mais la validation de la requête ne fonctionne pas :

uint8_t Modbus::validateRequest()  ....

        u16regs = word( au8Buffer[ ADD_HI ], au8Buffer[ ADD_LO ]);
        u16regs += word( au8Buffer[ NB_HI ], au8Buffer[ NB_LO ]);
        u8regs = (uint8_t) u16regs;
        if (u8regs > u8regsize) 
        {
             Serial.println("\n "+String(u8regs)+">"+String(u8regsize));
            return EXC_ADDR_RANGE;
      }

J’obtiens un u8regs de 11, au lieu des 3 attendus.

Savez-vous s’il existe une version modifée de ce protocole qui permette cela ?

Merci

(*)Samuel Marco i Armengol