Выложите ваш проект.
Отправил на почту
Настроил чтение данных с обоих устройств.
Но с одного устройства, при чтении регистров функцией 02, почему-то состояние в программе отображается или FALSE или <Значение выражения не может быть найдено.>.
Следующий по списку регистр, как положено FALSE или TRUE. Что может быть не так?
Вложение 57028
В протоколе Modbus биты передаются в виде битовой маски, где конкретный "coil" или, как в вашем случае, "discrete input" занимает именно 1 бит.
В CODESYS тип BOOL занимает 8 бит, из которых значимым является только младший.
Если каким-то образом изменяются другие биты переменной типа BOOL - то отладчик понимает, что что-то пошло не так (<Значение выражения не может быть найдено>).
Вам нужно под указателем разместить массив переменных типа BYTE (а не BOOL), и уже из них извлекать отдельные биты (и если нужно - копировать их в BOOL-переменные).
Я что-то совсем запутался, как организован регистр для функции 02.
Программой Modbus Poll данные читаю правильно, номера регистров и значения соответствуют спецификации производителя.
Я в программе читаю с контроллера массив в 234 регистра Discrete Input.
Регистры с адресом 2 и 9 у меня индикация с контроллера состояния вентилятора и насоса. При это на 1 регистре считывается значение 2, когда включается насос.
Регистры с адресом 97, 98, 99 должны быть в значении 1 (TRUE), а читает нули.
Давайте по TeamViewer посмотрим?Цитата:
Я что-то совсем запутался
Вот что читает Modbus Poll
Вложение 57030
а это Codesys
Вложение 57031
отправил в личку
По скриншотам видно, что и Modbus Poll, и Codesys показывают одно и то же - просто в разной форме.
Вложение 57032 Вложение 57033 Вложение 57034
Здравствуйте, Коллеги! Может кто знает, как создавать собственные шаблоны для Modbus устройств? Очень удобно если, например, используешь ПЧ в нескольких проектах. Не нужно набирать по несколько раз. Заранее спасибо