Как теплотехник в 50 лет стер границу между КИПиА и IT: пишем универсальный Android‑SCADA движок на Flutter

—

от автора

Привет, Хабр! Мне 50 лет, я инженер‑теплотехник с многолетним стажем. Работаю в компании которая занимается производством блочных тепловых пунктов. Моя повседневная работа — это проектирование разделов АТМ в AutoCAD,и программирование реле ПР200 от «Овен» в связке с панелями EKF для наших шкафов управления.

В какой‑то момент я поймал жесткий профессиональный кризис. Когда ты закрываешь объекты один за другим, а алгоритмы автоматизации превращаются в конвейер, мозг начинает выгорать. Мне наскучило писать одни и те же блоки логики и рисовать типовые экраны на панелях. Захотелось амбициозной, сложной задачи, которая заставит извилины шевелиться, и даст то самое забытое чувство: «Я смог это сделать!».

Я не профессиональный программист, но я умею ставить задачи. Объединив свой опыт в КИПиА с возможностями современных нейросетей, я в одиночку разработал универсальное для наших шкафов управления мобильное приложение на Flutter/Dart, которое может подключаться к ПР200 или любому другому Modbus устройству тремя различными способами. И после подключения на экране смартфона вы получаете своего рода мини SCADA систему для настройки, контроля и управления контроллером в шкафу.

Ниже я подробно расскажу об архитектуре этого решения, и почему ИИ — это лучший «цифровой джун» для опытного инженера.

Идея: Почему именно такое приложение я решил сделать?

  • Удобство настройки: У нас есть шкафы управления без панели просто на ПР200 с его двухстрочным дисплеем. Настраивать систему через меню двухстрочного дисплея самому такое себе удовольствие. А если это делают люди по твоей инструкции еще «большее удовольствие». Хотелось удобства сматфорна для этих целей.

  • Удобство наладки: Бывает проводишь наладку один и нужно одновременно и у шкафа быть чтобы дисплей был виден и лампочки на дверце шкафа и возле реле стоять чтобы посмотреть как оно срабатывает. Сматфон в руке подключенный по wifi к шкафу решает эту проблему.

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

Архитектура системы: Проект «JSON‑Конструктор»

Приложение написано на Flutter (Dart). Это позволило получить быструю кроссплатформенную систему, которая одинаково плавно работает на любом Android‑смартфоне или планшете, а также с небольшими доработками на экране ноубука с Windows.

1. Сердце системы — динамический парсер JSON

Интерфейс приложения не зашит в код жестко. При старте приложение считывает JSON‑конфигурацию объекта. В этом файле описана вся структура автоматики:

  • Количество технологических систем (например: Система отопления 1, ГВС, Подпитка).

  • Список контролируемых параметров (температура подачи, обратки, давление, состояние насосов).

  • Адреса регистров Modbus для каждой переменной.

  • Типы данных и аварийные границы (уставки).

Изучив этот файл, Flutter на лету генерирует экраны, элементы управления, переключатели реле и поля вывода датчиков. Нужен новый объект? Я просто меняю текстовый JSON‑файл, не пересобирая само приложение. Для каждого обьекта создается только JSON‑файл конфигурации. Для него планировал красивый QR код с логотипом компании. Клиент скачивает приложение также по QR коду, получает QR код своего конфигурационного файла и у него приложение с нужным ему меню. Кроме этого приложение позволяет сохранять у себя любое количество конфигураций и переключая их одним нажатием пальца ты получаешь приложение для совершенно другого теплового пункта со своими системами и параметрами.

2. Три контура связи (Три мира в одном флаконе)

