Стартовая страница › Форумы › Понять, как работает ПО › MQTT meta/error
Помечено: meta/error, MQTT
- В этой теме 5 ответов, 2 участника, последнее обновление 4 дня, 17 часов назад сделано Mikhail.
-
АвторСообщения
-
29.11.2024 в 17:57 #35908astahovsvУчастник
Подключил к скаде контроллер WirenBoard, для добавления топиков использовал библиотеку ExtWirenBoard. Она добавила к каждому топику, ещё чтение /meta/error.
Когда появляется проблема с топиком (появляется значение в /meta/error), я вижу в скаде сообщения и данные канала становятся серыми. Но когда проблема исчезает (пропадает значение в /meta/error). Скада продолжает показывать что в канале ошибка!
Коммуникатор продолжает показывать что он считывает значение из /meta/error, хотя значения там никакого нет и самого /meta/error тоже нет (проверял с помощью mosquitto_sub на контроллере).
В чем проблема?29.11.2024 в 19:38 #35909astahovsvУчастникТакое ощущение что коммуникатор не обрабатывает пустые значения, если значение в /meta/error — есть, я его вижу в системе. Но стоит удалить значение из /meta/error — коммуникатор молчит, показывает старое значение.
02.12.2024 в 12:39 #35930MikhailМодераторТакое ощущение что коммуникатор не обрабатывает пустые значения
Возможно, так и есть. Сделайте, пожалуйста, скриншоты настроек, полученных Коммуникатором данных, значений каналов.
02.12.2024 в 12:40 #35931MikhailМодераторНужны скриншоты, демонстрирующие наличие ошибки и её отсутствие.
02.12.2024 в 15:08 #35943astahovsvУчастникДля тестирования я создал виртуальное устройство на WB, которое у другого виртуального устройства устанавливало или удаляло флаг ошибки.
defineVirtualDevice('test-device', { title: "test-device", cells: { enableError: { title: "Enable Error", type: "switch", value: false, }, } }); defineRule('test-device:m52i', { whenChanged: 'test-device/enableError', then: function (newValue) { if (newValue) { dev['dev-z7sa/k8a3#error'] = 'r'; } else { dev['dev-z7sa/k8a3#error'] = ''; } } });
Дополнительно проверял значение ч/з mosquitto_sub
mosquitto_sub -v -t "/devices/dev-z7sa/controls/k8a3/meta/error"
Для преобразования строки в число на коммутаторе используется скрипт:
if (payload) { if (payload === 'r') { setValue(0, 1); // read error } else if (payload === 'w') { setValue(0, 2); // write error } else if (payload === 'p') { setValue(0, 3); // read period miss } else { setValue(0, 4); // unknown error } } else { setValue(0, 0); // no error }
Этап 1-ый, нет ошибок:
Этап 2-ой, ошибка установлена:
/devices/dev-z7sa/controls/k8a3/meta/error r
Этап 3-ий, ошибка удалена:
/devices/dev-z7sa/controls/k8a3/meta/error (null)
Этап 4-ый, перезагрузка scadacomm6.service
03.12.2024 в 13:18 #35990MikhailМодераторЕсли я правильно понял, то не срабатывает «Этап 3-ий, ошибка удалена».
По идее должен выполниться скрипт wb_error.js, который установит тег Коммуникатора в значение 0.Проверьте, пожалуйста, по журналу линии связи, выполняется ли скрипт в случае отсутствия ошибки. Он должен записать в журнал «Get Wiren Board error from topic:».
Для удобства в js скрипт можно добавить дополнительный вывод в журнал с помощью функции log(«…»);- Этот ответ был изменен 4 дня, 17 часов назад от Mikhail.
-
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.