PDA

Просмотр полной версии : ПЛК210+МКОН Modbus TCP



Gi0
19.03.2025, 16:39
Здравствуйте.
Плк опрашивает модбас устройства(датчики темперратуры) через мкон и затем визуализируется всё это дело на панели оператора.
В области PRG создал array of words [0...99]. И ассоциировал модбас мастер tcp опрашивает модбас устройства rs485 через мкон, записывает в массив переменных и затем этот же массив идёт на панель оператора. Почему через плк, а не на прямую не спрашивайте, это по тз.

Возникла проблема на пустом месте, помогите решить пожалуйста:
Когда отваливается модбас устройство в подсети мкона (одно из слэйв rs485) у меня в переменных сохраняется последнее значение. Но при этом я для modbus tcp slave мкона в разделе канал modbus (это там где задаётся сдвиг и длинна регистра) в графе обработка ошибок выбираю "обработка ошибок- установить в ноль".
В моем представлении при отвале термодатчиков, будет ошибка по таймауту, соответственно переменные которые соответствуют этой температуре должны обнулиться. По факту этого не происходит. На стенде собрал -- остаётся последнее значение.
Что делать?

Евгений Кислов
19.03.2025, 18:22
Добрый день.

Но при этом я для modbus tcp slave мкона в разделе канал modbus (это там где задаётся сдвиг и длинна регистра) в графе обработка ошибок выбираю "обработка ошибок- установить в ноль".

В случае обмена с МКОН - каналы должны настраиваться не в modbus tcp slave, а во вложенных в него Modbus Slave Com Port.
См. второй скриншот в этом посте:
https://owen.ru/forum/showthread.php?t=28167&p=338820&viewfull=1#post338820

Но, вероятно, это не решит вашу проблему, потому что вы столкнетесь с другим багом CODESYS.
В целом, вы можете организовать обнуление переменных самостоятельно, ориентируясь на флаг ошибки обмена со слэйвом (<имя_слэйва_в_дереве_проекта>.xError).

Gi0
19.03.2025, 19:28
Евгений Кислов, спасибо за ответ. Естественно каждый датчик Это Modbus Slave Com Port со своим уникальным адресом слэйва(=адрес модбас rs485), настройку канала там и производил. А в чем баг? Сейчас попробую вариант с обработкой (<имя_слэйва_в_дереве_проекта>.xError). Просто это будет очень не удобно, тк каждому датчики придётся прописывать алгоритм if, датчиков много и на каждом до 27 точек термоконтроля...и мконов у меня к сожалению не один.

Евгений Кислов
19.03.2025, 20:02
А в чем баг?

В том, что опция "Обработка ошибок - установить в ноль" не работает корректно в случае настройки опроса через шлюз Modbus TCP/RTU.

Gi0
20.03.2025, 17:43
В том, что опция "Обработка ошибок - установить в ноль" не работает корректно в случае настройки опроса через шлюз Modbus TCP/RTU.

Это не работает только в случае Modbus TCP? Будет ли это работать для встроенного RS485 Modbus RTU(тот что порт 4).
Вроде все переписал с учётом контроля ошибок, работает вродебы )) Спасибо за помощь!

Евгений Кислов
20.03.2025, 18:32
Это не работает только в случае Modbus TCP? Будет ли это работать для встроенного RS485 Modbus RTU(тот что порт 4).
Вроде все переписал с учётом контроля ошибок, работает вродебы )) Спасибо за помощь!

Да, с Modbus RTU эта опция работает корректно.
Она и с Modbus TCP работает корректно, если опрос идет "напрямую", без шлюзов.
Баг проявляется именно при опросе через шлюз.