• Часть 1: Вводная

  • Часть 2: Информативный интерфейс SCADA – вы читаете эту статью

В этой статье я хочу поделиться своим видением того, каким должен быть удобный и информативный интерфейс SCADA системы.

Все иллюстрации в статье – это скриншоты, сделанные с разработанной мной SCADA системы, которая уже несколько лет работает на объектах заказчиков. Это не фантазии на тему как должно быть и не картинки из презентации.

При разработке я опирался на известную книгу «The High Performance HMI Handbook» (Hollifield, Oliver, Nimmo, Habibi), а также на интерфейс Citect SCADA.

Введение

Интерфейс SCADA системы предназначен для контроля за состоянием и управления оборудованием объекта. Все отображаемые графические элементы, символы, пиктограммы и их цвет, должны служить только одной цели – доносить пользователю максимум информации о состоянии системы. Всё что не несёт информации, а служит только целям дизайна и другим украшательствам, должно быть отброшено т.к. вносит дополнительный шум и распыляет внимание пользователя.

Особенно нужно избегать добавления каких-либо фотореалистичных изображений объекта и оборудования. Также недопустима любая анимация или мигание, особенно при нормальной работе оборудования. Всё это вносит визуальный шум, перетягивает внимание пользователя на себя и мешает считыванию другой информации.

К сожалению, в разных отраслях есть собственные стандарты, которые жёстко регламентируют способ отображения информации и могут помешать созданию интерфейса по описываемой концепции. Например, в энергетике есть стандарт «Правила отображения технологической информации» утверждённый системным оператором единой энергетической системы, который задаёт в том числе цветовую маркировку, где красный, жёлтый и другие яркие цвета используются для индикации нормального состояния объекта.

Основная концепция

Если всё работает нормально, то ничего не должно привлекать внимание пользователя. При этом пользователь не должен тратить время и читать все цифровые или текстовые значения чтобы понять, что всё работает нормально. Это можно описать как «взгляду не за что зацепиться».

Все статичные (неизменяемые) элементы отображаются чёрным цветом, а меняющиеся со временем значения синим, зелёным или красным.

Условные обозначения

Пример – всё нормально

Если посмотреть более внимательно, то пользователь заметит:

  • Секция 2: Увлажнители выведены из работы.

  • Система: Вентилятор шкафа находится в ручном режиме управления.

Пример – всё нормально и некоторое оборудование активно

Всё оборудование, состояние которого отображается зелёным цветом, включено или находится в движении.

Первая версия интерфейса не выделяла активное оборудование зелёным цветом, всё отображалось синим. Но при внедрении системы я обнаружил, что обязательно нужно как-то выделять активное оборудование. Дело в том, что наши пользователи часто управляют оборудованием вручную, даже при наличии модуля автоматического управления климатом. И им необходимо быстро понимать, осталось ли какое-то оборудование во включенном состоянии, чтобы не забыть его отключить.

Пример – есть проблемы

  • Секция 1: Нет связи с датчиком температуры канала. Обрыв линии связи или датчик вышел из строя.

  • Секция 2:

    • Температура продукта меньше или равна заданной пользователем нижней аварийной границы.

    • Вентилятор 2 – оборудование отключено и находится в состоянии аварии. Например, сработало тепловое реле защиты электродвигателя. Возможно, двигатель заклинил, изношены подшипники и т.д.

  • Секция 3: Температура канала больше или равна заданной пользователем верхней предупредительной границы.

  • Улица (метеостанция): Датчик температуры возвращает некорректное значение. Помехи на линии связи или система самодиагностики датчика фиксирует отклонения в его работе.

Иерархическая организация экранов интерфейса

При разработке системы было решено отказаться от формирования интерфейса в виде экранов и мнемосхем со схематичным изображением помещений и оборудования объекта.

Даже похожие по назначению объекты заказчиков очень сильно различаются по структуре и составу оборудования. Например, в одном овощехранилище может быть 2 секции (помещения), а в другом 10. В каждой секции состав и количество оборудования может отличаться на порядок.

