_______________
__________
_____
_______________________
_______________________
____________________
____________________
__________________
_______________
__________________
_____
_______________________
_______________________
____________________
____________________

Возможности Engee для моделирования Систем управления

Главная / Мероприятия / Возможности Engee для моделирования Систем управления
20 мая 2026 10:00
Что нового в Engee для разработки систем автоматического управления
Онлайн
Вебинар
Зарегистрироваться
Светлана Порсева
Спикер
Инженер ЦИТМ Экспонента по системам управления
Смотреть запись вебинара
Вебинар демонстрирует возможности платформы Engee. Ознакомьтесь с ней заранее!
О вебинаре
Перед вами стоит задача разработать систему управления, но вы не знаете с чего начать?

На вебинаре покажем основные инструменты разработки систем автоматического управления в Engee. Разберём как в рамках одной среды собрать модель объекта управления и разработать регулятор.
Блоки Системы управления
Оценка параметров модели
Описание объекта управления кодом и в модели
Подбор параметров по экспериментальным данным
Построение характеристик для анализа системы управления
Автоматическая настройка коэффициентов ПИД регулятора
Синтез последовательного регулятора
План вебинара
Рабочий процесс идентификации системы
Библиотеки Системы управления
Среда технических расчетов
Среда динамического моделирования
Спикер
  • Работает в сфере модельно-ориентированного проектирования с 2022 года
  • Получила степень магистра по специальности «Мехатроника и робототехника» в МГТУ им. Н.Э. Баумана
Инженер ЦИТМ Экспонента по системам управления
Светлана Порсева
Запись вебинара
Дополнительные материалы
Регистрация в Engee
Пример синтеза регуляторов
ЛАФЧХ из модели с помощью PRBS
Оценка недостающих параметров модели
Частотная передаточная функция (FRD)
Скачать презентацию
Текстовая версия вебинара
Введение
Более того, можно командами в скрипте также создавать и модифицировать сами модели, что может быть полезно, например, для автоматизированного тестирования алгоритмов и генерации отчётов о их прохождении. То есть работа в скриптах и в моделях — это не какие-то параллельные процессы, а единая и связная среда. Это важная особенность, и сегодня мы часто будем этим пользоваться.
Моделирование систем управления — это только одна из задач, которые можно решать в Engee. На платформе Engee есть неразрывная связь математических расчётов и среды моделирования. На практике это значит, что вы можете проводить необходимые вычисления, например, на языке Julia в интерактивных скриптах. Скрипты имеют расширение *.ngscript. Затем результаты этих расчётов в виде переменных через общую рабочую область попадают к вам в модель. Под моделью я имею в виду файл с расширением *.engee, в котором с помощью блоков описана какая-либо система или функция. 
Сегодняшний вебинар посвящён обзору возможностей разработки системы управления в Engee. Engee — это платформа для математических расчётов, модельно-ориентированного проектирования и программирования сложных технических систем.
Способы описать объект управления
Особняком держится подход, когда у нас уже есть описание объекта управления, просто он выполнен в виде кода или модели в другой среде. Но мы хотим перенести его в Engee, чтобы продолжить разработку системы управления. С помощью специальных блоков Engee Function и C Function можно интегрировать код на языках Julia и C, MATLAB и Fortran. А блок fmu позволит интегрировать в Engee целые модели из других сред в формате fmu с помощью интерфейса fmi.
И теперь при каких-либо изменениях, например изменим момент инерции нагрузки или добавим трение на валу, нам не составит труда изменить модель. Тем более параметры заданы здесь переменными, и их можно задавать, например, из скрипта. Здесь как раз проявляется то удобство совместной работы скриптов и моделей, о которой я говорила в начале. Уточнить и усложнить модель, сделав её нелинейной, можно, добавив блоки из раздела «нелинейные».

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

