А что-то я не понял... А что? Если в комментариях к коду Arduino поменять слово "10" на "06" - то Ардуино начнёт понимать команду Modbus 0x06?
Код:
//общее количество регистров для функции 3 и 06 разделяет тотже самый массив регистров
//т.е. то же самое адресное пространство
};
unsigned int holdingRegs[HOLDING_REGS_SIZE]; // функции 3 и 06 массив регистров
По имени включаемого файла <SimpleModbusSlave.h> нарыл ссылки на используемую библиотеку:
https://github.com/kolod/Arduino-Simple-Modbus-Slave
Там прям в ReadMe (https://github.com/kolod/Arduino-Sim...ster/README.md) написано так:
Features
To keep it simple and to reduce memory consumption, only the two following Modbus functions are supported:
- read holding registers (0x03)
- write multiple registers (0x10)
Так какого же ж фига писать в Ардуинку функцией 6, а не 10-то?!
И ещё вот что. В попробуй-ка увеличить интервал между запросами. Это в дереве конфигурации ПЛК в настройках интерфейса.
Код в Ардуинке написан на гадких Delay(), а ПЛК110 - это скоростной пулемёт в запросах. Ардуинка может просто не справляться.
FramingTime.gif
О!! А ещё ж порядок байт может быть другой.
Я ещё и ещё раз советую начать с того, чтобы регистры возвращали простые числа длиной в 4 знака, типа "1111", "2222".
Это позволит разобраться с порядком и регистров и байт. А потом уже надо накручивать логику.