Я видел на объектах, как в других системах, нарисовав один раз изображение какого-то «усреднённого» хранилища, пытаются разместить поверх него большое количество оборудования, в итоге интерфейс превращается в бесконечный массив из картинок электродвигателей, датчиков и кнопок управления. При таком подходе, для каждого объекта надо полностью перерисовывать мнемосхему, для большинства объектов вообще нужна иерархия из экранов и мнемосхем. Но создание такого интерфейса затратный по времени (=деньгам) процесс, поэтому в реальности так никто не делает – у наших заказчиков просто нет соответствующих бюджетов.

Также наша SCADA имеет web-интерфейс, который должен автоматически адаптироваться под экраны мобильных устройств. Любые схематичные изображения или мнемосхемы невозможно автоматически масштабировать, чтобы ими было удобно пользоваться на маленьких экранах – для них придётся создавать отдельное представление интерфейса.

Поэтому решено было реализовать интерфейс из экранов с прямоугольными плитками, плитка – это представление отдельного физического объекта (здание, помещение и т.д.) или программного модуля системы (модуль автоуправления климатом, SMS оповещения, графиков и т.д.). Каждая плитка выступает в роли ссылки на описываемый объект.

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

Структура интерфейса объекта описывается в JSON файле. Сервис Web-UI при старте читает этот файл и выполняет автоматическую компоновку всех экранов и плиток.

Реализована отдельная утилита, которая позволяет удобно формировать интерфейс для каждого объекта заказчика и сохранять его в JSON файл. Этот код находится в отдельном проекте и просто служит для удобства формирования файла JSON, можно вручную всё в файле JSON описать используя любой текстовый редактор.

Пример кода на C# для формирования интерфейса
public static ModelStorage Create(API.Model model)
{
    ModelBuilderContext builderContext =
        new ModelBuilderContext(model)
            .CreateHomePage()
            .CreateWeatherPage()
            .CreateSystemPage();

    for (int sectionId = 1; sectionId <= 3; sectionId++)
    {
        builderContext
            .CreateSectionPage(sectionId)
            .CreateSectionEquipmentPage(sectionId)
            .CreateSectionSensorsPage(sectionId)
            .CreateSectionRoomSensorsPage(sectionId)
            .CreateSectionSensorsProductPage(sectionId)
            .CreateSectionClimateControlPage(sectionId);
    }

    builderContext
        .AddChartTags(
            new ChartTag(builderContext.GetTagId("Секция 1 - Датчик температуры бурта Среднее", "SensorInput"), "Секция 1"),
            new ChartTag(builderContext.GetTagId("Секция 2 - Датчик температуры бурта Среднее", "SensorInput"), "Секция 2"),
            new ChartTag(builderContext.GetTagId("Секция 3 - Датчик температуры бурта Среднее", "SensorInput"), "Секция 3"));

    return builderContext.GetModel();
}

static ModelBuilderContext CreateHomePage(this ModelBuilderContext builderContext)
{
    UIPage page = new()
    {
        Id = "home",
        ParentId = null,
        Header = "Хранилище",
        GroupBoxes = new List<UIGroupBox>()
    };

    page.GroupBoxes.Add(
        new UIGroupBox()
        {
            PageId = "weather",
            Header = "Улица",
            Items = new List<UIGroupBoxItem>()
            {
                new UIGroupBoxItem()
                {
                    Name = "T",
                    TagId = builderContext.GetTagId($"Метеостанция - Датчик температуры улицы", "SensorInput"),
                },
                new UIGroupBoxItem()
                {
                    Name = "RH",
                    TagId = builderContext.GetTagId($"Метеостанция - Датчик влажности улицы", "SensorInput"),
                },
            }
        });

    // ...

    return builderContext.AddPages(page);
}

static ModelBuilderContext CreateWeatherPage(this ModelBuilderContext builderContext)
{
    UIPage page = new()
    {
        Id = "weather",
        ParentId = "home",
        Header = "Улица",
        EquipmentItems = new List<UIEquipmentItem>()
        {
            new UIEquipmentItem()
            {
                Name = "T",
                TagGroupId = $"Метеостанция - Датчик температуры улицы",
                ComponentType = UIComponentType.Sensor
            },
            new UIEquipmentItem()
            {
                Name = "RH",
                TagGroupId = $"Метеостанция - Датчик влажности улицы",
                ComponentType = UIComponentType.Sensor
            },
        }
    };

    return builderContext.AddPages(page);
}

