Проблема с HMI


Задумка - при отсутствии связи с устройством выводить на панель вместо значения “—” и раскрашивать в красный.
Штатных средств я так понял нет, поэтому костыль через вирт. Один контрол значение и второй статус ошибки. Но вот незадача. Значение передается, а контрол с ошибкой нет. Либо “Стиль оформления” не обрабатывается. Тут получается, что элемент сразу двумя контролами рулится.
В “Стиль оформления” пробовал и
(val) ? ‘;fill: green’ : ‘;fill: red’
(val == true) ? ‘;fill: green’ : ‘;fill: red’
(val == 1) ? ‘;fill: green’ : ‘;fill: red’
и даже потом этот контрол в текст сделал. Результат один - правило раскрасски не срабатывает.

add: “Видимость” на топик ошибки срабатывает нормально

add2: В конструкции (val == 0) ? ‘fill: red; stroke:red; fill-opacity:50%; stroke-opacity:0’ : ‘’
срабатывает всё, кроме цвета. И пунктирная обводка срабатывает. Но тоже не реагирует на цвет.

Глобально я забил. Ставлю прозрачность 50% - мне достаточно.
Если интересно разобраться с цветом, а у Вас не воспроизведется - доступ кажется все еще открыт.
Уточнение. Но, что создавалось текстом - не меняет цвет. То, что пиктограммки из svg библиотек - меняет.

Добрый день. Попробую воспроизвести, но скорее в понедельник.

Ангарский.7z (8,0 КБ)
На всякий случай моя svg
HMI_Home.7z (734 байта)
На всякий случай как я создаю вирт для svg панели

приложен диагностический архив, доступен только сотрудникам поддержки
(3,0 МБ)
И это на всякий случай

Добрый день.

Хоть и старая тема, но я немного поисследовал это дело и вот что у меня получилось.
Когда мы создаём SVG, если его открыть через блокнот то мы увидим что у нас есть жесткая привязка по цвету fill, её надо убрать:


Затем уже да через виртуальный костыль настраиваем нашу панель

Сделал на люксах там нагляднее меняются параметры.
Сам костыль собственно:

var deviceName = "virt_lux";
var timeoutMs = 5000;   // 5 секунд без обновлений = потеря связи
var luxTimer = null;

defineVirtualDevice(deviceName, {
    title: {
        "en": "Virtual Lux",
        "ru": "Виртуальный люкс"
    },
    cells: {
        LUX_Value: {
            title: {
                "en": "LUX Value",
                "ru": "Освещенность"
            },
            type: "value",
            value: 0
        },
        Connection: {
            title: {
                "en": "Connection",
                "ru": "Связь"
            },
            type: "switch",
            value: false
        }
    }
});
defineRule("update_lux_value", {
    whenChanged: "wb-ms_89/Illuminance",   // укажите реальное имя устройства
    then: function (newValue) {

        if (newValue !== undefined && newValue !== null) {

            dev[deviceName + "/LUX_Value"] = newValue;
            dev[deviceName + "/Connection"] = true;

            if (luxTimer) {
                clearTimeout(luxTimer);
            }

            luxTimer = setTimeout(function () {
                dev[deviceName + "/Connection"] = false;
            }, timeoutMs);
        }
    }
});

ну поигрался фонариком перед датчиком, выдернул/воткнул питание WB-MS, работает, пользуйтесь:
bandicam 2026-02-11 16-05-45-689

Спасибо. Такое решение уже было найдено ранее.

Но я думаю, что было бы правильнее (или лучше, не знаю какое слово подобрать), если бы свойства, указанные в настройках привязки имели бы приоритет над настройками в файле. Иначе при внесении изменений в svg файл приходится его по новой редактировать и вытирать fill. Когда текстовых полей много - это проблема.

А это уже как раз нам на подумать в отдел софта.
Напишу в книгу пожеланий.
Если вопросов более нет, предлагаю тему закрыть что бы не висела, если что то придумаем (улучшим) по данному вопросу обязательно оповестим.

1 лайк

Я к этому и склоняю :slight_smile: