Вход

Просмотр полной версии : ПР102+ИПП120+другие устройства ModBUS



DrDV
29.02.2024, 16:18
Добрый день, коллеги!
Нужна Ваша помощь в диагностике проблемы передачи данных между устройствами ModBUS.
Теперь к сути. Есть проект с четырьмя устройствами: ПР102 (слейв) + ИПП-120 (мастер) + пара датчиков загазованности СО и С3Н8 (слейвы).
Мастер ведет опрос датчиков и получает данные от ПР102, выводит информацию о работе установки на свой экран. При этом вся основная программа (логика) крутится на ПР102, в т.ч. управление внешними устройствами/исполнителями. Так же вывод/включение ламп индикации на панели управления осуществляется тем же ПР102. Датчики передают сведения о своем состоянии (исправность, уровни срабатывания) через битовую маску, а уровень загазованности уже через переменную с плавающей запятой. Так вот в чем проблема - ИПП-120 получает от датчиков, через две битовые функции, сведения об их текущем состоянии и запаковывает эти данные в битовую маску для ПР102. Данные эти меняются в зависимости от текущего состояния каждого датчика. Тут все хорошо. ПР102 получает эти данные, но, по какой-то причине, присваивает полученные значения не всем своим булевым переменным, только четырем из шести. В процессе онлайн отладки видно, что размер переменной уходит от ИПП-120 такой же, каким его получает ПР102. Двум из шести булевым переменным ПР102 не присваивает значения вообще - даже не появляется окошко с размером переменной.
Друзья, я уже и программу переустанавливал, и заново создавал и подключал переменные и функции битовые - не помогло. Может кто-то из Вас сталкивался с такой проблемой? Куда копать?

1exan
29.02.2024, 16:48
Куда копать?

Сюда ---------

74004

DrDV
29.02.2024, 16:52
Сюда ---------

74004

Стыдно-то как стало... :(
Спасибо.

Теперь появилась другая задачка. Как можно реализовать контроль связи с датчиками при условии, что они передают в сеть только две переменные? Одна вещественная, вторая битовая маска.

In_Da_Cher_A
29.02.2024, 17:07
Как можно реализовать контроль связи с датчиками
а вот это

через переменную с плавающей запятой.через скорость изменения?

DrDV
29.02.2024, 17:10
а вот это
через скорость изменения?

Тут проблема в том, что уровень загазованности может быть ниже предела чувствительности датчика. Т.е. в течение длительного времени переменная может вообще быть равна нулю.

DrDV
29.02.2024, 17:13
Кажется я уже догадался как это можно сделать: ввести еще одну булевую переменную и привязать ее к окну "статус" настроек подключения. По истечению N-ого количества попыток опроса, переменная сменит свое состояние. Вот и триггер... Если верить справке OwenLogic.

DrDV
29.02.2024, 17:20
Кажется я уже догадался как это можно сделать: ввести еще одну булевую переменную и привязать ее к окну "статус" настроек подключения. По истечению N-ого количества попыток опроса, переменная сменит свое состояние. Вот и триггер... Если верить справке OwenLogic.

Да, именно так сработало.

1exan
29.02.2024, 17:32
Да, именно так сработало.

Наверно ещё на ПР желательно контролировать, что ИПП на связи (через какой-нибудь heartbeat)

DrDV
29.02.2024, 19:14
Наверно ещё на ПР желательно контролировать, что ИПП на связи (через какой-нибудь heartbeat)

Это было сделано с самого начала. Я не знал как поступить с датчиками загазованности, к микроПО которых я не имею отношения. Функционал датчиков, которые мы применяем, широк, но для редактиоования пользователям доступно не особо много

Dimensy
29.02.2024, 19:18
Вот так можно контролировать слейвом обрыв связи https://www.youtube.com/watch?v=-gjHoICH55c&t=2s

DrDV
29.02.2024, 19:27
Вот так можно контролировать слейвом обрыв связи https://www.youtube.com/watch?v=-gjHoICH55c&t=2s

Именно так и было сделано