
ЦИПР — это главная площадка страны, где встречаются вендоры, интеграторы и заказчики. Мы решили показать, что Открытая АСУТП — это не просто концепция, а работающий инструмент, который можно взять и внедрить уже сегодня. Мы привезли стенд, который демонстрирует полный производственный цикл: от разработки модели управления и компьютерного зрения на контроллере до выдачи производственных заданий через MES и их отработки на реальном оборудовании. И всё это — на отечественных и open-source компонентах.
Зачем всё это бизнесу? Прежде чем перейти к описанию нашего стенда, давайте ответим на главный вопрос: какую бизнес-ценность представляют наши решения, реализованные на стенде? Для металлургической отрасли и промышленности в целом это — не просто демонстрация интеграции MES c АСУТП. Это — модель импортозамещения, которая решает три ключевые задачи:
-
Снижение зависимости от конкретного поставщика. Открытый ПЛК можно запустить на оборудовании разных производителей без переписывания кода. Это даёт свободу выбора поставщика решения.
-
Интеграция отечественных MES и АСУТП в единый контур позволяет управлять заданием производству и получать обратную связь по факту выполнения.
-
Использование современных отечественных решений и собственных разработок, снижающих затраты на совокупную стоимость владения.
Главный вывод для бизнеса: вы можете построить уже сегодня систему, использующую отечественные компоненты.
Перейдем к описанию стенда.
Ключевые компоненты стенда:
-
ПЛК Forge Logic — открытая платформа промышленного контроллера.
-
MES‑уровень — производственные задания.
-
OpenFB — среда исполнения на Python с открытым исходным кодом совместимая с IDE Forge Logic.
-
Python + OpenCV — компьютерное зрение.
-
Робот — разработанный преподавателями и студентами МАИ.
-
OPC UA/MQTT — интеграция между компонентами стенда.
-
FUXA — визуализация/HMI стенда FUXA (open source веб‑платформа).
ПЛК Forge Logic: уровень управления стендом
Для нас не стоял вопрос, на чём реализовать логику управления стендом. Мы использовали собственные решения — программный ПЛК и среду разработки. В качестве аппаратной платформы в этот раз пы использовали ПЛК АБАК, который управлял модулем ввода/вывода ОВЕН МК210-311 по протоколу Modbus TCP. Мы уже можем выбирать производителя, потому что наш программный ПЛК работает на различных архитектурах (x86-64, arm64) и разных аппаратных платформах (МЗТА, ОВЕН, АТБ, АБАК и другие). Вопросы интеграции не стояли остро — наш ПЛК имеет различные плагины протоколов. Для связи с MES мы выбрали плагин MQTT, для визуализации/HMI — плагин OPC UA Server.
MES-уровень: производственные задания на стенде
Мы показали на стенде совместную работу различных компонентов и программных продуктов, разрабатываемых командой «Северсталь-инфокома»: как коммерческого (система MES «Металлургия»), так и свободно распространяемых (открытый программный ПЛК и среда разработки).
Как выглядела интеграция продуктов на стенде:
-
Оператор создаёт производственное задание: «Отгрузить 50 кубиков красного цвета».
-
MES‑система через MQTT передаёт задание на контроллер.
-
ПЛК запускает программу управления: включает дозатор в бункере, включает конвейеры, система распознавания готова искать в отгружаемых кубиках красного цвета бракованные кубики белого цвета, робот готов их удалять с конвейера.
По завершении задания контроллер отправляет отчёт в MES и далее при закрытии заказа идёт фиксация: сколько сделано. Если был брак, то в каком объёме, время выполнения.
На экране у пользователя этот процесс выглядел вот так.
Computer Vision Python + OpenCV — распознавание кубиков различных цветов на конвейере в реальном времени.
Стек:
-
Язык: Python 3.
-
Библиотека: OpenCV, rknpu, shared_memory_dict.
-
Аппаратная платформа: Одноплатный компьютер OrangePi 5 (rockchip3588, 16 ГБ ОЗУ).
Проблемы, с которыми мы столкнулись:
1. Производительность. Хотя rockchip3588 и имеет GPU и NPU на 6 TOPS, этого оказалось не достаточно для требуемой нам производительности.
-
Решение. Снизили разрешение до 640×480. Затем провели обучение модели на своём датасете (использовали Yolov7), сконвертировали полученную модель в упрощённый для rknpu onnx-формат. А затем сконвертировали в формат rknn, оптимизированный под модель нашего CPU, и использовали квантизацию INT8. Всё это позволило добиться 20+ FPS.
2. Память. OpenCV требует много памяти и управление ей.
-
Решение. Использована shared_memory_dict. Функциональный блок (ФБ) для работы с камерой записывал полученный кадр в выделенную память, затем кадр шёл на ФБ распознавания, и затем ещё один ФБ чистил уже распознанные кадры.
3. Распознавание и подсчёт. Задача считать количество каждого класса прошедшего по конвейеру. В случае обнаружения дефектного (фильтруемого) класса, формировать сигнал для его обработки ПЛК управляющим конвейером.
-
Решение. Реализовали всё это в отдельном ФБ, который имеет следующие основные функции:
-
Загрузка модели — инициализация RKNN-модели, словаря классов и якорей (anchors).
-
Инференс — получение кадра из разделяемой памяти, предобработка (letterbox, перевод в RGB), запуск модели.
-
Постобработка — декодирование bounding boxes, фильтрация по порогу уверенности, NMS (Non-Maximum Suppression).
-
Трекинг объектов — сопоставление детекций с существующими треками по IoU, отслеживание возраста трека.
-
Подсчёт — объект засчитывается при пересечении верхней зоны выхода кадра (exit zone по высоте). Счётчики ведутся для 3 целевых классов (задаются через
TASK_CL). -
Управление задачей — при достижении целевой суммы (
TASK_NUM) задача помечается выполненной (task_done). -
Визуализация — опциональный вывод рамок и подписей на кадр для отладки.
Все необходимые настройки для управления логикой работы функциональных блоков (на языке FBD) были вынесены на входы, что позволило инженерам АСУТП быстро понять и настроить ФБ:
-
Входные параметры: порог уверенности, IoU, максимальный возраст трека, зона выхода, классы для подсчёта, фильтрующий класс, целевая сумма, сброс.
-
Выход: счётчики по каждому целевому классу, флаг наличия фильтрующего класса, флаг выполнения задачи.
4. Коммуникации. Нам нужно было передавать данные между основным ПЛК и той платформой, где работало распознавание изображения.
-
Решение. Использовали OPC UA. Реализовали OPC UA клиент, который подключался к OPC UA серверу основного ПЛК, читал и записывал нужные теги. Как вариант Б был проработан MQTT.
-
Производительность. Хотя rockchip3588 и имеет GPU и NPU на 6 TOPS, этого оказалось не достаточно для требуемой нам производительности.
-
Решение. Снизили разрешение до 640×480. Затем провели обучение модели на своём датасете (использовали Yolov7), сконвертировали полученную модель в упрощённый для rknpu onnx‑формат. А затем сконвертировали в формат rknn, оптимизированный под модель нашего CPU, и использовали квантизацию INT8. Всё это позволило добиться 20+ FPS.
-
-
Память. OpenCV требует много памяти и управления ей.
-
Решение. Использована shared_memory_dict. Функциональный блок (ФБ) для работы с камерой записывал полученный кадр в выделенную память, затем кадр шёл на ФБ распознавания, и затем ещё один ФБ чистил уже распознанные кадры.
-
-
Распознавание и подсчёт. Задача считать количество каждого класса, прошедшего по конвейеру. В случае обнаружения дефектного (фильтруемого) класса, формировать сигнал для его обработки ПЛК управляющим конвейером.
-
Решение. Реализовали всё это в отдельном ФБ, который имеет следующие основные функции:
-
Робот
Робот — научная разработка МАИ для нашего решения, представленного на ЦИПР. Программное обеспечение и плата управления осями разработаны студентами и преподавателями МАИ. В дальнейшем у нас в планах разработка необходимых функциональных блоков для управления этим роботом нашим программным ПЛК. Наш проект — это яркий пример коллаборации бизнеса и науки, показывающий, как можно решать кадровый вопрос: университеты могут готовить специалистов, владеющих актуальными технологиями на реальном оборудовании, а не на абстрактных макетах.
FUXA — визуализация стенда (open source веб-платформа)
Преимущества: возможность установки на операционные системы (Windows, Linux), а также возможность развернуть в Docker.
Для стенда выбрали установку на виртуальную машину с Linux. Всё интуитивно понятно. Разработка экранной формы для стенда с настройкой связи ПЛК<->HMI через OPC UA заняла буквально несколько часов.
Бизнес-результат
Наш стенд — это не просто демонстрация железа. Это работающая модель цифрового предприятия, где задание из MES превращается в управляющий сигнал для АСУТП. Качество контролируется компьютерным зрением, технология управляется отечественным контроллером. Брак отсеивается роботом. Результат возвращается в MES для анализа и планирования. Логику для OpenFB можно писать на Python и «оборачивать» её в функциональные блоки, совместимые со средой разработки, в которой реализовано управление технологическим процессом.
Мы продемонстрировали, что открытая АСУТП — это реальность, а не будущее. Все компоненты уже работают, и мы готовы внедрять их на реальных производствах.
Планы на будущее
1. Выпуск новых релизов открытого программного ПЛК и среды разработки.
2. Пилотные внедрения разработанных компонентов АСУТП на объектах «Северстали» уже в этом году.
А также планируется выпуск гайда про создание оптимизированных под процессоры Rockchip моделей на основе своих датасетов для тех, кто хочет повторить наш опыт и использовать в своих проектах.
Скачать дистрибутивы можно по ссылке Разработка и проектирование ПО для программного ПЛК – внедрение АСУТП
P. S. Напоминаем, что открытый программный программируемый логический контроллер (ОП ПЛК) будет иметь открытый исходный код, и мы приглашаем к совместной работе в этом проекте:
· разработчиков,
· вендоров,
· интеграторов,
· преподавателей и студентов вузов,
для написания своих библиотек и компонентов, используемых при решении практических задач. Пишите на почту open.soft.plc@severstal.com.
ссылка на оригинал статьи https://habr.com/ru/articles/1061910/