Программное обеспечение Model Predictive Control Toolbox™ обеспечивает функциональность генерации кода для контроллеров, разработанных в MATLAB® или Simulink®.
После разработки контроллера MPC в MATLAB можно сгенерировать код С с помощью MATLAB Coder™ и развернуть его для управления в реальном времени.
Чтобы сгенерировать код для вычисления оптимальных ходов MPC управления для неявного или явного линейного контроллера MPC:
Сгенерируйте структуры данных из контроллера MPC или явного контроллера MPC, используя getCodeGenerationData
.
Чтобы убедиться, что ваш контроллер производит ожидаемые результаты замкнутой системы, симулируйте его с помощью mpcmoveCodeGeneration
вместо mpcmove
.
Сгенерируйте код для mpcmoveCodeGeneration
использование codegen
(MATLAB Coder). Этот шаг требует программного обеспечения MATLAB Coder.
Для получения примера смотрите Сгенерировать код для вычисления оптимальных перемещений MPC в MATLAB.
Можно также сгенерировать код для нелинейных контроллеров MPC, которые используют значение по умолчанию fmincon
решатель с алгоритмом SQP. Чтобы сгенерировать код для вычисления оптимальных ходов управления для нелинейного контроллера MPC:
Сгенерируйте структуры данных из нелинейного контроллера MPC с помощью getCodeGenerationData
.
Чтобы убедиться, что ваш контроллер производит ожидаемые результаты замкнутой системы, симулируйте его с помощью nlmpcmoveCodeGeneration
вместо nlmpcmove
.
Сгенерируйте код для nlmpcmoveCodeGeneration
использование codegen
(MATLAB Coder). Этот шаг требует программного обеспечения MATLAB Coder.
После разработки контроллера в Simulink с использованием любого из блоков MPC, можно сгенерировать код и развернуть его для управления в реальном времени. Можно развертывать контроллеры ко всем целям, поддерживаемым следующими продуктами:
Simulink Coder
Embedded Coder®
Simulink PLC Coder™
Функции Simulink Real-Time™
Можно сгенерировать код для любого из блоков Model Predictive Control Toolbox Simulink.
Типы контроллеров | Блоки |
---|---|
Неявные контроллеры MPC | |
Явные контроллеры MPC | |
Планируемые по усилению контроллеры MPC | |
Адаптивные контроллеры MPC | |
Контроллеры MPC для автомобильных приложений | |
Нелинейные контроллеры MPC, которые используют fmincon с SQP |
Для получения дополнительной информации о генерации кода см. Simulation and Code Generation Using Simulink Coder and Simulation and Structured Text Generation Using Simulink PLC Coder.
Примечание
Блоки MPC Controller, Explicit MPC Controller, Adaptive MPC Controller и Nonlinear MPC Controller реализованы с помощью блока Функция MATLAB (Simulink). Чтобы увидеть структуру, щелкните правой кнопкой мыши блок и выберите Mask > Look Under Mask. Затем откройте подсистему MPC под.
Примечание
Если ваш нелинейный контроллер использует дополнительные параметры, вы также должны сгенерировать код для блока Bus Creator, соединенного с params входным портом блока Nonlinear MPC Controller. Для этого поместите блоки Nonlinear MPC Controller и Bus Creator в подсистему и сгенерируйте код для этой подсистемы.
Можно сгенерировать CUDA® код для контроллера MPC, используя GPU Coder™. Дополнительные сведения о поддерживаемых графических процессорах см. в разделе Поддержка GPU по версии (Parallel Computing Toolbox). Дополнительные сведения об установке и настройке необходимого продукта см. в разделе Установка необходимых продуктов (GPU Coder) и Настройка необходимых продуктов (GPU Coder).
Чтобы сгенерировать и использовать код GPU в MATLAB:
Проектируйте линейный контроллер с помощью mpc
объект.
Сгенерируйте структуры для ядра, состояний и оперативных данных от вашего линейного контроллера MPC с помощью getCodeGenerationData
функция.
Опционально симулируйте замкнутый цикл итеративно, используя mpcmoveCodeGeneration
функция и структуры данных, созданные на предыдущем шаге.
Создайте объект опций строения кодера с помощью coder.gpuConfig
и сконфигурируйте опции генерации кода.
Сгенерируйте код для mpcmoveCodeGeneration
функцию, использующую codegen
function и объект опций строения кодера. Это генерирует новую функцию, которая использует код, выполняемый на графическом процессоре.
Симулируйте свой контроллер, используя новую сгенерированную функцию и структуры данных.
Для примера использования кода GPU в MATLAB, смотрите Использование графический процессор для вычисления перемещений MPC в MATLAB
Можно сгенерировать и использовать код GPU из блоков MPC Controller, Adaptive MPC Controller или Explicit MPC Controller.
Чтобы сгенерировать код GPU из модели Simulink, содержащей любой из этих блоков, откройте диалоговое окно Параметры конфигурации (Configuration Parameters), нажав Model Settings. Затем в Code Generation разделе выберите Generate GPU code.
Для получения дополнительной информации о том, как сконфигурировать модель для генерации кода GPU, смотрите Генерацию кода из моделей Simulink с GPU Coder (GPU Coder).
Частота дискретизации, которую контроллер может достичь в окружение реального времени, зависит от системы. Для примера, для типичного небольшого приложения управления MIMO, работающего на Simulink Real-Time, шаг расчета может составлять до 1-10 мс для линейного MPC и 100-1000 мс для нелинейного MPC. Чтобы определить шаг расчета, сначала протестируйте менее агрессивный контроллер, чья частота дискретизации обеспечивает приемлемую эффективность для целевого устройства. Затем уменьшите шаг расчета и проконтролируйте время выполнения контроллера. Можно дополнительно уменьшить шаг расчета, пока оптимизация безопасно завершается в течение каждого периода отбора проб при нормальных условиях эксплуатации объекта. Чтобы уменьшить шаг расчета, вы также можете рассмотреть использование:
Явный MPC. В то время как явные контроллеры MPC имеют более быстрое время выполнения, они также имеют большую площадь памяти, поскольку они хранят предварительно вычисленные законы управления. Дополнительные сведения см. в разделе Явный проект MPC.
Неоптимальное решение QP после заданного количества максимальных итераций решателя. Для получения дополнительной информации см. Suboptimal QP Solution.
Совет
Меньший шаг расчета контроллера не обязательно обеспечивает лучшую эффективность. На самом деле, вы хотите выбрать шаг расчета, который достаточно мал, чтобы дать вам хорошую эффективность, но не меньше. Для того же времени предсказания меньшие шаги расчета приводят к большим шагам предсказания, что, в свою очередь, создает большую площадь памяти и более сложную задачу оптимизации.
На каждом контрольном интервале неявный или адаптивный контроллер MPC создает новую задачу QP, которая определяется как:
удовлетворяющее линейным ограничениям неравенства
где
x - вектор решения.
H - матрица Гессия.
A является матрицей линейных ограничительных коэффициентов.
f и b являются векторами.
В сгенерированном коде C следующие матрицы используются для предоставления H, A, f и b. В зависимости от типа и строения контроллера MPC, эти матрицы являются либо постоянными, либо регенерированными в каждом контрольном интервале.
Постоянная матрица | Размер | Цель | Неявный MPC | Неявный MPC с онлайн настройкой веса | Адаптивный MPC или LTV MPC |
---|---|---|---|---|---|
Hinv | NM -by- NM | Обратная матрица Гессия, H | Постоянный | Восстановленный | Восстановленный |
Linv | NM -by- NM | Обратное нижне-треугольное Холецкое разложение H | |||
Ac | NC -by- NM | Линейные ограничительные коэффициенты, A | Постоянный | ||
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 | NC -by- Nxqp | Восстановленный | |||
Mu1 | NC -by- Nmv | ||||
Mv | NC -by- (Nmd + 1) * (p + 1) |
Здесь:
p - горизонт предсказания.
Nmv - количество манипулируемых переменных.
Nmd - количество измеренных нарушений порядка.
Ny - количество переменных выходов.
NM - количество переменных оптимизации (m * Nmv + 1, где m - горизонт управления).
Nxqp - количество состояний, используемых для задачи QP; то есть общее количество состояний объекта и состояний модели возмущения.
NC - общее количество ограничений.
На каждом контрольном интервале сгенерированный код C вычисляет f и b как:
где
xq - вектор состояния объекта и модели возмущения, оцененный фильтром Калмана.
ml - перемещение манипулированной переменной с предыдущего контрольного интервала.
ut - манипулируемая переменная цель.
vp - последовательность измеренных сигналов нарушения порядка через горизонт предсказания.
rp - последовательность опорных сигналов через горизонт предсказания.
Примечание
При генерации кода в MATLAB, getCodeGenerationData
команда генерирует эти матрицы и возвращает их в configData
.
Можно сгенерировать код для линейных контроллеров MPC, которые используют пользовательский решатель QP, написанный на C или коде MATLAB. Контроллер вызывает этот решатель вместо встроенного решателя QP на каждом контрольном интервале.
Для получения примера смотрите Моделирование и Генерация кода для контроллера MPC с пользовательским решателем QP. Для получения дополнительной информации о пользовательских решателях QP, смотрите Пользовательский решатель QP.
Для получения информации об использовании решателя FORCES PRO, смотрите Реализуйте Контроллеры MPC, используя Решатели Embotech FORCES PRO.