В связи с актуальностью направления, в Московском государственном строительном университете (НИУ МГСУ) ведутся работы по цифровизации систем строительной индустрии [1–10].
В современных реалиях любой автоматизированный процесс, особенно такой сложный, как приточно-вытяжная вентиляция с рекуперацией тепла, не может обойтись без качественной системы управления. Она обеспечивает контроль, сбор информации и непосредственно управление всей установкой. Применение объектно-ориентированного подхода (парадигма, рассматривающая программу как совокупность объектов, которые взаимодействуют друг с другом) в программировании позволяет создавать масштабные и гибкие архитектуры, в составе которых каждый элемент (датчик, регулятор, исполнительный механизм) будет иметь свои собственные чётко определённые свойства и методы, проходящие через весь проект. Этот способ позволяет существенно упростить состав программы и сделать её понятной, наглядной и удобной в использовании и отладке.
В этой статье представлена объектно-ориентированная программная модель на языке Python, которая реализует алгоритмы управления основным оборудованием системы вентиляции. Программа включает разнообразные датчики, исполнительные механизмы, а также имеет возможность сохранять данные, полученные во время работы всей системы с целью последующего анализа или визуализации работы, которая может включать построение графиков, выявление трендов, оценку эффективности алгоритмов управления. Для качественной работы программы необходима правильная схема автоматизации процесса, на основе которой разрабатывается программа.
Система приточно-вытяжной вентиляции с рекуперацией
На рис. 1 представлена функциональная схема приточно-вытяжной вентиляции с пластинчатым рекуператором. Она включает две воздушные линии: приточную и вытяжную. Наружный воздух сначала проходит через приточную заслонку, попадая в систему. Далее он очищается в приточном фильтре. Затем воздух попадает в узел рекуператора с байпасом. Там он либо нагревается вытяжным воздухом, либо, если есть риск обледенения, частично направляется в обход для того, чтобы дать рекуператору нагреться для устранения льда с пластин. Далее воздух проходит через приточный вентилятор.
Затем приточный воздух нагревается или охлаждается калорифером или охладителем, соответственно, в зависимости от температуры наружного воздуха и той температуры, которая была установлена во время пусконаладочных работ. Далее он, уже подготовленный, направляется в рабочую зону. Вытяжной воздух движется из помещения через фильтр, очищаясь при выходе. Затем — вытягивается вентилятором, после которого проходит через рекуператор и выбрасывается наружу сквозь заслонку.
Для автоматизации используется набор датчиков и исполнительных механизмов. Перепад давления на рекуператоре измеряет датчик PDE1 — по его сигналу осуществляется управление байпасом, чтобы не допустить обледенения. За состоянием фильтров и работой вентиляторов следят датчики PDS: если перепад слишком большой, значит фильтр пора менять; если вентилятор получил команду, а давления нет, это интерпретируется как авария. Температуру контролируют датчики TE (наружного воздуха, притока, обратки калорифера), а защиту от замерзания обеспечивает термостат TS. Регулирование температуры воды происходит с помощью трёхходовых клапанов: один установлен в калорифере, а другой в охладителе. Именно они отвечают за то, какой процент свежей воды пойдёт на нагрев или охлаждение воздуха.
Все сигналы сходятся в программируемом логическом контроллере (ПЛК), который по заложенным алгоритмам поддерживает температуру, включает защиту и сигнализирует об авариях. Именно эта функциональная схема стала основой для программной модели, о которой пойдёт речь дальше.
Классы оборудования
В нашем коде необходимо учитывать все датчики, механизмы и отдельные системы. Для этого требуется создать отдельный файл models.py. В нём будут содержаться все объекты, учитываемые в системе. Такое решение предоставляет возможность свободно вызывать их в любой части кода всей программы, а привязка будет оставаться на указанном выше файле.
Это соответствует принципу «единственной ответственности» (Single Respon-sibility Principle, SRP), что существенно упрощает поддержку всего проекта.
В файле models.py каждый класс инкапсулирует данные, характерные для каждого конкретного устройства, и методы, определяющие его поведение.
Список общих названий классов:
- Sensor — датчик с диапазоном и текущим значением;
- Damper — заслонка (открыта/закрыта);
- BypassDamper — заслонка рекуператора с управлением от PDE;
- Fan — вентилятор с контролем PDS и генерацией аварии;
- Filter — фильтр с порогом загрязнения;
- ThreeWayValve — трёхходовой клапан (0–100%);
- Heater — калорифер с защитой от замерзания;
- Cooler — охладитель.
Каждый класс включает в себя атрибуты состояния и метод update(), который отвечает за обновление данных в зависимости от внешних изменений или показаний датчиков.
Внутри него происходит чтение актуальных значений, сравнение с уставками, формирование управляющих воздействий и проверка условий аварий.
На рис. 2 представлен пример части кода, включающей в себя класс Fan, который отвечает за вентиляторы в системе.
Состояние системы и логики
Файл system_state.py — основа нашей программы, потому что именно внутри него создаются образы всех необходимых нам устройств. Именно он содержит в себе текущее состояние созданных объектов, список аварий, а также историю изменений параметров, которые могут понадобиться при анализе. Файл system_state.py является главным связующим звеном между основным телом программы main.py и models.py, содержащим классы. Здесь также представлена логика взаимодействия между устройствами в зависимости от их состояний: например, если система включена, то открываются приточная и вытяжная заслонки, вентиляторы получают команду на старт, а калорифер или охладитель начинает регулировать температуру по уставке. Все эти и другие алгоритмы собраны в методе update() класса SystemState, что делает логику прозрачной и доступной для модификации.
Пример создания объектов представлен на рис. 3, а пример с обновлениями и внесением в историю — на рис. 4.
Точка входа
Входной точкой в нашу программу является файл main.py. Именно с помощью него импортируются необходимые библиотеки: sys для работы с системными параметрами, QApplication из PyQt5 для создания приложения, а также пользовательские модули SystemState, Simulation-Window и InterfaceWindow, которые помогут в будущем в реализации интерфейса нашей системы.
Файл является первым для запуска: он инициализирует приложение, создаёт объект состояния и окна, связывает их и запускает главный цикл обработки событий (рис. 5).
Заключение
Коллективом авторов была разработана объектно-ориентированная модель на языке Python для автоматизированной системы приточно-вытяжной вентиляции. Создан алгоритм для управления всеми процессами, а также реализованы возможности накопления информации для последующего использования и анализа данных. Разработанная модель может служить основой для создания тренажёров операторов, а также для предварительной отладки алгоритмов управления перед их переносом на реальное оборудование. Благодаря использованию Python модель является очень гибкой, легко масштабируемой и может быть интегрирована в промышленные контроллеры через специализированные библиотеки, что открывает путь к созданию цифровых двойников вентиляционных систем.
Таким образом, в статье были рассмотрены три основных файла созданной авторами программы, отвечающие за её корректную работу.
Файл models.py содержит классы оборудования и датчиков, инкапсулирующие их состояние и сигналы. В файле system_state.py создаётся единый механизм системы, который управляет объектами и реализует логику обновления, а также накапливает историю параметров и данных, собранных во время работы алгоритма. Файл main.py является точкой входа, которая запускает всю программу.
Вместе все эти модули образуют надёжную программную основу, которую можно использовать как для дальнейшей разработки графического симулятора, так и в качестве прототипа реальной системы управления.
Дальнейшее развитие проекта предполагает создание полнофункционального графического интерфейса с использованием PyQt5 [набор Python-библиотек (биндингов) для создания графических интерфейсов пользователей (GUI) на базе фреймворка Qt5], построение графиков изменения параметров в реальном времени, а также интеграцию с базами данных для выгрузки истории и последующего хранения данных в архивах.