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

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

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

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

  • Simulink Coder™

  • Embedded Coder®

  • Simulink PLC Coder™

  • Simulink Real-Time™

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

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

Примечание

Контроллер MPC, Явный Контроллер MPC и Адаптивный Контроллер MPC блоки реализованы с помощью блока MATLAB function. Чтобы видеть структуру, щелкните правой кнопкой по блоку и выберите Mask> Look Under Mask. Затем откройте подсистему MPC внизу.

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

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

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

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

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

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

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

Выборка уровня в режиме реального времени среда

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

  • Явный 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.

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

Функции

Блоки

Похожие темы