PDA

Просмотр полной версии : Modbus Master (By command) - требуется пояснение



Ovtia
04.03.2025, 07:09
Если в проекте организовывать Modbus Master в дереве конфигурации ПЛК, то в каждом Universal Modbus device (далее UMD) в дереве присутствует переменная "Command (0xff - Start)", которая, согласно документу https://owen.ru/uploads/467/rp_plk1hh_m02__1-ru-75044-1.34.pdf отвечает за включение/исключение из опроса соответствующего UMD. Выглядит так, что это не работает как описано.

По факту манипуляция этой переменной для подмодулей Register input module не оказывает влияния как в режиме Work mode = "By poll time", так и в режиме "By command". В режиме "By poll time" команды чтения посылаются всегда, не зависимо от состояния переменной Command, а в режиме "By command" не отправляются никогда.

Также существует подмодуль типа Register input module State в котором присутствует своя собственная переменная Command, так вот она работает так, как как описано в документации. В таком случае встает вопрос: какой смысл в переменной Command в UMD?

Прикладываю два тестовых проекта. В обоих заведено по два UMD, в первом добавлен канал Register input module State, во втором Register input module. В проекте MBMTest_poll опрос ведется в режиме "By poll time", в проекте MBMTest_command - в режиме "By command". Управление UMD пытаюсь осуществлять переменными программы PLC_PRG: mbm01_Start, mbm01_Stop, mbm02_Start и mbm02_Stop.

Тестовые проекты написаны для ПЛК160[М2], потому что он у меня есть под рукой. А вообще стоит задача, изменить проект для ПЛК150, чтобы отключать опрос некоторых UMD при некотором событии. Там заведено 18 UMD c подмодулями Register input module с количеством каналов от 1 до 16 в каждом. Правильно ли рассуждать, что на ПЛК150 это работает (не работает?) также как и на ПЛК160[М2]?

Ovtia
04.03.2025, 07:37
Там в переменную Command пишутся значения 255, 254 и 0. Это пояснение для тех кто будет смотреть/запускать приложенный код. В обоих проектах UMD с Register input module State работают как ожидалось, а с Register input module не работают.

Nikoly@
04.03.2025, 12:02
Cмысл в переменной Command в UMD в том, что если эту переменную не трогать по умолчанию (значение 0), то блок в работе и мастер его опрашивается. Если 0 изменить на 254, то блок не опрашивается мастером,
а чтобы его опять ввести в работу записываем в переменную 255.

Ovtia
04.03.2025, 12:12
Cмысл в переменной Command в UMD в том, что если эту переменную не трогать по умолчанию (значение 0), то блок в работе и мастер его опрашивается. Если 0 изменить на 254, то блок не опрашивается мастером,
а чтобы его опять ввести в работу записываем в переменную 255.

Так и написано в документации. В том то и дело что на моем ПЛК160[М2] это так не работает.

Ovtia
10.03.2025, 06:21
Печально, что молчат сотрудники Овена, ведь на форуме они часто бывают. Хоть бы ответили: правильно ли я рассуждаю насчет логики работы мастера и командной переменной. А уж разок запустить приложенный код и отписаться работает у них или нет было бы пределом мечтаний. Если не работает, то ошибка в рассуждениях/программе, а если работает, то что-то с ПЛК.

1exan
10.03.2025, 06:57
Печально, что молчат сотрудники Овена, ведь на форуме они часто бывают. Хоть бы ответили: правильно ли я рассуждаю насчет логики работы мастера и командной переменной. А уж разок запустить приложенный код и отписаться работает у них или нет было бы пределом мечтаний. Если не работает, то ошибка в рассуждениях/программе, а если работает, то что-то с ПЛК.

А зачем вы КАЖДЫЙ цикл меняете значение команды с 00 на FF?

Ovtia
10.03.2025, 08:49
А зачем вы КАЖДЫЙ цикл меняете значение команды с 00 на FF?

Это в примере MBMTest_command? Потому, что это работает в случае с Register input module State, да и в этом (https://owen.ru/forum/showthread.php?t=5611&p=271650&viewfull=1#post271650) посте у человека так работает.

Nikoly@
10.03.2025, 16:38
Под рукой есть только ПЛК110[M02]. Переменной reg15.0 вкл/выкл опрос датчика. Если reg15.0 = true, то через триггер R_opros_DU в командный канал записываю 255, чтобы мастер опрашивал данный адрес.
Если reg15.0 = false, то в командный канал записываю однократно 254 по последнему опросу этого адреса (16).
adr_modbus2 - переменная показывающая, какой адрес мастер сейчас опрашивает. 8237782376

Ovtia
11.03.2025, 04:38
Nikoly@, спасибо, что поделились решением! К сожалению Ваш код также как и мой не влияет на опрос на моем ПЛК160[М02]. По всей видимости это ошибка именно в ПЛК160!

82380

Nikoly@
11.03.2025, 11:56
А покажите PLCInfo 82394

Ovtia
12.03.2025, 04:24
Прикладываю
82403

In_Da_Cher_A
12.03.2025, 08:27
Прикладываюсорян что не по теме - но зачем закрашивать мас адрес несчастной железяки

Nikoly@
12.03.2025, 11:31
Обновитесь до последней версии https://owen.ru/forum/showthread.php?t=31023 ибо начиная с версии 1.0.7 - Поправлена работа ModBus Master в режиме Work mode = By command

Ovtia
12.03.2025, 11:48
Да, можно попробовать. Правда у меня проблема не только с "By command", но и с "By poll time". Энтузиазма не добавляет еще и то, что человека ругают за то, что он обносился в этой (https://owen.ru/forum/showthread.php?t=40689) теме прямо на этой же странице форума. :)

Nikoly@
12.03.2025, 13:06
Пробуйте постепенно с 1.0.11...1.0.12, если есть боязнь по поводу версии 1.2.42.
Первый М02 после простого ПЛК110, вообще был с прошивкой 0.3.67 и приходилось обновляться, после того как что-то не работает.

Ovtia
13.03.2025, 03:52
Спасибо за участие! Рисковать с обновлением этого ПЛК я не стану, т.к. он стоит на другом объекте и задачу того объекта выполняет без проблем. Если попадется в руки другой экземпляр с другой прошивкой или возможностью обновить попробую на нем. О результатах отпишусь!