Плюс в том, что инженер наглядно видит, что происходит в модели. Помимо механики и электричества, в Engee есть обширные библиотеки блоков для моделирования физических систем разной природы. В том числе гидравлические и пневматические агрегаты, магнитные процессы, тепловые эффекты и многое другое. Библиотека действительно большая и пополняется с каждым релизом. Кроме физических блоков, привычных для пользователей MATLAB Simscape, появились блоки, повторяющие функционал Amesim. Блоки протестированы на соответствие блокам Amesim и показывают довольно высокую точность. Поэтому вы можете переносить свои наработки из других сред в Engee, сохраняя привычную точность.
Если и этого мало, допустим, в вашей схеме должен быть уникальный компонент, которого нет среди сотен физических блоков. Это тоже не проблема, ведь в Engee есть язык физического моделирования — инструмент, позволяющий создавать свои собственные физические блоки.
По уравнениям мы можем собрать модель объекта любой сложности. К примеру, здесь открыта модель двигателя постоянного тока.
Основной блок для моделирования систем с непрерывными состояниями — это «Интегратор». Он интегрирует входящий в него сигнал. А основной блок для моделирования систем с дискретными состояниями — это «Запаздывание на шаг». Он задерживает входной сигнал на один шаг дискретизации.
Аналогично, всё начинается с описания системы уравнениями дифференциальными, если мы имеем дело с непрерывной системой или разностными, если объект дискретный. И далее по ним составляется модель. «Направленной» она здесь названа, так как каждый блок имеет вход и выход. Каждый блок определяется математической взаимосвязью между его входами, выходами, параметрами и переменными состояния.
В этом примере данные были получены из эксперимента и записаны в таблицу. Первый столбец таблицы — частота. Второй — частотный отклик. Выше в кодовой ячейке данные из таблицы как раз экспортируются и обрабатываются.

Линейные стационарные объекты имеют преимущество в том, что они просты и позволяют легко проводить анализ системы. Но если ваша система нелинейная или нестационарная, то эти объекты уже не подойдут. Кроме того, если в вашем объекте управления что-либо изменится, то придётся пересматривать всю передаточную функцию или любой другой объект заново. Поэтому для описания систем чаще обращаются к созданию моделей из отдельных блоков.
Модель частотной характеристики содержит набор дискретизированных измерений частотной характеристики системы. Эту модель создаёт функция frd. Первый аргумент — это комплексная переменная, описывающая амплитуду и фазу отклика. Второй аргумент задаёт частоты, на которых был измерен отклик. Обычно они получаются путём сбора экспериментальных данных или моделирования. 
В Engee доступна ещё одна форма линейных стационарных объектов — частотная передаточная функция. Она задаётся с помощью наборов частот и комплексных чисел, выражающих реакцию системы на этих частотах. Это удобный способ хранить данные частотные характеристики системы для визуализации или использования в расчётах. Частотная передаточная функция доступна в библиотеке EngeeControlSystems.
И наконец, объект в форме пространств состояний создаётся с помощью функции ss. Её аргументами являются матрицы A, B, C и D. В блоке непрерывных и дискретных пространств состояний можно также задать эти матрицы в виде переменных рабочей области. Также обратите внимание, что можно переходить из одной формы линейно-стационарного объекта в другую.
И аналогично можно создавать такую систему через заранее созданную переменную s. Соответствующие блоки также можно найти и в разделе «Непрерывные», и в разделе «Дискретные». 
Ещё один довольно удобный способ, когда мы отдельно задаём s как переменную и затем используем её в расчётах. В моделях блок передаточной функции находится в разделе «Непрерывные» и для дискретной передаточной функции в разделе «Дискретные».

