Программное обеспечение Model Predictive Control Toolbox™ обеспечивает функции генерации кода для контроллеров, разработанных в MATLAB ® или Simulink ®.
После разработки MPC-контроллера в MATLAB можно создать код C с помощью Coder™ MATLAB и развернуть его для управления в реальном времени.
Чтобы создать код для вычисления оптимальных перемещений управления MPC для неявного или явного линейного контроллера MPC:
Создание структур данных из контроллера MPC или явного контроллера MPC с помощью getCodeGenerationData.
Чтобы убедиться, что ваш контроллер дает ожидаемые результаты замкнутого цикла, смоделируйте его с помощью mpcmoveCodeGeneration вместо mpcmove.
Создать код для mpcmoveCodeGeneration использование codegen (Кодер MATLAB). Для выполнения этого шага требуется программное обеспечение MATLAB Coder.
Пример см. в разделе Создание кода для вычисления оптимальных перемещений MPC в MATLAB.
Также можно создать код для нелинейных контроллеров MPC, использующих значения по умолчанию fmincon решатель с алгоритмом SQP. Чтобы создать код для вычисления оптимальных перемещений управления для нелинейного контроллера MPC:
Создание структур данных из нелинейного контроллера MPC с помощью getCodeGenerationData.
Чтобы убедиться, что ваш контроллер дает ожидаемые результаты замкнутого цикла, смоделируйте его с помощью nlmpcmoveCodeGeneration вместо nlmpcmove.
Создать код для nlmpcmoveCodeGeneration использование codegen (Кодер MATLAB). Для выполнения этого шага требуется программное обеспечение MATLAB Coder.
После разработки контроллера в Simulink с использованием любого из блоков MPC можно создать код и развернуть его для управления в реальном времени. Можно развернуть контроллеры на всех целевых объектах, поддерживаемых следующими продуктами:
Симулинк-кодер
Встроенный кодер ®
Simulink PLC Coder™
Симулинк Real-Time™
Можно создать код для любого блока Simulink панели инструментов управления прогнозом модели.
| Типы контроллеров | Блоки |
|---|---|
| Неявные контроллеры MPC | |
| Явные контроллеры MPC | |
| Контроллеры MPC с планированием усиления | |
| Адаптивные контроллеры MPC | |
| Контроллеры MPC для автомобильных приложений | Адаптивная система круиз-контроля |
Нелинейные контроллеры MPC, использующие fmincon с SQP |
Дополнительные сведения о создании кода см. в разделах Моделирование и создание кода с помощью кодера Simulink и Моделирование и создание структурированного текста с помощью кодера Simulink PLC.
Примечание
Блоки контроллера MPC, явного контроллера MPC, адаптивного контроллера MPC и нелинейного контроллера MPC реализуются с использованием блока функции MATLAB (Simulink). Чтобы увидеть структуру, щелкните правой кнопкой мыши блок и выберите «Маска» > «Искать под маской». Затем откройте подсистему MPC.
Примечание
Если нелинейный контроллер MPC использует дополнительные параметры, необходимо также создать код для блока Bus Creator, подключенного к входному порту параметров блока нелинейного контроллера MPC. Для этого поместите блоки Nonlinear MPC Controller и Bus Creator в подсистему и создайте код для этой подсистемы.
Можно создать код CUDA ® для контроллера MPC с помощью графического процессора Coder™. Дополнительные сведения о поддерживаемых графических процессорах см. в разделе Поддержка графических процессоров по выпуску (Панель инструментов параллельных вычислений). Дополнительные сведения об установке и настройке необходимого продукта см. в разделах Установка необходимых продуктов (GPU Coder) и Настройка необходимых продуктов (GPU Coder).
Для создания и использования кода графического процессора в MATLAB:
Проектирование линейного контроллера с использованием mpc объект.
Создайте структуры для ядра, состояний и оперативных данных из линейного контроллера MPC с помощью getCodeGenerationData функция.
При необходимости выполните итерационное моделирование замкнутого контура с помощью mpcmoveCodeGeneration и структуры данных, созданные на предыдущем шаге.
Создание объекта опций конфигурации кодера с помощью coder.gpuConfig и сконфигурируйте параметры генерации кода.
Создание кода для mpcmoveCodeGeneration с помощью функции codegen и объект опций конфигурации кодера. При этом создается новая функция, использующая код, выполняемый на GPU.
Моделирование контроллера с использованием новой созданной функции и структур данных.
Пример использования кода графического процессора в MATLAB см. в разделе Использование графического процессора для вычисления перемещений MPC в MATLAB
Можно создавать и использовать код графического процессора из блоков Контроллер MPC, Адаптивный контроллер MPC или Явный контроллер MPC.
Чтобы создать код графического процессора из модели Simulink, содержащей любой из этих блоков, откройте диалоговое окно Параметры конфигурации (Configuration Parameters), щелкнув Параметры модели (Model Settings). Затем в разделе Создание кода выберите Создать код графического процессора.
Дополнительные сведения о настройке модели для генерации кода графического процессора см. в разделе Генерация кода из моделей Simulink с кодером графического процессора (GPU Coder).
Частота дискретизации, которую контроллер может достичь в среде реального времени, зависит от системы. Например, для типичного небольшого приложения управления MIMO, работающего на Simulink Real-Time, время выборки может составлять 1-10 мс для линейного MPC и 100-1000 мс для нелинейного MPC. Чтобы определить время выборки, сначала протестируйте менее агрессивный контроллер, частота выборки которого обеспечивает приемлемую производительность для цели. Затем уменьшите время выборки и контролируйте время выполнения контроллера. Можно дополнительно сократить время отбора проб до тех пор, пока оптимизация будет безопасно завершена в течение каждого периода отбора проб при нормальных условиях эксплуатации установки. Чтобы сократить время выборки, можно также использовать:
Явный MPC. Хотя явные MPC-контроллеры имеют более быстрое время выполнения, они также имеют больший объем памяти, поскольку хранят заранее вычисленные законы управления. Дополнительные сведения см. в разделе Явное проектирование MPC.
Неоптимальное решение QP после указанного числа максимальных итераций решателя. Дополнительные сведения см. в разделе Неоптимальное решение QP.
Совет
Меньшее время выборки контроллера не обязательно обеспечивает лучшую производительность. На самом деле, вы хотите выбрать образец времени, который достаточно мал, чтобы дать вам хорошую производительность, но не меньше. Для того же времени прогнозирования меньшее время выборки приводит к большим шагам прогнозирования, что, в свою очередь, создает больший объем памяти и более сложную задачу оптимизации.
На каждом интервале управления неявный или адаптивный контроллер MPC создает новую задачу QP, которая определяется как:
)
с учетом ограничений линейного неравенства
где
x - вектор решения.
H - матрица Гессена.
A - матрица коэффициентов линейных ограничений.
f и b - векторы.
В сгенерированном С-коде для обеспечения H, A, f и b используются следующие матрицы. В зависимости от типа и конфигурации контроллера MPC эти матрицы являются либо постоянными, либо регенерируются в каждом интервале управления.
| Матрица констант | Размер | Цель | Неявный MPC | Неявный MPC с онлайн-настройкой веса | Адаптивный MPC или LTV MPC |
|---|---|---|---|---|---|
Hinv | NM-по-NM | Инверсия матрицы Гессена, Н | Постоянный | Восстановленный | Восстановленный |
Linv | NM-по-NM | Обратное нижнетреугольное разложение Холеского H | |||
Ac | NC-по-NM | Коэффициенты линейных ограничений, А | Постоянный | ||
Kx | Nxqp-by- (NM-1) | Используется для генерации f | Восстановленный | ||
Kr | p * Ny-by- (NM-1) | ||||
Ku1 | Nmv-by- (NM-1) | ||||
Kv | (Nmd + 1) * (p + 1) -by- (NM-1) | ||||
Kut | p * Nmv-by- (NM-1) | ||||
Mlim | NC-by-1 | Используется для создания b | Постоянный | Константа, за исключением случаев, когда имеются пользовательские ограничения | |
Mx | ЧПУ-за-Nxqp | Восстановленный | |||
Mu1 | ЧПУ по Nmv | ||||
Mv | NC-by- (Nmd + 1) * (p + 1) |
Здесь:
p - горизонт прогнозирования.
Nmv - количество манипулируемых переменных.
Nmd - количество измеренных возмущений.
Ny - количество выходных переменных.
NM - количество переменных оптимизации (m * Nmv + 1, где m - горизонт управления).
Nxqp - количество состояний, используемых для задачи QP; то есть общее количество состояний установки и состояний модели возмущения.
ЧПУ - общее число ограничений.
В каждом интервале управления сгенерированный код C вычисляет f и b как:
Mlim+Mx∗xq+Mu1∗ml+Mv∗vp)
где
xq - вектор состояний модели растения и возмущения, оцененный фильтром Калмана.
ml - перемещение управляемой переменной из предыдущего интервала управления.
ut - управляемая переменная цель.
vp - последовательность измеренных сигналов возмущения по горизонту прогнозирования.
rp - последовательность опорных сигналов по горизонту прогнозирования.
Примечание
При создании кода в MATLAB, getCodeGenerationData команда генерирует эти матрицы и возвращает их в configData.
Можно создать код для линейных контроллеров MPC, использующих пользовательский решатель QP, написанный на языке C или MATLAB. Контроллер вызывает этот решатель вместо встроенного решателя QP в каждом интервале управления.
Пример см. в разделе Моделирование и генерация кода для контроллера MPC с помощью пользовательского решателя QP. Дополнительные сведения о пользовательских решателях QP см. в разделе Пользовательский решатель QP.
Сведения об использовании решателя FORCES PRO см. в разделе Реализация контроллеров MPC с помощью решателей Embotech FORCES PRO.