Интересен этап выяснения что дело не в бобине.
Вам выше Cs-Cs норм советы дал. По пунктам. Особенно б)
Вид для печати
Конфигурация читает регистры по одному. Попробуйте прочитать все регистры группой, с помощью String Вложение 65159
ОРС сервер читает тоже группой.
Файл проекта выкладываю
А что-то я не понял... А что? Если в комментариях к коду Arduino поменять слово "10" на "06" - то Ардуино начнёт понимать команду Modbus 0x06?
По имени включаемого файла <SimpleModbusSlave.h> нарыл ссылки на используемую библиотеку:Код://общее количество регистров для функции 3 и 06 разделяет тотже самый массив регистров
//т.е. то же самое адресное пространство
};
unsigned int holdingRegs[HOLDING_REGS_SIZE]; // функции 3 и 06 массив регистров
https://github.com/kolod/Arduino-Simple-Modbus-Slave
Там прям в ReadMe (https://github.com/kolod/Arduino-Sim...ster/README.md) написано так:
Так какого же ж фига писать в Ардуинку функцией 6, а не 10-то?!Цитата:
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)
И ещё вот что. В попробуй-ка увеличить интервал между запросами. Это в дереве конфигурации ПЛК в настройках интерфейса.
Код в Ардуинке написан на гадких Delay(), а ПЛК110 - это скоростной пулемёт в запросах. Ардуинка может просто не справляться.
Вложение 65162
О!! А ещё ж порядок байт может быть другой.
Я ещё и ещё раз советую начать с того, чтобы регистры возвращали простые числа длиной в 4 знака, типа "1111", "2222".
Это позволит разобраться с порядком и регистров и байт. А потом уже надо накручивать логику.
Всем спасибо за участие. С чтением группой попробую позже. Перехожу к связке Lectus 3.10-SCADA 3.12 .Похоже там тоже не все гладко.
Вложение 65163 C String работает четко.
А можно узнать у гуру ST?
---
Для чего после END_IF многие в своих разработках ставят символ ;?
Или ткните носом - буду признателен за науку. :cool: