Цитата Сообщение от Гарчев Евгений Посмотреть сообщение
про тонкости работы с modbus.lib уже не раз говорилось... Не надо формировать буфер на запись в каждом цикле, т.к. ф.б. на запись не успеет отработать за один цикл, а буфер используется один и тот же и на отправку запроса и на прием ответа. Таким образом, при ответе от слейв-устройства в буфере будет "каша" из ответа от устройства и данных, которые вы отправляете на него.
пять лет прошло, а грабли как новые.
попался мне плк 73 c платкой модбаса,
залил тестовый проект в него Modbus чтение INT и REAL (ST),
и к этому же компу через usb-rs485 модбас от контроллера пробросил, софт MasterOPCUniversal включил и смотрю.
Ага, переключил в коде на MB_RTU , т.к. в MasterOPCUniversal так по умолчанию.
забил цифры в регистры с 8 по 14 (как в примере) в slave устройстве на софте MasterOPCUniversal
INT нормально считывает, REAL байты только переставил и все норм тоже.
А считывание трех INT подряд - нули. что то не так....
настроил цикл задачи на 500ms и увидел что код ошибки 255 прилетает как раз в тот момент как прошло завершение чтения.
таким образом ничего в результат не попадает.
вот в поиске и нашел эту ветку.
уменьшив в запросе количество байт до 4х - ошибка пропадает, ставишь больше появляется.

собственно вопрос тот же (как не наступить на грабли ?) как работать с modbus.lib?
не совсем ясна фраза "Не надо формировать буфер на запись в каждом цикле" ? хотя чувствую что в ней зарыт смысл...
где посмотреть подробнее?

PS. не хочется лезть в библиотеку, благо можно открыть либу текстовым редактором и скопипастить это чудо и покопаться.
Не попадись мне контроллер для опытов just for fun так сказать, не купил бы. А ведь цена на него стоит сейчас в 30 тысяч!
(хоть и снят с производства) и при этом к нему бубен не прилагается!