
В 2022 году к нашей дружной команде (я и Дмитрий @DIIV) обратился знакомый и предложил разработать систему для автоматического управления климатом овощехранилищ. Это был очень сложный период, компании уходили с Российского рынка, начались проблемы с покупкой и обслуживанием иностранных систем.
До этого у нас был опыт разработки подобных систем и устройств, который пришёлся как раз на начало пандемии COVID, что привело к проблемам с покупкой электронных компонентов.
Исходя из этого, нами было принято решение разработать собственную SCADA систему и все необходимые устройства для интеграции датчиков и управления оборудованием, чтобы иметь практически полную независимость. Учитывая опыт COVID, при проектировании устройств было решено использовать широко распространённые электронные компоненты, которые легко можно заменить на аналоги, сделать систему простой, недорогой и надёжной.
Наша система уже несколько лет успешно эксплуатируется на объектах заказчиков – это крупные овощехранилища в Свердловской и Челябинской областях. Также сейчас мы развиваем напр��вление диспетчеризации котельных.
Ищем заказчиков и партнёров для сотрудничества. Только за счёт новых заказов у нас есть возможность дальше развивать систему.
Система и устройства выпускаются под брендом «ВМК Автоматика».


Архитектура системы

Система обладает большой гибкостью. На объекте заказчика мы можем установить неограниченное количество сенсорных экранов для доступа к системе, также к системе можно подключаться с любого компьютера или мобильного устройства, находящегося как на территории объекта, так и из сети интернет. Конечно, мы также можем и запретить подключение из интернет.
Обычно микрокомпьютер с запущенной SCADA системой и сенсорным экраном устанавливаются прямо в шкафе с электрооборудованием. Можно вынести микрокомпьютер и экран в отдельный шкаф – это особенно актуально, когда для сокращения длины силовых кабелей на объекте, выгоднее разместить несколько шкафов с электрооборудованием.
На объектах, где нет необходимости в автоматическом управлении оборудованием и не требуется высокая надёжность, и для сокращения стоимости внедрения системы, на объекте можно разместить только роутер, шлюз Ethernet – RS-485 и необходимые устройства на шине. SCADA система может размещаться на нашем сервере «в облаке», к системе можно подключиться через интернет с любого устройства. Например, так мы поступаем при диспетчеризации котельных.
Есть наработки по реализации отказоустойчивости – можно установить два микрокомпьютера и на каждом запустить SCADA систему и реализовать архитектуру Master/Slave – если один микрокомпьютер выйдет из строя, то второй возьмёт на себя функции управления. Если пофантазировать, можно даже реализовать отключение питания зависшего компьютера или его перезагрузку без прерывания процесса управления оборудованием.
SCADA
Я имею большой опыт разработки SCADA систем верхнего уровня в области энергетики. Также проводил анализ имеющихся на рынке Российских и иностранных систем. Все эти системы не идеальны, их архитектура и используемые решения – это скорее историческое наследие и набор компромиссов, а не то, на что хочется равняться или копировать.
Имея большой опыт в области, всегда кажется, что ты можешь сделать лучше, чем у других. По крайней мере, своё решение точно будет удовлетворять предъявляемым требованиям и лучше подходить для конкретной области, его будет проще использовать и дорабатывать. Также при создании системы в одиночку с нуля всегда получаешь уникальный опыт, который сложно приобрести, работая в каком-то большом проекте со своей командой и историей развития.
Поэтому я спроектировал и реализовал собственную SCADA систему без использования каких-либо готовых модулей или сторонних разработок.
Систе��а написана на C#, состоит из двух основных сервисов:
Ядро (консольное приложение .NET Core, Native AOT компиляция).
Веб-интерфейс (ASP.NET Core Blazor Server).
Также есть отдельный сервис SMS информирования для отправки сообщений через GSM модем и эмулятор устройств для отладки алгоритмов управления.
Обычно все сервисы запускаются как отдельные демоны на Linux через systemd на микрокомпьютере Raspberry Pi 4.
Поддерживаются платформы Linux ARM64, Linux x64, Windows x64, система может работать как на небольших микрокомпьютерах, так и на мощных серверах.
Управлять системой можно через веб-интерфейс, обычно на объекте заказчика размещается сенсорный экран диагональю 17 дюймов (при необходимости можно разместить несколько экранов), также имеется доступ из интернет через наш прокси сервер с предварительной авторизацией пользователей. Особо подчеркну, что через интернет доступны те же самые функции, аналогичные сенсорному экрану на объекте – это один и тот же веб-интерфейс. В других системах через интернет часто доступен только урезанный функционал просмотра значений и архивов, без возможности полноценного управления системой.
SCADA система сделана универсальной, т.е. она позволяет удобно описывать любое оборудование и алгоритмы его работы. Всё классически: сначала описываются теги, затем теги группируются в оборудование, тегам и оборудованию назначаются различные функции расчётов и реакции на события (пишутся на C#), после чего для оборудования создаётся UI компонент для управления и настройки. Затем для автоматизации конкретного объекта заказчика просто компонуется список необходимого оборудования и элементов интерфейса.
Пример кода для создания модели оборудования для конкретного объекта заказчика:
static ModelBuilderContext CreateEquipments(this ModelBuilderContext builderContext) { builderContext // Оборудование типа Регулятор (клапан) .AddRegulator("Секция 1 - Клапан", relayOpenLink: new ChannelLink("1", "3E0089000250325237303620/1"), relayCloseLink: new ChannelLink("1", "3E0089000250325237303620/2"), fullOpenTimeSec: 120, // Время полного открытия можно поменять через UI autoReturnOnStart: true, periodicAutoClose: true) // Оборудование типа Вкл/Откл .AddOnOff("Подогрев клапанов", new ChannelLink("1", "3E0089000250325237303620/7")) // Оборудование типа Вкл/Откл с сигналом аварии от теплового реле .AddOnOff("Секция 1 - Канальный вентилятор 1", new ChannelLink("1", "3E0089000250325237303620/14"), new ChannelLink("1", "80004E001250335239343920/1")) // Датчики температуры и влажности .AddSensor(SensorType.Temperature, "Метеостанция - Датчик температуры улицы", new ChannelLink("2", "A1004B001250335239343920/1")) .AddSensor(SensorType.Humidity, "Метеостанция - Датчик влажности улицы", new ChannelLink("2", "A1004B001250335239343920/2")); return builderContext; }
Для связи с устройствами используются шлюзы Ethernet – RS-485 и собственный бинарный протокол. Также имеется поддержка стандартного Modbus RTU. SCADA система позволяет легко расширять список поддерживаемых протоколов с помощью разработки специальных адаптеров протокола – в ядре изначально заложена такая возможность. Есть заготовка для реализации MQTT, но пока нет заказчика, которому это было бы нужно.
На базе ядра системы уже реализовано следующее оборудование:
Универсальный датчик – позволяет подключить в систему любой физический датчик (температура, влажность, CO2 и т.д.).
Датчик с агрегирующей функцией – можно привязать любое число универсальных датчиков, по которым будет рассчитано среднее значение или максимальная разница между значениями (дельта).
Сигнал аварии или «сухой» контакт.
Исполнительное оборудование типа «Вкл/Откл» – управляет реле, реле может управлять контактором. Если имеется тепловое реле, то сигнал аварии от него можно привязать к этому оборудованию для выставления соответствующего статуса.
Групповое управление оборудованием типа «Вкл/Откл» – может управлять группой оборудования с настраиваемой задержкой. Например, можно настроить последовательное включение и отключение мощного оборудования с задержкой в 2 секунды.
Исполнительное оборудование типа «Регулятор (клапан)» – управляет двумя реле: одно открывает, а другое закрывает клапан. Вычисляет положение (% открытия) клапана исходя из заданного времени полного открытия. Можно привязать бесконтактный датчик полного закрытия клапана – тогда при невозможности за отведённое время закрыть клапан будет выдан сигнал аварии.
Модуль автоматического управления климатом хранилища – регулирует температуру и влажность в помещении и хранящегося в нём продукта с помощью клапанов (уличного воздуха), охладителей, нагревателей и увлажнителей.
Модуль SMS оповещения – реагирует на аварийные сигналы выбранного оборудования и отправляет SMS сообщения на указанные номера телефонов.
Это оборудование призвано абстрагировать разработчика логики от физического управления оборудованием. Т.е. разработчик логики просто задаёт требуемое положение клапана в %, его не волнует какими реле это будет выполняться.
Ядро системы также постоянно анализирует заданное и текущее состояние оборудования – например, если реле должно быть включено, а оно находится в отключенном состоянии, то ядро автоматически будет осуществлять повторную отправку команд на включение до тех пор, пока заданное и текущее состояния не будут равны. Т.е. если по каким-то причинам (обрыв связи, потеря питания) плата управления реле сбросит своё состояние, то оно в итоге будет восстановлено.
Интерфейс пользователя настраивается с помощью создания иерархической модели объекта заказчика. На верхнем уровне располагаются экраны с плитками, где выводится состояние наиболее значимого оборудования. На самом нижнем уровне находятся экраны для управления и настройки оборудования.
Компоновка интерфейса с помощью иерархии экранов и плиток позволяет автоматически создавать интерфейс для любых объектов заказчика т.е. описывать только оборудование и иерархию объекта, без ручного создания каждой страницы (экрана). Представление в виде плиток позволяет интерфейсу автоматически адаптироваться под разные размеры экрана.





Устройства
Разработкой устройств и прошивок занимается Дмитрий @DIIV. Это также полностью оригинальная разработка от идеи до реализации.
Проектирование печатных плат выполняется в Altium Designer, используются микроконтроллеры STM32, прошивка пишется на C.
Поддерживается удалённая перепрошивка устройств по сети RS-485.
Все устройства имеют уникальный идентификатор и логически представляют собой список каналов для чтения или записи значений.
Из необычного – для соединения устройств на шине используется витая пара и стандартные сетевые коннекторы и разъёмы RJ45. Как показала практика, это достаточно надёжное решение, которое можно быстро монтировать на объекте, главное снабдить монтажников коннекторами RJ45 со сквозными отверстиями для жил в области контактов и проконтролировать, чтобы у монтажников были клещи для обжима.
Шлюз Ethernet – RS-485
Абсолютно «прозрачный» шлюз – просто пересылает бинарный поток между средами, без какой-либо модификации передаваемых данных. Это единственное устройство, где используется готовый чип преобразования интерфейсов WCH CH9120, а не микроконтроллер STM32.
Шлюз такж�� выступает инжектором питания устройств на шине RS-485. Обычно каждый шлюз питается от собственного блока питания, обеспечивается полная гальваническая изоляция шин RS-485 друг от друга.

Плата управления реле
Может управлять 24 внешними реле. Также имеются специальные платы, которые могут размещаться под основной, на каждой такой плате распаяно по 6 реле. Итого можно собрать «стопку» из 3 плат – управляющей верхней и двух снизу. Платы скрепляются вместе с помощью игольчатых разъёмов.

Плата с «сухими» контактами
Имеет 12 входов. Обычно используется для получения сигналов состояния от другого оборудования (тепловых реле и т.д.).

Плата для подключения датчиков температуры и влажности типа SHT30
Можно подключить 2 датчика.

Плата для подключения датчиков температуры типа DS18B20
Можно подключить 6 датчиков. С датчиками DS18B20 долго мучались, пока не сделали собственную реализацию активной подтяжки. Теперь даже если линия 1-wire проложена рядом с частотными преобразователями, удаётся стабильно получать показания с датчиков даже на протяжённых линиях 100 метров.


Остальные
Плата с установленным датчиком CO2, плата для подключения датчиков скорости и направления ветра (метео��танция).
Фотографии устройств
Ревизий устройств было много, поэтому на фотографиях можно увидеть немного отличающиеся платы.




Старые устройства, разработанные до пандемии COVID
Устройства были модульными – были универсальные платы для 4 и 6 модулей стандартизованного типоразмера, некоторые модули занимали несколько посадочных мест. В зависимости от задач, на эти универсальные платы устанавливались модули датчиков, реле и т.д.
Но такой модульный подход не оправдал себя в финансовом плане – часто в одном месте нужны были 1 или 2 датчика, т.е. на универсальной плате был установлен только 1 модуль. Но также были ситуации, когда такой подход экономил место и скорость монтажа.
Для связи устройств использовалась CAN шина и несмотря на то, что все привыкли видеть эту шину в автомобилях, она предназначена для работы на дальних расстояниях 1-5 километров. Но с наступлением пандемии стало очень сложно (дорого) достать чипы STM32 с CAN – все чипы забирала автомобильная отрасль.
Для связи SCADA с устройствами использовался разработанный нами шлюз Ethernet – CAN. Также была экспериментальная плата на 6 модулей, которая напрямую подключалась к Ethernet.



Мы на выставке