1. Верхний уровень – домашняя страница

Общая сводная информация о объекте. В плитках только самая важная информация о нижележащем объекте.

  • Секция 1-3 – это физические помещения хранилища.

  • Улица – уличная метеостанция.

  • Система – всё что относится к общему оборудованию. В данном случае подогрев клапанов всех секций подключен к одному реле, поэтому вынесен на эту плитку.

  • График температуры продукта – программный модуль для отображения графиков по архивным значениям.

2. Средний уровень – секция

На этом уровне в плитках отображается всё оборудование секции.

Если оборудования очень много, то можно сделать ещё один или несколько дополнительных уровней иерархии. И наоборот, если оборудования очень мало, то этого уровня может вообще не быть.

3. Нижний уровень – управление и настройка оборудования

На экранах самого нижнего уровня находятся не плитки, а уникальные компоненты для управления и настройки оборудования.

Для доступа к настройкам нужно нажать кнопку «…».

3.1 Датчики

3.2 Датчики помещения

3.3 Температура продукта

Раскрыто меню настройки у датчика среднего:

Сверху отображаются виртуальные (программные) датчики среднего и дельты с расчётными значениями на основе 6 физических датчиков температуры.

Датчик среднего значения – среднее арифметическое значений группы датчиков.
Среднее = Сумма всех значений / Количество значений

Датчик максимальной разницы значений (дельта) – среди значений группы датчиков определяется минимальное и максимальное значение, затем вычисляется модуль от разницы этих значений.
Дельта = |Максимальное значение - Минимальное значение|

Это очень важное значение. Большая дельта температур может означать:

  • Неравномерное перемешивание воздуха внутри хранилища.

  • В хранимом продукте имеются очаги гниения.

  • Промерзает стена хранилища.

3.4 Оборудование

Если представить страницу в виде таблицы со строками и колонками, то можно следующим образом описать колонки:

  1. Название.

  2. Текущее состояние.

  3. Заданное состояние (команда). Кнопка с активной командой имеет голубой фон. Если кнопки «бледные», то ручное управление заблокировано.

  4. Режим управления. Ручной – управление оборудованием осуществляется пользователем вручную, с помощью кнопок с командами. Авто – оборудование управляется автоматически программным модулем, например, модулем автоуправления климатом. Если оборудование не привязано к какому-либо модулю автоуправления, то у него нет кнопок выбора режима управления, т.е. оборудованием можно управлять только вручную.

  5. Кнопка «…» для отображения настроек оборудования.

Раскрыто меню настройки у клапана и увлажнителя 1:

3.5 Автоуправление климатом

Настройки программного модуля автоуправления климатом хранилища.

Этот модуль содержит множество настроек, поэтому у него всегда собственная плитка и отдельный экран настройки. У параметров имеется текстовое описание.

Всплывающее окно для изменения числового значения

Описание элементов окна:

У разных параметров шаг может отличаться. Например, у некоторых параметров маленький шаг = 0,1, а большой = 1, а у других маленький шаг = 1, а большой = 10.

У параметров (тегов) обычно заданы границы минимального и максимального значения, соответственно все элементы окна позволяют менять значение только в допустимом диапазоне.

Итог

Данный подход к созданию интерфейса хорошо себя зарекомендовал на объектах. Им удобно пользоваться как на сенсорном экране с диагональю 17 дюймов, так и на мобильных устройствах.

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

Принцип, когда при нормальной работе «взгляду не за что зацепиться» оказался удобным – можно не подходить близко к экрану, чтобы понять, есть какие-то проблемы в работе или нет.

Комментарии (23)


  1. Yukr
    02.03.2026 06:30

    Это, наверное, холивар, но:

    Всё что не несёт информации, а служит только целям дизайна и другим украшательствам, должно быть отброшено т.к. вносит дополнительный шум и распыляет внимание пользователя.

    Категорически не согласен. Цель дизайна в таких системах именно помогать пользователю быстро находить нужные параметры. Если для этого нужен силуэт домика(=хранилище), это лучше чем плитки. Картинка вентилятора привлекает внимание легче, чем поиск группы параметров " слева, где-то посередине окно".

    Особенно нужно избегать добавления каких-либо фотореалистичных изображений объекта и оборудования. Также недопустима любая анимация или мигание, особенно при нормальной работе оборудования.

    Анимация и мигание может как раз служить индикацией нормального состояния системы (watchdog!).

    И оператор редко пялится в экран круглосуточно.


    1. maiorovx Автор
      02.03.2026 06:30

      Действительно, тема хорошего UI холиварна, как и любого дизайна.

      Если для этого нужен силуэт домика(=хранилище), это лучше чем плитки. Картинка вентилятора привлекает внимание легче, чем поиск группы параметров " слева, где-то посередине окно".

      Возможно, при условии что кто-то будет каждый раз перерисовывать этот силуэт и картинки под конкретный объект.

      На практике, обычно если есть картинки в интерфейсе, то имеются жёсткие ограничения на состав и количество оборудования, например, поддерживается до 6 вентиляторов канала и до 8 датчиков температуры продукта.

      Более того, часто в этом случае в интерфейсе показывается даже физически отсутствующее оборудование т.к. оно захардкожено в картинках, т.е. если на объекте вместо 6 вентиляторов только 2, то отображаются 6.

      У нас нет никаких ограничений. Возможно где-то приходится чем-то жертвовать, но мы всегда очень стараемся скомпоновать удобный интерфейс под конкретный объект.

      Также на мобильных устройствах этими картинками неудобно пользоваться.

      Анимация и мигание может как раз служить индикацией нормального состояния системы (watchdog!).

      Моя концепция и подход, описанный в книге «The High Performance HMI Handbook» (Hollifield, Oliver, Nimmo, Habibi), прямо противоречит этому)))

      Примеры:

      Пропала связь со всем оборудованием (в секции 2 уважнитель 1 выведен из работы, поэтому нет рамки):

      Пропала связь сервиса UI с сервисом ядра SCADA

      Мне кажется это намного нагляднее, чем следить за какой-то анимацией, означающей нормальную работу системы.

      И оператор редко пялится в экран круглосуточно.

      Да, поэтому обычно настраиваем SMS оповещение о самых важных событиях.


      1. SpiderEkb
        02.03.2026 06:30

        Ну вообще-то, "картинка" - это несколько слоев и уровней детализации. Те же устройства не рисуются на картинке хардкодом, а накладываются в виде иконки поверх изображения.

        И да, в БД конфигурации есть привязки каждого устройства к объекту где оно расположено.

        Анимация тут не нужна. Но понимать что и где у вас расположено очень помогает.

        В обычной работе все эти цифры на экране постоянно не нужны. Нужно лишь понимать с первого взгляда - норма или нет. Ну иметь возможность посмотреть текущее состояние по конкретному устройству.


        1. maiorovx Автор
          02.03.2026 06:30

          Я думаю что мы говорим о разных порядках стоимости внедрения системы. Я о примерно 1-5 млн. руб. за всю автоматику, включая наши устройства, датчики, шкаф с электроустановочными компонентами (автоматы, контакторы, реле), но без учёта силового оборудования (вентиляторы, клапана и т.д.).

          Как дела обстоят на практике в интерфейсах с картинками в овощехранилищах, я описал в комментарии выше.

          Для технологических линий предприятий да, иногда очень хорошо всё отрисовывают, с множеством экранов для каждого технологического процесса и т.д., но там и бюджет в 10, а скорее в 100 и более раз выше.

          Но всё равно, мне ближе подход «взгляду не за что зацепиться» при нормальной работе, описанный в книге «The High Performance HMI Handbook».


          1. SpiderEkb
            02.03.2026 06:30

            Мы работали с ЖКХ, а там бюджеты...

            Когда мы начинали (1993-й, на минуточку, год), "заказчику" вообще ничего не надо было "и так все хорошо". Приходилось убеждать, пилотные версии вообще за свой счет ставили (с условием что мы потом будет обслуживать и з это уже деньги получать плюс чтобы иметь работающие объекты).

            Софт весь был наш, железо тоже наше (контроллеры - "домовые" + УСО - Устройство Сопряжения с Объектом - то, к чему, собственно, подключаются устройство). Только конечные устройства те, что стояли уже на объектах. Все протоколы связи сами писали. Разрабатывали формальную классификацию устройств для горячего подключения.

            В конечных версиях были инструменты для создания карт-подложек (из яндекса или 2ГИС), "редактор объектов" где можно было размещать устройства на карте.

            Там много чего было. В конечной версии вообще был "клиент-сервер" - микроядро, обеспечивающее работу с контроллерами и подключаемые к нему интерфейсные клиенты разного типа и назначения (для диспетчера, для администратора, для аварийных бригад, монитор разработчика, позволяющий трейсить все, что происходит в микроядре удаленно в реальном времени...)

            Все это было распределенное - УСО к домовому котроллеру по RS485 подключалось, дальше уже домовые с микроядром по UDP. Интерфейсные клиенты к микроядру по TCP подключались.

            В каком оно сейчас состоянии не знаю - в 17-м году ушел оттуда, там административные заморочки начались неприятные. Хотя был одним из немногих (4-5 человек), что был в проекте с самого начала.

            И все это силами очень небольшой команды - "координатор", один человек на разработке контроллеров, один на разработке аналоговых частей системы (блоки питания, модули ГГС - громкоговорящей связи), на софте верхнего уровня сначала я один был, потом еще один человек пришел - я занимался микроядром и парой-тройкой служебных утилит, второй человек делал интерфейсные клиенты. Ну и плюс был участок сборщиков и монтажников. Но в разработке всего 5-6 человек на все - и софт и железо.

            Но в Лифтопедии до сих пор есть :-)


  1. SpiderEkb
    02.03.2026 06:30

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

    Если у вас будет не оно хранилище, а, к примеру, 10 - все это на экран не влезет. Секция 1, секция 2 - где это? Что это вообще?

    В своей время делали систему мониторинга инженерного оборудования зданий для ЖКХ (система диспетчеризации). Там лифты, охрана служебных помещений и много чего еще. Обслуживало оно достаточно много объектов разбросанных не только в пределах одного района, но по всему городу. Были объекты, где одних лифтов было по 300-500 штук подключено.

    В основе интерфейса - карта на которой выделены обслуживаемые дома. Можно ткнуть на дом и получить его подробную схему - что где на нем расположено. Там же можно посмотреть текущее состояние любого устройства, его историю (что с ним происходило, архив событий и т.п.)

    Если на доме "что-то не так", он подсвечивается отдельно.

    Второй обязательный элемент - список аварийных сообщений куда выводятся события. Опять с полной расшифровкой на нормальном языке типа "ул. Строителей, д. 35, подъезд 2, грузовой лифт - двери шахты открыты".

    Ведется полный лог - когда, где что случилось + реакция диспетчера (когда и что было сделано) - каждое аварийное событие требует "обработки" - реакции диспетчера.

    Основы этого интерфейса закладывались еще в 93-94-м годах (мы были первыми в РФ кто начал работать в этом направлении) и получилось настолько удачно, что последующие разработки конкурентов в той или иной степени шли по тому же пути уже.

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


    1. maiorovx Автор
      02.03.2026 06:30

      Журнал событий и аварий есть, с поддержкой квитирования, просто в данном случае он в интерфейс не выведен, т.к. конкретному заказчику не нужен (настроено SMS оповещение на важные события).

      Мы ведём разработку функций только если они нужны какому-нибудь заказчику. К сожалению, нет ресурсов разрабатывать универсальную систему. Само ядро SCADA с тегами универсальное, позволяет описать всё что угодно. Но на его базе нужно создавать оборудование с тегами, логические функции для их работы, компоненты UI. Всё это создаётся когда нехватает уже реализованных компонентов.

      Карты (геоподложки) нет - пока никому из заказчиков не было нужно.

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

      Я вообще не уверен что в вашем случае с лифтами основой интерфейса должна быть карта города. И плитки наверное ненужны. Диспетчеру достаточно вывести журнал событий с квитированием, в карточке события будет адрес дома и ссылка на карту (Яндекс.Карты, 2 Гис и т.д.), в ней сразу интерфейс назначения ремонтной бригады сделать и т.д. Понятно что придётся написать отдельный модуль такого журнала для максимального удобства, но всё это возможно сделать на базе нашей системы.


  1. safer
    02.03.2026 06:30

    Было бы интересно узнать как реализован механизм восстановления потерянных данных после восстановления связи верхнего уровня со средним уровнем. У вас же опрос приборов идёт 1 раз в секунду.


    1. maiorovx Автор
      02.03.2026 06:30

      Не совсем понял, про какой верхний и средний уровень идёт речь. В статье описана иерархия уровней (экранов, окон) интерфейса пользователя (UI).

      Обычно оба сервиса (ядро SCADA и UI) запущены на одном компьютере и общаются между собой по TCP через 127.0.0.1. Ядро опрашивает все устройства обычно 1 раз в секунду и хранит в памяти все текущие значения тегов, а также пишет изменившиеся значения в архив на диск. Если соединение между сервисами прервётся, то сервис UI периодически будет пытаться переподключиться к ядру.

      Технически, каждая плитка выступает в роли ссылки и может ссылаться на любой URL где запущен сервис UI, в том числе эти сервисы UI могут быть подключены к своему ядру SCADA. Т.е. за плитками верхней (домашней) страницы может скрываться множество отдельных компьютеров со своими сервисами ядра и UI на разных объектах заказчиков, но обычно все плитки, по которым можно прокликать - это всё таки один объект заказчика (например, овощехранилище, состоящее из нескольких расположенных рядом складов-секций).

      Архитектура системы (подробнее https://habr.com/ru/articles/1001024/):


      1. safer
        02.03.2026 06:30

        Основные уровни в системе автоматизации (сверху вниз):

        1. Верхний уровень (Уровень SCADA/HMI/Диспетчерский):

          Функции: Визуализация процессов (мнемосхемы, графики, тренды), диспетчерское управление, архивирование данных, формирование отчетов аварийная сигнализация.

          Компоненты: Рабочие станции операторов (HMI), серверы SCADA, HISTORIAN-серверы.

        2. Средний уровень (Уровень управления / Контроллерный):

          Функции: Логическое управлениевыполнение алгоритмов регулирования (ПЛК-программы), сбор данных от полевых устройств.

          Компоненты: Программируемые логические контроллеры (ПЛК/PLC), распределенные системы управления (РСУ/DCS), удаленные терминалы (RTU).

        3. Нижний уровень (Полевой уровень / Уровень оборудования):

          Функции: Непосредственное взаимодействие с техпроцессом: измерение параметров и исполнение команд.

          Компоненты: Датчики (сенсоры)исполнительные механизмы (приводы, клапаны, двигатели).


        1. maiorovx Автор
          02.03.2026 06:30

          Теперь понял про что вы. У меня просто в статье есть главы "1. Верхний уровень – домашняя страница" и "2. Средний уровень – секция".

          Тогда верхний и средний уровни из вашего перечня реализованы в сервисе ядра SCADA и сервисе UI (HMI).

          Ядро напрямую общается с устройствами к которым подключены реле и датчики. У плат управления реле есть конфигурируемая настройка, что делать при пропаже связи с ядром, т.е. если ядро их не опрашивает, то что нужно им делать: ничего или всё отключить.


          1. safer
            02.03.2026 06:30

            Можно пойти дальше - убрать Raspberry Pi и попытаться впихнуть всё в роутер :)


  1. safer
    02.03.2026 06:30

    что-то напомнило вот это:

    1970 г.
    1970 г.


    1. Jakob73
      02.03.2026 06:30

      Прям как на работе


    1. SpiderEkb
      02.03.2026 06:30

      БЩУ :-)


  1. Siemargl
    02.03.2026 06:30

    А где, собственно, интерфейс?


  1. babysas
    02.03.2026 06:30

    Решение подобных задач это круто.

    Но как интерфейс это очень плохо, прежде всего тем, что очень большая когнитивная нагрузках в попытках считать:

    • из-за отсутсвия вёрстки, хотя бы банального выравнивания элементов цифр, независимость его от -/+ значений

    • красные рамки частично прилипают к именованиям объектов, отчего те не читаемы до конца

    • плохо просматривается или отсутствует иерархия объектов и их значений

    • на примере со слайдером не понятен ни шаг, ни границы значений

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

    Средней руки дизайнер, пожелавший вникнуть в проблему способен очень сильно улучшить функциональность вашего продукта.

    Даже чисто текстовыми средствами достигнуть можно шикарнейших результатов.


    1. maiorovx Автор
      02.03.2026 06:30

      Согласен, очень много чего не доделано и есть много что можно улучшить, особенно в части интерфейса.

      Основной упор при разработке системы был сделан на ядро системы и оптимальный алгоритм автоуправления климатом (3 раза практически заново переписывался). Но повторю, все доработки только за счёт новых заказов, а с этим в последнее время проблемы. Также вся разработка ведётся одним человеком в свободное от основной работы время.


      1. babysas
        02.03.2026 06:30

        Исследование пользовательского опыта часть моей работы. В специфических проектах, когда точка 0 - не было автоматизации, точка 1 - есть автоматизация, мало кто пиняет на интерфейс :)
        Не мне вам рассказывать скриптики "для себя" обходятся вовсе без него годами.

        Делать сразу чуть лучше и учитывать базовое помогает насмотренность и прочесть что-то по проектированию интерфейсов - условно "как не надо делать" уже даёт хорошее понимание.

        Есть базовые вещи:

        • вёрстка табличных данных

        • иерархия объектов

        • групировка объектов

        • цветовое кодирование и подсветка

        • как наш взгляд сканирует интерфейсы

        К сожалению прям конкретные материалы не вспоминаются. Если вспомню - напишу.


      1. sergej_pipets
        02.03.2026 06:30

        Климатом SCADA не должна управлять. Это всего лишь интерфейс между хуманом и управляющими контроллерами. Управлять, регулировать должны местные контроллеры. И они уже выдавать текущие параметры в СКАДу. Ваша система без SCADA неработоспособна.


        1. maiorovx Автор
          02.03.2026 06:30

          У нас в SCADA реализованы все алгоритмы управления оборудованием и сбора данных с датчиков. Больше на объекте нет никаких контроллеров ПЛК. Этот микрокомпьютер на базе Raspberry Pi 4 с Linux и запущенными сервисами (приложениями) ядра SCADA и Web-UI выступает в роли единственного контроллера и находится прямо на объекте, обычно прямо в шкафу с электроустановочными изделиями (контакторы, реле и т.д.), куда подключено всё силовое электрооборудование. На дверце этого шкафа ещё расположен сенсорный экран - подключен кабелем HDMI напрямую к микрокомпьютеру.

          Можете считать это одним контроллером (ПЛК), просто у которого все входы вынесены на отдельные платы и мозги которого общаются с этими платами через Ethernet (там кабель - витая пара длиной 50 сантиметров, т.е. это Ethernet внутри одного электрошкафа, все платы управления реле в нём, вынесены только датчики).

          Ядро напрямую общается с устройствами к которым подключены реле и датчики. У плат управления реле есть конфигурируемая настройка, что делать при пропаже связи с ядром, т.е. если ядро их не опрашивает, то что нужно им делать: ничего или всё отключить.

          Я сейчас специально перечитал ещё раз определение SCADA и не нашёл противоречий, почему наш софт не может называться SCADA если не общается ещё с какими-то контроллерами.


          1. sergej_pipets
            02.03.2026 06:30

            Просто у вас система мелкая. По сути - один контроллер со своим междумордием. Сколько точек данных? Сотня имеется?


            1. maiorovx Автор
              02.03.2026 06:30

              Сколько точек данных? Сотня имеется?

              Сейчас посмотрел - у хранилища на 10 секций 250 адресов (каналов) для получения и отправки данных, причём с интервалом опроса всех каждые 250 мсек (4 раза в секунду). Я кстати незнаю зачем такой частый опрос мы у заказчика сделали, похоже тестировали и зыбыли на стандартный 1 раз в секунду поменять)))

              Но это не предел - я тестировал на эмуляторе 5000 адресов, я думаю он даже на Raspberry Pi 4 без тормозов работать будет, если не хватит производительности, можно запустить нашу систему на полноценном серверном компьютере (поддерживаются операционные системы Linux и Windows). Я вам по секрету скажу, это ядро по скорости возможно превзойдёт многие DCS сервера в очень больших SCADA системах.