Wirenboard 7.4.4: Боковые модули. Проблемы выхода из ошибки

Wirenboard 7.4.4: Боковые модули. Проблемы выхода из ошибки подключения если они были добавлены в конфиг отключены от выключенного контроллера и подсоединены только после полной загрузки контроллера. Прошивка самая свежая, на устройстве ни чего не установлено, только выполнено обновление. Вот видео.

Добрый день!

Не рекомендую выполнять подключение и отключение боковых модулей при поданном питании – существует риск вывода из строя.
Функция горячего подключения WBIO не заявлена и после подключения модуля необходимо выполнить действия из раздела Конфигурирование.

Но как бы тут обратное I²C — Википедия

И оно работает когда контроллер уже включен. Но если выключить до включение контроллера а потом включить нет.

И еще бы было бы хорошо иметь отдельный тег на модуль в mqtt об состоянии модуля, а не как сейчас он формируется динамически и некоторые системы (мастескада 4д) не коректно с ним работают, фиксируется при отработки события, типа. Что имею ввиду иметь либо числовой статус ошибки 1,2,3,4 и т.д либо 0,1 (). Я сейчас обошел это вот так вот через правила:

/**

  • Правила мониторинга ошибок каналов EXT1_K1 и EXT2_K1
  • Создает два виртуальных устройства для отслеживания состояния ошибок
    */

// Создание виртуального устройства для мониторинга EXT1_K1
defineVirtualDevice(“wb-gpio-ext1-k1-monitor”, {
title: “GPIO EXT1_K1 Error Monitor”,
cells: {
error: {
type: “text”,
value: “”,
readonly: true
},
status: {
type: “switch”,
value: false,
readonly: true
}
}
});

// Создание виртуального устройства для мониторинга EXT2_K1
defineVirtualDevice(“wb-gpio-ext2-k1-monitor”, {
title: “GPIO EXT2_K1 Error Monitor”,
cells: {
error: {
type: “text”,
value: “”,
readonly: true
},
status: {
type: “switch”,
value: false,
readonly: true
}
}
});

// Функция для определения наличия ошибки
// Ошибка - когда значение не пустое
function hasError(errorValue) {
if (!errorValue) {
return false;
}
var trimmed = String(errorValue).trim();
return trimmed !== “”;
}

// Функция обработки ошибки
function processError(deviceName, errorValue) {
var errorText = errorValue ? String(errorValue) : “”;
var hasErr = hasError(errorText);

dev[deviceName]["error"] = errorText;
dev[deviceName]["status"] = hasErr;

log(deviceName + " error: " + errorText + ", has_error: " + hasErr);

}

// Правило для мониторинга ошибок EXT1_K1 через trackMqtt
trackMqtt(“/devices/wb-gpio/controls/EXT1_K1/meta/error”, function(message) {
// trackMqtt передает объект, извлекаем значение
var errorValue = “”;
if (message === null || message === undefined) {
errorValue = “”;
} else if (typeof message === ‘object’) {
errorValue = message.value !== undefined ? String(message.value) : “”;
} else {
errorValue = String(message);
}
processError(“wb-gpio-ext1-k1-monitor”, errorValue);
});

// Правило для мониторинга ошибок EXT2_K1 через trackMqtt
trackMqtt(“/devices/wb-gpio/controls/EXT2_K1/meta/error”, function(message) {
// trackMqtt передает объект, извлекаем значение
var errorValue = “”;
if (message === null || message === undefined) {
errorValue = “”;
} else if (typeof message === ‘object’) {
errorValue = message.value !== undefined ? String(message.value) : “”;
} else {
errorValue = String(message);
}
processError(“wb-gpio-ext2-k1-monitor”, errorValue);
});

Какую задачу вы решаете подключением модулей после перезагрузки контроллера? Для чего это нужно? Мне нужно больше информации, чтобы обрисовать проблему разработчикам.

Две. Но первая в очереди это в системе WB не сбрасывается ошибка подключения боковых модулей, внесенных в конфиг системы, при подключении их после полной загрузки ОС WB7.4. Другой момент когда мы перед подачей питания на контроллер подключаем модули имеющиеся в конфиги системы. Ждем полной загрузки ОС и тогда при отключении боковых модулей и обратного подключения оных. Ошибка боковых модулей сама сбрасывается и модули продолжают работать в штатном режиме. Другой вопрос что ошибка модулей в mqtt генерируется динамическим тегом error, а мастескада 4д не может по mqtt коректно обрабатывать данный тег. Выше я привел скрипт правило которое решает данный вопрос. Конечно можно предложить использовать шлюз opc ua но там тоже есть проблема. Мастескада 4д если загрузится раньше сервиса opc ua, будет ошибка работы сервиса wb. Одно из решей при установки мастескады 4д в поправить скрипт загрузи при старте, сделать задержку на секунд 40. Но это тоже не вариант имеются другие проблемы которые я не помню. Тоесть проблема комплексная и с разных сторон с вами через этот портал обсуждаем уже не один год

Здравствуйте!
Благодарю за описание проблемы и предложенный вариант её обхода.
Ваши замечания я записал в список предложений. Руководство ознакомится с ними и примет решение о целесообразности реализации.

Здравствуйте. Что решило руководство?

Добрый день! Узнаю, что по данной задаче и дам ответ.

Добрый день! Багрепорты, касающиеся проблемы восстановления ошибок боковых модулей должны быть исправлены в ядре 6.15.

Внесу уточнение – изменения в новом ядре будут касаться восстановления управления устройствами после ошибки в ходе работы.

Разработчики подтвердили, что описанное вами поведение является штатным и в связи с этим мы дополнили документацию, что “Модули WBIO не поддерживают горячее подключение.”

Что касается второго вопроса:

Брокер принимает сообщения от драйвера в соответствии конвенцией Wiren Board MQTT Conventions.
Если сообщения meta/error не опубликованы, то их и не должно быть в списке принятых.

Здравствуйте!

У вас остались еще вопросы?