Просмотр полной версии : Получить состояние Modbus-модулей в программе
aaaSashaMGGU
27.11.2024, 14:36
Добрый день!
Как получить состояние модуля прямо в программе:
80367
Там, где 1 - получить "False"
Там, где 2 - получить "True"
Хочу на мнемосхеме выводить квадратик с надписью "Связь в норме" зелёным цветом или "Связь потеряна" красным
Я пробовал уже кучу способов, все перечислять не буду. Скажу только, что они все работают непостоянно...
Просто интересно, как это делают нормальные люди :)
Спасибо!
Евгений Кислов
27.11.2024, 14:44
Добрый день!
Как получить состояние модуля прямо в программе:
80367
Там, где 1 - получить "False"
Там, где 2 - получить "True"
Хочу на мнемосхеме выводить квадратик с надписью "Связь в норме" зелёным цветом или "Связь потеряна" красным
Я пробовал уже кучу способов, все перечислять не буду. Скажу только, что они все работают непостоянно...
Просто интересно, как это делают нормальные люди :)
Спасибо!
Добрый день.
См. п. 4.6:
https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_Modbus_v3.2.pdf
aaaSashaMGGU
27.11.2024, 14:50
Добрый день.
См. п. 4.6:
https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_Modbus_v3.2.pdf
Изучил вдоль и поперёк. Всё не то
При реально отключенном модуле его состояние постоянно прыгает: Ошибка прыгает true-false, byModbusError прыгает UNDEFINED - RESPONSE_TIMEOUT
В итоге, приходится начинать свистопляску с таймерами на то, на это
Как на практике это сделать максимально удобно - понять не могу
Евгений Кислов
27.11.2024, 14:56
При реально отключенном модуле его состояние постоянно прыгает: Ошибка прыгает true-false, byModbusError прыгает UNDEFINED - RESPONSE_TIMEOUT
...что совершенно логично: контроллер же не знает, что "модуль реально отключен" и продолжает отправлять запросы, детектируя отсутствие ответа (RESPONSE_TIMEOUT). UNDEFINED - это состояние драйвера между запросами.
Как на практике это сделать максимально удобно - понять не могу
Для этого надо сформулировать ваши критерии наличия и отсутствия связи и критерий "максимального удобства".
aaaSashaMGGU
При реально отключенном модуле его состояние постоянно прыгает: Ошибка прыгает true-false, byModbusError прыгает UNDEFINED - RESPONSE_TIMEOUT ВОТ (Читать заголовок 6): https://cs-cs.net/technologii-testirovaniya-i-otladky-shhgitov-s-svtomatikoy-na-plk#6__modbus___ai__io
Sergey361
27.11.2024, 15:17
Timer_TON(IN := NOT(N001.xDone), PT := T#30S, Q => xAlarmConnect_N001);
aaaSashaMGGU
27.11.2024, 21:50
Timer_TON(IN := NOT(N001.xDone), PT := T#30S, Q => xAlarmConnect_N001);
Всё это очевидно и так, я и сам это понимаю
Проблемы начинаются тогда, когда модбасовская задача стоит отдельно. А задача, которая основная - пытается забирать состояния модулей
В этом случае (я писал выше) Ошибка прыгает true-false, byModbusError прыгает UNDEFINED - RESPONSE_TIMEOUT для отключенного модуля, а для подключенного модуля Ошибка НЕ прыгает, но byModbusError прыгает UNDEFINED - RESPONSE_SUCCESS
И, казалось бы, чёрт с ним, пусть скачут, таймер всё отфильтрует. Но нет. Всё это работает периодически нестабильно, показывая отвал модуля с таймером вплоть до 10 секунд. Да, знаю, что бред, но это так
Но при этом зелёненький кружок в дереве проекта всегда горит зелёным и ни разу не моргает. Вот я хотел спросить, как забрать вот прям именно его, а не изобретать весосипед из таймеров, задач с разными временами циклов и приоритетов и пр.
Вдруг кто-то уже знает ответ...
aaaSashaMGGU
27.11.2024, 21:55
aaaSashaMGGU ВОТ (Читать заголовок 6): https://cs-cs.net/technologii-testirovaniya-i-otladky-shhgitov-s-svtomatikoy-na-plk#6__modbus___ai__io
Спасибо
Уже некоторое время назад сам дошёл до двух таймеров TON - TOF и отдельного ФБ для всего этого
Просто ещё не допинал до конца времена - решил спросить, вдруг есть более адекватный способ для определения отвала: например, забрать один какой-нибудь флаг и всё
Но, видимо, не один я вспоткнулся обо всё это
Неа! Я не нашёл способа, и как раз сделал так, как написал в статье.
По любому придётся делать так, как делал я. И в разных задачах - да.
выводить квадратик с надписью "Связь в норме" зелёным цветом или "Связь потеряна" красным
разве условие Modbus_TCP_Slave.ComState <> 16#2 не удовлетворяет требованию о потере связи?
Задумкин Сергей
28.11.2024, 10:29
Я так делаю
_fbModbusError_RS(SET := refModbusSlave.xError, RESET1 := refModbusSlave.xDone);
_fbModbusErrorDelay(IN := _fbModbusError_RS.Q1, PT := T#5S);
IF _fbModbusErrorDelay.Q THEN
xPing := FALSE;
ELSE
xPing := TRUE;
END_IF
aaaSashaMGGU
28.11.2024, 10:54
разве условие Modbus_TCP_Slave.ComState <> 16#2 не удовлетворяет требованию о потере связи?
TCP-шные модули, к слову, работают в этом плане стабильно
Проблема с модулями по RS-485. С ними все проблемы
TCP-шные модули, к слову, работают в этом плане стабильно
Проблема с модулями по RS-485. С ними все проблемы
ну в проекте треугольник же не пропадает. У меня нет последовательных устройств, проверить не начем, по аналогии с ТСР есть параметр getdeviсestate.eError, возможно его надо сравнивать на равенство нулю
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot