Сгенерируйте код и разверните контроллер в цели в реальном времени

Программное обеспечение Model Predictive Control Toolbox™ обеспечивает функциональность генерации кода для контроллеров, спроектированных в MATLAB® или Simulink®.

Генерация кода в MATLAB

После разработки контроллера MPC в MATLAB можно сгенерировать код С с помощью MATLAB Coder™ и развернуть его для управления в режиме реального времени.

Сгенерировать код для вычисления оптимального MPC управления перемещается для неявного или явного линейного контроллера MPC:

  1. Сгенерируйте структуры данных от диспетчера MPC или явного контроллера MPC, использующего getCodeGenerationData.

  2. Чтобы проверить, что ваш контроллер приводит к ожидаемым результатам с обратной связью, симулируйте его использование mpcmoveCodeGeneration вместо mpcmove.

  3. Сгенерируйте код для mpcmoveCodeGeneration использование codegen (MATLAB Coder). Этот шаг требует программного обеспечения MATLAB Coder.

Для примера смотрите, Генерируют Код, чтобы Вычислить Оптимальные Перемещения MPC в MATLAB.

Можно также сгенерировать код для нелинейных контроллеров MPC, которые используют значение по умолчанию fmincon решатель с алгоритмом SQP. Сгенерировать код для вычисления оптимального управления перемещается для нелинейного контроллера MPC:

  1. Сгенерируйте структуры данных от нелинейного диспетчера MPC, использующего getCodeGenerationData.

  2. Чтобы проверить, что ваш контроллер приводит к ожидаемым результатам с обратной связью, симулируйте его использование nlmpcmoveCodeGeneration вместо nlmpcmove.

  3. Сгенерируйте код для nlmpcmoveCodeGeneration использование codegen (MATLAB Coder). Этот шаг требует программного обеспечения MATLAB Coder.

Генерация кода в Simulink

После разработки контроллера в Simulink с помощью любого из блоков MPC можно сгенерировать код и развернуть его для управления в режиме реального времени. Можно развернуть контроллеры во все цели, поддержанные следующими продуктами:

  • Simulink Coder

  • Embedded Coder®

  • Simulink PLC Coder™

  • Simulink Real-Time™

Можно сгенерировать код для любого из блоков Simulink Model Predictive Control Toolbox.

Типы контроллеровБлоки
Неявные контроллеры MPC

MPC Controller

Явные контроллеры MPC

Explicit MPC Controller

Запланированные на усиление контроллеры MPC

Multiple MPC Controllers

Multiple Explicit MPC Controllers

Адаптивные контроллеры MPC

Adaptive MPC Controller

Контроллеры MPC для автомобильных приложений

Adaptive Cruise Control System

Lane Keeping Assist System

Path Following Control System

Нелинейные контроллеры MPC то использование fmincon с SQP

Nonlinear MPC Controller

Для получения дополнительной информации о генерации кода смотрите Симуляцию и Генерацию кода Используя Simulink Coder и Генерацию Симуляции и Структурированного текста Используя Simulink PLC Coder.

Примечание

MPC Controller, Explicit MPC Controller, Adaptive MPC Controller и блоки Nonlinear MPC Controller реализованы с помощью блока MATLAB Function (Simulink). Чтобы видеть структуру, щелкните правой кнопкой по блоку и выберите Mask> Look Under Mask. Затем откройте подсистему MPC внизу.

Примечание

Если ваш нелинейный диспетчер MPC использует дополнительные параметры, необходимо также сгенерировать код для блока Bus Creator, соединенного с входным портом params блока Nonlinear MPC Controller. Для этого поместите Nonlinear MPC Controller и блоки Bus Creator в подсистеме, и сгенерируйте код для той подсистемы.

Сгенерируйте код CUDA для линейных контроллеров MPC

Можно сгенерировать CUDA® код для вашего контроллера MPC, использующего GPU Coder™. Для получения дополнительной информации о поддерживаемых графических процессорах смотрите Поддержку графического процессора Релизом (Parallel Computing Toolbox). Для получения дополнительной информации об установке и подготовке необходимый как условие продукт, смотрите Устанавливающие Необходимые как условие продукты (GPU Coder) и Подготовка Необходимых как условие продуктов (GPU Coder).

Сгенерировать и использовать код графического процессора в MATLAB:

  1. Спроектируйте линейный контроллер, использующий mpc объект.

  2. Сгенерируйте структуры для ядра, состояний и онлайновых данных от вашего линейного диспетчера MPC, использующего getCodeGenerationData функция.

  3. Опционально симулируйте свой замкнутый цикл итеративно с помощью mpcmoveCodeGeneration функционируйте и структуры данных, созданные на предыдущем шаге.

  4. Создайте объект параметров конфигурации кодера использование coder.gpuConfig функция, и конфигурирует опции генерации кода.

  5. Сгенерируйте код для mpcmoveCodeGeneration функция с помощью codegen функционируйте и объект параметров конфигурации кодера. Выполнение так генерирует новую функцию, которая использует код, работающий на графическом процессоре.

  6. Симулируйте свой контроллер, использующий новую сгенерированную функцию и структуры данных.

Для примера при использовании кода графического процессора в MATLAB смотрите Использование графический процессор, чтобы Вычислить Перемещения MPC в MATLAB

Можно сгенерировать и использовать код графического процессора от MPC Controller, Adaptive MPC Controller или блоков Explicit MPC Controller.

Чтобы сгенерировать код графического процессора из модели Simulink, содержащей любой из этих блоков, откройте диалоговое окно Configuration Parameters путем нажатия на Model Settings. Затем в разделе Code Generation выберите Generate GPU code.

Для получения дополнительной информации о том, как сконфигурировать вашу модель для генерации кода графического процессора, смотрите Генерацию кода из Моделей Simulink с GPU Coder (GPU Coder).

Частота дискретизации в режиме реального времени среда

Частота дискретизации, которой контроллер может достигнуть в окружении реального времени, системно-зависима. Например, для типичного маленького приложения управления MIMO, работающего на Simulink Real-Time, шаг расчета может составить целых 1-10 мс для линейного MPC и 100-1000 мс для нелинейного MPC. Чтобы определить шаг расчета, сначала протестируйте менее - агрессивный контроллер, частота дискретизации которого производит приемлемую эффективность на цели. Затем уменьшите шаг расчета и контролируйте время выполнения контроллера. Можно далее уменьшить шаг расчета, пока оптимизация безопасно завершается в каждый период выборки под нормальными условиями работы объекта. Чтобы уменьшать шаг расчета, можно также рассмотреть использование:

  • Явный MPC. В то время как у явных контроллеров MPC есть более быстрое время выполнения, у них также есть больший объем потребляемой памяти, поскольку они хранят предварительно вычисленные законы о надзоре. Для получения дополнительной информации см. Явный Проект MPC.

  • Субоптимальное решение QP после конкретного количества максимальных итераций решателя. Для получения дополнительной информации смотрите Субоптимальное Решение QP.

Совет

Более низкий шаг расчета контроллера не обязательно обеспечивает лучшую эффективность. На самом деле вы хотите выбрать шаг расчета, который мал достаточно, чтобы дать вам хорошую эффективность, но не меньший. В течение того же времени предсказания меньшие шаги расчета приводят к большим шагам предсказания, который в свою очередь производит больший объем потребляемой памяти и более комплексную задачу оптимизации.

Конструкция QP задач для сгенерированного кода C

В каждом контрольном интервале неявный или адаптивный контроллер MPC создает новую задачу QP, которая описана как:

Minx(12xHx+fx)

подвергните линейным ограничениям неравенства

Axb

где

  • x является вектором решения.

  • H является матрицей Гессиана.

  • A является матрицей линейных ограничительных коэффициентов.

  • f и b являются векторами.

В сгенерированном коде C следующие матрицы используются, чтобы обеспечить H, A, f и b. В зависимости от типа и настройки контроллера MPC, эти матрицы являются или постоянными или регенерированы в каждом контрольном интервале.

Постоянная матрицаРазмерЦельНеявный MPCНеявный MPC с онлайновой настройкой весаАдаптивный MPC или MPC LTV
HinvNM-by-NMИнверсия матрицы Гессиана, HПостоянныйРегенерированныйРегенерированный
LinvNM-by-NMИнверсия нижнего треугольного разложения Холесского H
AcNC-by-NMЛинейные ограничительные коэффициенты, AПостоянный
KxNxqp (NM –1)Используемый, чтобы сгенерировать fРегенерированный
Krp *Ny - (NM –1)
Ku1Nmv (NM –1)
Kv(Nmd +1) * (p +1) (NM –1)
Kutp *Nmv - (NM –1)
MlimNC-by-1Используемый, чтобы сгенерировать bПостоянныйПостоянный, кроме тех случаев, когда существуют пользовательские ограничения
MxNC-by-NxqpРегенерированный
Mu1NC-by-Nmv
MvNC (Nmd +1) * (p +1)

Здесь:

  • p является горизонтом предсказания.

  • Nmv является количеством переменных, которыми управляют.

  • Nmd является количеством измеренных воздействий.

  • Ny является количеством выходных переменных.

  • NM является количеством переменных оптимизации (m *Nmv+1, где m является горизонтом управления).

  • Nxqp является количеством состояний, используемых для проблемы QP; то есть, общее количество состояний объекта и состояний возмущения.

  • NC является общим количеством ограничений.

В каждом контрольном интервале сгенерированный код C вычисляет f и b как:

f=Kxxq+Krrp+Ku1ml+Kvvp+Kutut

b=(Mlim+Mxxq+Mu1ml+Mvvp)

где

  • xq является вектором из объекта и состояний возмущения, оцененных Фильтром Калмана.

  • ml является переменной move, которой управляют, из предыдущего контрольного интервала.

  • ut является переменной целью, которой управляют.

  • vp является последовательностью измеренных сигналов воздействия через горизонт предсказания.

  • rp является последовательностью опорных сигналов через горизонт предсказания.

Примечание

При генерации кода в MATLAB, getCodeGenerationData команда генерирует эти матрицы и возвращает их в configData.

Генерация кода для пользовательских решателей QP

Можно сгенерировать код для линейных контроллеров MPC, которые используют пользовательский решатель QP, написанный в C или коде MATLAB. Диспетчер вызывает этот решатель вместо встроенного решателя QP в каждом контрольном интервале.

Для примера смотрите, Симулируют и Генерируют Код для Контроллера MPC с Пользовательским Решателем QP. Для получения дополнительной информации о пользовательских решателях QP смотрите Пользовательский Решатель QP.

Для получения информации об использовании решателя FORCESPRO смотрите Реализацию Контроллеры MPC использование Решатели Embotech FORCESPRO.

Смотрите также

Функции

Блоки

Похожие темы