сам разобрался.
поставил в конфигурации задач 10ms на задачу где обрабатывается запрос по modbus и заработало.
стоило прибавить цикличность выполнения задачи до 20 ms как через раз посыпалась опять ошибка 255.
заметил что функциональный блок срабатывает три или четыре раза прежде чем результат "готов" и, видимо при большем периоде срабатывания блока
времени не хватает, и происходит timeout, именно он а не ошибка контрольной суммы которая трактуется как timeout, как предполагал кто то здесь ранее.
скорость порта 9600.
Такой режим (уменьшение времени цикла) ранее я пробовал. Но ответчиком (slave устройством) была программа MasterOPC Universal Modbus Server,
которая сразу же после включения контроллера, слетала тихо. Поэтому ранее я не получил результата. а с блоком МВ110 работает.
опрос 8ми регистров - счетчиков срабатывания опрашивает!
PS.опытным путем: если скорость порта 115200, то цикл задачи должен быть еще меньше, 10ms -много.
Убрал вообще из диспетчера задания, только в "конфигурации ПЛК" можно видеть по умолчанию 1ms - минимальный цикл.
тогда работает без ошибок!
собственно теперь ясно удивление:
видимо как раз задача в свободно плавании была у коллеги, поэтому все работало норм. а я заморочился.
PPS. еще пару дней экспериментов ушло на то, чтобы найти еще одну настройку, чтобы работало все на отлично.
Никто не сказал обратить внимание, и я чего то не встречал про это информацию здесь.
речь идет о инициализации порта:
Settings.dwBufferSize:=100; (*размер буфера*)
пока я не не сменил ноль на 100, чтение пятидесяти регистров за раз проходило с ошибкой 50% , то есть через раз читало нормально.
Как только поставил 100(установил на вскидку), читает без ошибок в ста процентах случаев!
Прикрепил проект тестовый, где разнес задачи.
в codesys 2.3 нет возможности поставить задачу на выполнение по состоянию переменной (выполнение пока TRUE)
при этом задача опроса порта должна крутиться максимально быстро в момент опроса, при этом для многих приложений не нужно частое обновление данных,
то код опроса у меня обернут в IF(по глобальной переменной)....END_IF чтобы, пока не нужно опрашивать порт, задача минимально занимала процессор,
а когда нужно включалась по глобальной переменной из главной задачи.
чтобы не было ошибок при симуляции slave устройства на компьютере OPC сервером, как это делал я, нужно уменьшить в настройках драйвера usb-rs485 таймаут с 16 до 1 мс.
настройки com port.png