Кликнув на блок, вы легко можете настроить параметры передаточной функции. Конечно сюда можно писать не только численные значения, но и переменные, которые можно задать из командной строки или скрипта. Для создания системы в форме нулей и полюсов используется функция zpk. Её аргументы — нули, полюса, коэффициент усиления системы и в случае дискретной системы — период дискретизации.
Передаточную функцию можно создать с помощью функции tf. Аргументами являются числитель и знаменатель передаточной функции. Если нужна дискретная передаточная функция, то третьим аргументом указывается период дискретизации.
Такими линейными стационарными объектами могут быть передаточные функции, передаточные функции в форме нулей полюсов или модели в пространстве состояний. Использовать их можно как в виде блоков, так и кодом. Чтобы создавать линейные стационарные объекты в скриптах, нужно подключить библиотеку Julia ControlSystemsBase.
Проектирование системы управления начинается с математического описания объекта управления. Знакомый всем инженерам систем управления способ — это, исходя из физических принципов, описать систему уравнениями. Далее, пользуясь преобразованием Лапласа или Z-преобразованием, перейти к одной из форм линейных стационарных объектов.
Подходы к созданию модели объекта управления
Чтобы улучшать результаты оценки, вы можете экспериментировать с начальными предположениями, настройками оптимизации, а также подавать различные входные данные на экспериментальный стенд. Этот пример есть в сообществе Engee. Вы можете переиспользовать его в своём проекте. Для этого кликните открыть в Engee, и копия проекта будет добавлена в ваш файловый браузер.
И далее для настройки оценки в полях кодовой ячейки нужно указать параметры эксперимента: имя модели, оцениваемых параметров, начальные значения и многое другое. Итак, за 30 итераций у нас подобрались параметры, и по графикам результат симуляции модели с этими параметрами нас вполне устраивает.
Следующая ячейка запускает открытую модель и сравнивает результаты её симуляции с экспериментальными данными из таблицы. И мы видим довольно большое расхождение. К счастью, в Engee мы можем оценить недостающие коэффициенты трения. В первую очередь нужно подключить к библиотеке, которая используются для оценки и построения графиков.
Далее я определяю из каких столбцов какие данные я получаю. Для того, чтобы в дальнейшем подавать данные из таблицы на вход оцениваемой модели, мне нужно создать из векторов переменную типа WorkSpaceArray. Про WorkSpaceArray в документации есть довольно подробная статья, которой я советую пользоваться.
Обратите внимание, что здесь я использую маски кодовых ячеек. Это инструмент, который скрывает код, показывая только нужные интерактивные элементы управления. Здесь под маской у меня просто выгрузка таблицы данных эксперимента.
Мы можем собрать его модель, указав все известные параметры из документации на двигатель. Но трения в документации не дано, поэтому мы можем указать лишь примерные или расчётные значения коэффициентов вязкого трения и трения скольжения. И в таком случае результаты моделирования могут быть далеки от экспериментальных данных.

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

В таком случае, при наличии реального объекта мы можем снять с него экспериментальные данные и по этим данным идентифицировать модель. Пример со стандартным рабочим процессом идентификации модели по данным есть в сообществе Engee. Сообщество — это открытая библиотека примеров, проектов и учебных материалов на множество тем, в том числе на тему систем управления.

Чуть подробнее хочется поговорить о промежуточном подходе серого ящика, когда мы знаем структуру модели, но нам недостаёт некоторых параметров. Недостающие параметры можно подобрать по экспериментальным данным. Это довольно сложный алгоритм, но благодаря совместной работе скриптов и моделей в коде можно реализовать даже такую непростую задачу. Представим, что нам нужно управлять двигателем постоянного тока.
Анализ объекта управления
И в результате мы видим, что наши характеристики совпали. Итак, мы рассмотрели, как можно моделировать и анализировать объект управления в Engee.
Мы можем убедиться в их правильности, если опишем тот же объект управления с помощью нелинейного стационарного объекта, например, передаточной функции, и построим ЛАФЧХ с помощью библиотеки ControlSystems. Так же, как мы с вами это уже делали.
Блок сбора данных — это просто подсистема, в которой данные обрабатываются и записываются в переменную. Этот пример также доступен в сообществе, и вы можете пользоваться им, чтобы повторить для своих моделей.

Для обработки снятых с модели данных и построения по ним ЛАФЧХ будем пользоваться интерактивным скриптом. Параметры, которые понадобится изменять, представлены в виде масок кодовых ячеек. Далее в обычных кодовых ячейках описан алгоритм обработки полученных данных. Для получения частотного отклика системы нужна функция interpfreqresp, которая находится в jl-файле. Если вы будете повторять этот эксперимент, убедитесь, что вы скопировали в свою папку этот файл. В результате работы скрипта мы получили логарифмическую и фазовую частотные характеристики.
На графике можно изменять стиль линий. Например, установить шрифт по ГОСТ и сделать линии чёрными для того, чтобы добавить график в отчёт.

Частотные характеристики строить чуть сложнее. Для построения частотных характеристик системы нам нужно получить частотный отклик модели. Подать тестовый сигнал на вход системы и измерить её выход. Чтобы сократить время эксперимента без потери качества результатов, мы будем подавать не гармонический сигнал, а сигнал псевдослучайной двоичной последовательности. Я буду называть его сокращённо PRBS. PRBS — это периодический сигнал, который может принимать только два определённых значения. Чтобы подать такой сигнал на объект управления, мы будем использовать специальный блок — генератор сигнала псевдослучайной двоичной последовательности.
На его вход поступает выход другого блока — генератор старт стоп-сигнала. Оба этих блока находятся в библиотеке системы управления в разделе «Генераторы сигналов». Сигнал, который получается на выходе из этих блоков, складывается с входным сигналом системы управления. Нам остаётся только записать данные эксперимента в рабочую область, чтобы дальше работать с ними в коде.
Построить переходную функцию модели проще простого: просто подать ступенчатый сигнал на вход. Записать выходной сигнал и запустить модель на симуляцию. У нас будет построен график.
Переходную характеристику построить для частотной передаточной функции нельзя, так как объект frd содержит только данные о частотном отклике.

Теперь посмотрим, как построить характеристики для моделей. У нас есть модель объекта управления, и, в общем нам неважно, что находится там внутри.
Затем мы преобразуем полученные значения амплитуды и фазы к векторам и далее строим с помощью функции plot логарифмическую амплитудно-фазовую характеристику.
Сначала мы получаем амплитудную и фазовую части частотной характеристики системы с помощью функции bode.
Помимо этого, можно построить множество других графиков, которые могут быть полезны при анализе систем управления. Например, импульсная характеристика, годограф амплитудно-фазовой частотной характеристики, корневой годограф и многое другое. Более подробно об этом вы можете прочитать в документации на библиотеку ControlSystems. 

Для построения характеристик частотной передаточной функции, которую мы получаем с помощью функции frd, используется немного другой подход.
Переходная функция построена, но всё-таки хочется получить о ней более детальную информацию, используя функцию stepinfo. Эти значения можно отобразить и прямо на графике. Также мы можем увеличить трубку при вхождении, в которую рассчитывается время переходного процесса, с 2% до 5. И для удобства сместим легенду вправо-вниз, чтобы она нам не мешала.
Но нам не нужен такой большой график, и также хочется снизить точность, чтобы скрипт не занимал очень много памяти, так как интерактивные графики в библиотеке ControlSystems довольно тяжёлые, поскольку мы буквально сохраняем данные в них. Для снижения точности зададим вектор времени t с шагом одна сотая. Здесь этого вполне будет достаточно для графика.
Как правило, переходная функция строится для замкнутой системы. Для этого используем функцию feedback.
Если вы хотите отобразить на графике запасы устойчивости, то пользуйтесь функцией marginplot. Далее построим график переходной функции. Для построения графика нам, как обычно, нужна функция plot, и её аргументом будет являться функция step от объекта.
Для начала построим логарифмическую, амплитудно-фазовую частотную характеристику. Это можно сделать с помощью функции bodeplot.
Для начала посмотрим, как строить характеристики системы для линейных стационарных объектов: передаточные функции, формы нулей полюсов и пространство состояний. Делать мы это будем в скрипте, пользуясь библиотекой ControlSystems. Процесс для всех трёх форм будет одинаков, так что для примера будем строить характеристики для объекта управления в форме пространств-состоянии.
Мы уже умеем собирать объект управления разными способами, и самое время научиться анализировать его поведение, строя переходную, частотную и другие характеристики.
Синтез регулятора
Далее я могу использовать его, например, чтобы сформировать разомкнутую или замкнутую систему и построить их характеристики. То, что мы получили в функции pidtune, мы можем просто использовать в модели, в параметрах блока ПИД-регулятор.Это пропорциональные и интегральные коэффициенты.
На примере ПИД-регулятора покажу, как можно переходить из непрерывной системы в дискретную с помощью функции c2d. И с дискретной в непрерывную функции d2c. Также можно менять период дискретизации системы функции d2d.
Создавать ПИД-регулятор мы научились, осталось только подобрать коэффициенты ПИД-регулятора. Для автоматического подбора коэффициентов ПИД-регулятора в библиотеке Engee Control Systems есть функция pidtune. Мы оставим тот же объект управления, выберем ПИД-регулятор в параллельной форме. В результате работы функции мы получаем объект ПИД-регулятора с подобранными коэффициентами.
Во втором примере рассмотрим ПИД-регулятор. Для использования функции ПИД, которая создаёт объект пид-регулятора, нужно подключить библиотеку EngeeControlSystems. ПИД-регулятор может быть как в параллельной форме, так и в стандартной. Для ПИД-регулятора в стандартной форме используется функция PidStd. Также ПИД-регулятор может быть не только непрерывным, но и дискретным, если одним из его из аргументов является период дискретизации.
В его настройках указать рассчитанные параметры и построить график на выходе системы.
Вот теперь все требования учтены, а в том числе перерегулирование меньше 15%. Получившийся регулятор мы можем использовать и в модели, например, с помощью блока «Нули и полюса» передаточной функции.
С такими значениями запас по фазе у нас больше 60, что соответствует требованиям. Но время переходного процесса у нас должно быть больше 2, поэтому я чуть увеличу коэффициент усиления.
Пожалуй, такой коэффициент усиления нас устроит. Теперь нас не устраивает запас по фазе. Нам нужно как бы приподнять характеристику, и для этого мы можем добавить последовательное корректирующее устройство с опережением по фазе. В следующей ячейке также есть ползунки для коэффициента усиления, но мы его только что выбрали, поэтому сразу запишу в переменную выбранное значение.

