Контроллер WB 8.4, AM75Z4F3, wb-2404 stable, обновление делал буквально в конце прошедшей недели, сейчас apt update выдает, что нечего обновлять. Правда с каким-то не понятным пояснением, не знаю важно, нет:
Спойлер
apt update
Hit:1 Index of /debian bullseye InRelease
Hit:2 http://deb.wirenboard.com/wb8/bullseye stable InRelease
Get:3 Index of /debian bullseye-updates InRelease [44.1 kB]
Hit:4 https://deb.nodesource.com/node_20.x bullseye InRelease
Get:5 Index of /debian bullseye-backports InRelease [49.0 kB]
Get:6 http://debian-mirror.wirenboard.com/debian-security bullseye-security InRelease [48.4 kB]
Fetched 141 kB in 7s (20.6 kB/s)
Reading package lists… Done
Building dependency tree… Done
Reading state information… Done
All packages are up to date.
N: Skipping acquire of configured file ‘main/binary-armhf/Packages’ as repository ‘http://deb.wirenboard.com/wb8/bullseye stable InRelease’ doesn’t support architecture ‘armhf’
Конфигурация модулей в порядке установки: WBIO-DO-R10A-8, WBIO-DO-R1G-16, WBIO-DO-R1G-16, WBIO-DO-SSR-8, WBIO-DI-WD-14 (4 шт), итого все 8 модулей. RS-485 не перечисляю, дело не в них, но для справки там ещё 13 модулей.
Было два проявления проблемы в разное время:
- Не отключался цифровой выход wb-gpio/EXT4_K5 (WBIO-DO-SSR-8). Выход нагружен на обычный светодиод: один контакт реле на общий, второй на светодиод через резистор (точно не помню, но там несколько десятков кОм) к катоду, а анод светодиода на плюс 27В. Программа должна писать в него 0, а он горит. В админке в виджете, куда он выведен - якобы выключен. На деле нефига, горит светодиод. В админке я его вручную включил и выключил, при этом никакие скрипты не перезагружал, даже по ssh не заходил - стал работать согласно правилу - гаснуть, когда надо, и зажигаться. Функция у выхода простая - погаснуть на полсекунды и снова загореться по нажатию кнопки:
Спойлер
if (LightIndTimerId) clearTimeout(LightIndTimerId);
LightIndTimerId = setTimeout(function () {
LightIndTimerId = 0;
GLOBAL.DOUT.On("LightInd");
}, 500);
GLOBAL.DOUT.Off("LightInd");
Поскольку каждая запись в порт у меня логируется, то я обратил внимание, что есть вывод в лог, что он пытается его включить, то есть запись dev = true проходит, а вывода о попытке выключить нет - это означает, что dev == false ( конструкция if (dev) dev = false не срабатывает). Чтобы было понятно, приведу код функций доступа:
Спойлер
// Описываем дискретные выходы
var DOUTChannelsNames = {
…
// WB-DIO модуль 4 - 8 выходов слаботочных оптронов
"SCHVUHeater1" : "wb-gpio/EXT4_K1", // Обогреватель 1 ЩВУ
"SCHVUHeater2" : "wb-gpio/EXT4_K2", // Обогреватель 2 ЩВУ
"Ring" : "wb-gpio/EXT4_K3", // Звонок
"ModeInd" : "wb-gpio/EXT4_K4", // Индикатор "Режим"
"LightInd" : "wb-gpio/EXT4_K5", // Индикатор "Подсветка пультов"
"Rezerv4_6" : "wb-gpio/EXT4_K6", //
"WorkInd" : "wb-gpio/EXT4_K7", // Индикатор "Работа"
"AlarmInd" : "wb-gpio/EXT4_K8", // Индикатор "Неисправность"
// Системные выходы
"5V_OUT" : "wb-gpio/5V_OUT", // Питание 5 В для датчиков
};
// Описываем функции дискретных выходов
exports.DOUT = {
"Index" : function(name) {
return DOUTChannelsNames[name];
},
"Get" : function(name) {
return dev[exports.DOUT.Index(name)] ? true : false;
},
"Set" : function(name, State, nolog) {
State = State ? true : false;
if (dev[exports.DOUT.Index(name)] == State) return;
dev[exports.DOUT.Index(name)] = State ? true : false;
if (!nolog) log("Установлен в " + (State ? "1" : "0") + " \"" + name + "\": " + exports.DOUT.Index(name));
return State;
},
"On" : function(name, nolog) {
if (dev[exports.DOUT.Index(name)] == true) return;
dev[exports.DOUT.Index(name)] = true;
if (!nolog) log("Включен \"" + name + "\": " + exports.DOUT.Index(name));
},
"Off" : function(name, nolog) {
if (dev[exports.DOUT.Index(name)] == false) return;
dev[exports.DOUT.Index(name)] = false;
if (!nolog) log("Отключен \"" + name + "\": " + exports.DOUT.Index(name));
},
"Toggle" : function(name, nolog) {
var State = dev[exports.DOUT.Index(name)] ? false : true;
dev[exports.DOUT.Index(name)] = State;
if (!nolog) log("Переключен \"" + name + "\" в " + (State ? "1" : "0") + ": " + exports.DOUT.Index(name));
return State;
}
};
На этом этапе никакой другой диагностики не было.
- Не отключался цифровой выход wb-gpio/EXT4_K8. Подключение аналогично wb-gpio/EXT4_K5.
Когда вылезла эта фигня я первым делом проверил в админке раздел Топики MQTT, и там на указанном канале горело значение false, статус ok. (Естественно в соответствующем виджете, куда выведен данный канал - также состояние “Выключено”.)
Я загрузил диагностический архив.
Затем снова в самой админке перещёлкнул этот выход во включено - выключено и он погас, далее работал по программе. Снова загрузил диагностический архив.
Трудность диагностики данной проблемы заключается в том, что только сидя на месте видно как ведут себя выходы. Хотя в прошлые выходные я таких зависаний не видел. Удалённый доступ через облако и впн есть. У меня там ещё с одним выходом на другом модуле (WBIO-DO-R1G-16) какая-то проблема творится, ощущение, что он кратковременно отключался и включался несколько раз за день до перезагрузки ПЛК, но об этом будет новая тема, либо завтра, либо сильно позже, пока занимаюсь исследованием проблемы.