Это была самая сложная инженерная задача, которую мы решали в связке с ИИ. Приложение должно уметь подключаться к ПР200 в любых условиях. Я реализовал три независимых транспортных протокола:

  • Контур 1: «Полевой хардкор» (Modbus RTU через USB‑OTG).
    Приезжаем на объект, интернета нет, Wi‑Fi модуль конвертер для ПР 200 пожадничали. Втыкаем кабель USB‑OTG в смартфон, вторым концом через преобразователь интерфейсов (RS-485/USB) подключаемся напрямую к ПР200 или даже напрямую через usb на передней панели ПР200. Если адрес в сети Modbus равен 16 то этот usb порт для программирования ПР200 отлично работает по Modbus RTU. Приложение берет на себя роль Master‑устройства в сети и опрашивает регистры напрямую по проводу.

  • Контур 2: «Локальный комфорт» (Modbus TCP по Wi‑Fi).Если на объекте или в щите автоматики установлен Wi‑Fi шлюз, приложение подключается к локальной беспроводной сети, которую создает либо сам шлюз в режиме точки доступа или через местный роутер и гоняет Modbus‑пакеты по TCP/IP. Можно настраивать, проверять все не находясь прямо у шкафа управления. Очень удобно в случаях когда нужно и на оборудование смотреть и на шкаф.

  • Контур 3: «Глобальный контроль» (HTTP REST API к OwenCloud). Помимо локального подключения хотелось еще чтобы приложение могло подключаться удаленно. Решение на поверхности было использовать облако от «Овен», тем более что в бесплатном тарифе позволяет подключать неограниченное количество устройств и смотреть их параметры в текущем режиме и в архивном.Приложение переключается в режим запросов к облаку ОВЕН. Оно стучится по API, забирает нужные JSON‑пакеты с серверов и раскладывает данные по тем же самым экранам. Кроме этого раз на облаке есть архивы то добавил фукнцию в этом подключении загружать таблицы выбранных параметров и сохранять их в csv файлы

3. Итоговая структура

В итоге у приложения получись следующая структура:

  • Главный экран: на нем располагаются основные системы, считанные из файла конфигурации, кнопка перехода к трендам, историческим данным для подключения через облако, к экрану выбора типа подключения, установки PIN кода, экран создания отчета параметров в pdf на момент его создания. Сохраняются все параметры ИТП в один файл.

  • Экран системы: на нем располагаются подсистемы датчики, реле, насосы, параметры, клапан, аварии, включение‑отключение системы. Здесь все датчики, реле. насосы, параметры разбросаны по своим экранам.

  • Экран подсистемы: например датчики здесь собраны все датчики системы.

  • Также имеется экран логов чтобы можно поддерживать приложение на предмет сбоев и ошибок.

Как это делалось в тандеме с ИИ (Промт‑инжиниринг)

Давайте честно: я конечно честно выучил базовый Dart, но если бы я стал разбираться в асинхронности, потоках (Streams) и низкоуровневой работе с USB‑портами Android с нуля, я бы писал это приложение три года а может и не написал бы никогда.

Я использовал ИИ как высокопроизводительного цифрового подмастерье. Моя роль была чисто архитектурной:

  1. Я проектировал структуры данных (как именно должен выглядеть JSON, чтобы описать тепловой пункт).

  2. Я объяснял ИИ физику процесса и логику Modbus: «Сейчас мы пишем функцию, которая должна отправить запрос 0×03, считать 2 регистра, склеить их в Float и положить в переменную датчика давления».

  3. ИИ генерировал чистый код на Dart, подбирал библиотеки для графиков и работы с последовательным портом через USB.

Я тестировал этот код на реальном тестовом шкафу у себя дом. Если код выдавал ошибку (например, при парсинге сложных JSON‑массивов или сбоях тайм‑аута Modbus‑сети), я не лез в дебри документации Flutter. Я возвращал ошибку нейросети, описывал контекст, и мы вместе докручивали алгоритм до идеала.

Главный инсайт: ИИ дает инженеру суперсилу — убирает барьер незнания языков программирования.

Выводы и что это мне дало

Кризис отступил. Я сделал то что хотел сделать еще много лет назад но не имея у себя такого помощника как ИИ не мог этого себе позволить. Это было последнее что я хотел сделать в рамках области ИТП. Я в ней попробовал все. Подбирал и рассчитывал оборудование, запускал ИТП в сфере ЖКХ и производств, включая его паровые варианты. Потом 10 лет руководил сборкой блочных ИТП на заводе, потом освоив Сименс, Карел, Овен программировал их ПЛК для шкафов управленя ИТП, потом делал проекты АТМ самих этих шкафов. Потом делал небольшие локальные диспетчеризации ИТП и вот последнее что мне хотелось сделать написать свою универсальную мини SCADA и ИИ помог мне в этом.

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

Не бойтесь технологий и не думайте, что в 50 лет поздно заходить в софт. ИИ сейчас дает нам, опытным технарям, уникальный шанс — превратить наши знания в крутые цифровые продукты.

Буду рад ответить на вопросы по архитектуре JSON‑парсера и реализации Modbus RTУ через USB в комментариях! Также прилагаю несколько фотографий скриншотов приложения.

Скрытый текст

ссылка на оригинал статьи https://habr.com/ru/articles/1088248/