Осталось подобрать ноль и полюс корректирующего устройства. Оно с опережением по фазе, поэтому полюс будет больше нуля. Обратите внимание, что на том же графике ЛАФЧХ мы одновременно строим прошлую характеристику, где регулятор — только интегратор с коэффициентом усиления, чтобы наглядно видеть, как изменяются частотные характеристики.
По переходному процессу мы видим, что система стала точной, но довольно медленной, поэтому мы добавим коэффициент усиления. Настройка коэффициента выполнена в маске кодовой ячейки в виде ползунка. Мы можем перемещать его и смотреть на реакцию системы по меняющимся графикам. Нужно только отметить, чтобы ячейка выполнялась автоматически при каждом изменении.
По характеристикам видно, что системе не хватает точности. Система с нулевым порядком астатизма, поэтому для того, чтобы удовлетворить требованию отсутствие статической ошибки, мы добавим в качестве регулятора интегрирующее звено и заново построим характеристики скорректированной системы.
Мы только что научились это делать. В скриптах Engee можно гибко работать с графиками, поэтому я объединю график ЛАФЧХ и график переходной функции, расположив их рядом.
В первом примере мы воспользуемся частотными характеристиками, чтобы подобрать последовательный регулятор. Объект управления у нас задан передаточной функцией и заданы требования, к которым наша скорректированная система должна соответствовать. Для начала мы хотим построить характеристики нескорректированной системы.
В этом вебинаре мы рассмотрим только малую часть того, что можно реализовать в Engee в качестве регулятора.
В модели соединять регулятор и объект управления гораздо проще и нагляднее. Мы просто соединим блоки подсистем последовательно или параллельно с помощью блока сложения.
Для параллельного соединения оператор + или функция parallel.
Теперь перейдём к синтезу регулятора. В Engee возможно делать это множеством разных способов и подходов, благодаря гибкости языка Julia и связи скриптов с моделями. Вы уже знакомы с блоками передаточных функций, формы нулей и полюсов, а также моделей в пространстве состояний. И, конечно, можно реализовывать регулятор с их помощью. Также в библиотеке системы управления появляются различные современные регуляторы.

Кроме того, вы можете интегрировать в модель алгоритмы с помощью пользовательских функций, например, написанные кодом, используя блоки Engee unction и C Function. Также я добавила в этот список блок табличной функции нескольких переменных. С её помощью, можно интегрировать в модель заранее рассчитанную поверхность отклика, коэффициентов нечёткого регулятора.

Для начала посмотрим, как можно подключать регулятор к объекту управления. В коде можно соединять две системы последовательно оператором умножения или функцией series.
Выводы
Говоря о комплексах полунатурного моделирования, нельзя не сказать о комплексе РИТМ. Модели Engee идеально ложатся на РИТМ, так как они буквально созданы друг для друга.
Таким образом, мы проверим наш алгоритм не только в симуляции, но и на реальном стенде. При моделировании на стенде на той же модели алгоритмов и объекта можно учесть процессы, которые нельзя учесть при обычной симуляции.
И прямо из модели контроллера можно сгенерировать С-код, чтобы положить его на микроконтроллер, в то время как модель объекта будет выполняться на машине реального времени.
Итак, это, пожалуй, всё, о чём я хотела рассказать вам на этом вебинаре. Возможно у вас остался вопрос: а для чего же мы вообще собирали модель объекта и разработали для него управление? Что же делать с этим дальше? А дальше можно рассмотреть различные сценарии управления и реализовать алгоритм с помощью конечных автоматов.
Популярные вопросы
Если у вас остались вопросы —
обращайтесь к менеджеру мероприятия
Яна Степко