и со стороны TCP и со стороны rtu и по проему rtu
В онлайне в ПЛК в буфере приема rcvbuf этапа psGET_MODBUS_RTU происходит при каждом запросе наполнение? И опять же я бы там знак равенства не ставил (IF sz = modbus_answer_size THEN), потому как ответ с ошибкой будет кажется всего пять байт, достаточно будет написать sz>0
и еще по точке psGET_MODBUS_RTU вот не совпало количество принятых данных, Вы перенапровляете снова на эту точку, и что получается таймер снова запускается на 200мс, а мастер ТСР то продолжает ждать ответ, каков же у него должен стоять таймаут в таком случае.И еще по поводу приема данных, надо читать порт пока sz не будет равно нулю, а в случае такого таймера чтения всего буфера неполучится, как бы вообще такой код не должен работать
IF sz = modbus_answer_size THEN этим я проверяю хотя бы корректность ответа (что пришла правильная длина )
согласен. читать нужно до тех пор пока буфер не пустой.. завтра перепишу , но не понятно почему на тестовых программах все работало...
причем всяески менял и длину считываемых данных и периоды опроса..
Тут можно намного все упростить, используя modbus.lib. Вам останется принять пакет ТСР, получить код функции, по нему выбрать соответствующий блок библиотеки, заполнить необходимыми данными, полученный ответ данных запихать в пакет ТСР и отправить мастеру
да использовать modbus lib можно, но есть идея расширить набор команд (функций) и тогда модбас либ становиться безполезной (
А кто мешает потом добавить подобные функции в проекте, главное же отработать преобразование в ПЛК, начните с того что гарантированно работает, когда пропадут ошибки в проекте, займетесь и доработкой функций библиотеки