emelianov / modbus-esp8266

Most complete Modbus library for Arduino. A library that allows your Arduino board to communicate via Modbus protocol, acting as a master, slave or both. Supports network transport (Modbus TCP) and Serial line/RS-485 (Modbus RTU). Supports Modbus TCP Security for ESP8266/ESP32.
Other
534 stars 190 forks source link

Как получить более 40 байт данных за один запрос? #368

Closed makkirus closed 1 week ago

makkirus commented 1 month ago

Как получить более 40 байт данных за один запрос? Пробовал через такой пример на сервере: mb.addCoil(COIL_BASE, COIL_VAL(false), LEN); // Add Coils. mb.onGetCoil(COIL_BASE, cbRead, LEN); // Add single callback for multiple Coils. It will be called for each of these coils value get и обработчик:

uint16_t cbRead(TRegister* reg, uint16_t val) { // Checking value of register address which callback is called on. // See Modbus.h for TRegister and TAddress definition if(reg->address.address < COIL_BASE) return 0; uint8_t offset = reg->address.address - COIL_BASE; if(offset >= LEN) return 0; return COIL_VAL(digitalRead(pinList[offset])); }

Но в этом случае данные возвращаются в виде битов 1 или 0. Как сделать правильный запрос с клиента и как правильно описать его на сервере? Спасибо!

emelianov commented 1 month ago

Если честно, не понял суть вопроса. Coil и должен возвращаться в виде один Coil -- 1 бит. За один запрос можно передать максимум 1 фрейм 255 байт - заголовок.