Реализуйте Контроллеры MPC использование Решатели Embotech FORCESPRO

Можно использовать FORCESPRO, встроенный программный инструмент оптимизации в реальном времени, разработанный Embotech AG, чтобы симулировать и сгенерировать код для линейных и нелинейных контроллеров MPC созданное с использованием программное обеспечение Model Predictive Control Toolbox™. Embotech обеспечивает плагин, который усиливает возможности проектирования программного обеспечения Model Predictive Control Toolbox и вычислительную эффективность FORCESPRO. Используя плагин, можно сгенерировать пользовательские решатели, которые позволяют развертывание на оборудовании в реальном времени и которые высоко оптимизированы, на основе определенной проблемы MPC, чтобы достигнуть удовлетворительной эффективности в реальном времени.

Для получения дополнительной информации об использовании плагина MPC FORCESPRO см. Документацию FORCESPRO. Можно также использовать решатели FORCESPRO для других приложений оптимизации в обоих MATLAB® и Simulink®. Для получения дополнительной информации смотрите Сторонние Продукты и услуги FORCESPRO.

Для получения информации о генерации кода в MATLAB и Simulink для контроллеров Model Predictive Control Toolbox, смотрите, Генерируют Код и Развертывают Контроллер в Цели В реальном времени.

Решатель квадратичного программирования (QP) Embotech

Чтобы спроектировать и симулировать линейный независимый от времени контроллер MPC (тот, в котором модель предсказания не изменяется во время выполнения) в MATLAB с помощью решателя Embotech FORCESPRO QP, выполните эти шаги.

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

  2. Создайте пользовательский объект опции генерации решателя для использования решателя mpcToForcesOptions с входным параметром строки, который является любой "sparse" (чтобы создать разреженную проблему QP), или "dense" (чтобы создать плотную проблему QP). Используйте "sparse" если ваша проблема MPC имеет длинный горизонт предсказания и большое количество ограничений.

  3. Сгенерируйте пользовательский решатель и связанные переменные, содержащие структуры для ядра, состояния и онлайнового использования данных mpcToForces.

  4. В случае необходимости настройте состояние контроллера в переменных, содержащих структуру данных состояния, и задайте сигналы во время выполнения в переменной, содержащей онлайновую структуру данных.

  5. Симулируйте систему путем итеративного вызова mpcmoveFORCES. Для разреженных проблем QP файл MEX автоматически генерируется и используется, чтобы ускорить симуляцию.

Можно также сгенерировать производственный код. Например, чтобы сгенерировать файл MEX от mpcmoveForces с плотной формулировкой QP, где переменные coredata, statedata, и onlinedata были созданы mpcToForces, можно использовать этот код:

% configure code generation to create a MATLAB executable
cfg = coder.config('mex'); % or LIB, EXE, etc.
cfg.ConstantInputs = 'IgnoreValues';

% create an executable named myMex
codegen('-config',cfg,'mpcmoveForces','-o','myMex',...
        '-args',{coder.Constant(coredata), statedata, onlinedata});

% calculate the manipulated variables by calling the myMex executable
[mv, statedata, info] = myMex(coredata, statedata, onlinedata)

Чтобы спроектировать и симулировать линейный независимый от времени контроллер MPC в Simulink с помощью решателя решателя Embotech FORCESPRO QP, выполните эти шаги.

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

  2. Создайте пользовательский объект опции генерации решателя для использования решателя mpcToForcesOptions с входным параметром строки, который является любой "sparse" (чтобы создать разреженную проблему QP), или "dense" (чтобы создать плотную проблему QP). Используйте "sparse" если ваша проблема MPC имеет длинный горизонт предсказания и большое количество ограничений.

  3. Сгенерируйте пользовательский решатель и связанные переменные, содержащие структуры для ядра, состояний и онлайнового использования данных mpcToForces.

  4. Добавьте соответствующий блок в свою модель:

    • Для разреженной проблемы QP откройте браузер Библиотеки Simulink, найдите блок FORCES MPC (Sparse QP) под категорией FORCESPRO MPC Blocks и добавьте его в свою модель.

    • Для плотной проблемы QP откройте браузер Библиотеки Simulink, найдите блок MPC Controller под категорией Model Predictive Control Toolbox и добавьте его в свою модель.

  5. Задайте переменные структуры в диалоговом окне блока:

    • Для разреженной проблемы QP задайте переменные, содержащие ядро, и утверждает структуры данных.

    • Для плотной проблемы QP задайте mpc объект.

  6. Симулируйте систему.

  7. Когда необходимый, сгенерируйте код непосредственно из модели или блока.

Для получения дополнительной информации о том, как использовать решатели QP с Model Predictive Control Toolbox, см. Решатели QP.

Для получения дополнительной информации о решателе FORCESPRO QP см. документацию решателя Embotech FORCESPRO QP.

Примечание

Используя Решатель QP Embotech FORCESPRO для Адаптивных контроллеров MPC или контроллеров MPC с пользовательскими ограничениями не поддерживается.

Нелинейное программирование Embotech (NLP) решатель

Чтобы спроектировать и симулировать нелинейный контроллер MPC в MATLAB с помощью решателя Embotech FORCESPRO NLP, выполните эти шаги.

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

  2. Задайте пользовательское использование опций генерации решателя nlmpcToForcesOptions (или nlmpcMultistageToForcesOptions, если вы спроектировали многоступенчатый контроллер на предыдущем шаге). Для nlmpc объект, можно принять решение использовать решатель последовательного квадратичного программирования (SQP) вместо решателя внутренней точки (IP). Используйте решатель IP, если ваша нелинейная проблема MPC имеет длинный горизонт предсказания и большое количество ограничений. Для nlmpcMultistage объекты только решатель IP доступны.

  3. Сгенерируйте пользовательский решатель и связанные переменные, содержащие структуры для ядра, состояний и онлайнового использования данных nlmpcToForces, (или nlmpcMultistageToForces).

  4. Задайте состояния токового контроллера, последнее действие управления, и используйте переменную, содержащую онлайновую структуру данных, чтобы задать другие сигналы во время выполнения.

  5. Симулируйте систему путем итеративного вызова nlmpcmoveForces (или nlmpcmoveForcesMultistage). Файл MEX автоматически сгенерирован для двух функций, чтобы ускорить симуляцию в MATLAB.

Чтобы спроектировать и симулировать нелинейный контроллер MPC в Simulink с помощью решателя Embotech FORCESPRO NLP, выполните эти шаги.

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

  2. Задайте пользовательское использование опций генерации решателя nlmpcToForcesOptions (или nlmpcMultistageToForcesOptions, если вы спроектировали многоступенчатый контроллер на предыдущем шаге). Для nlmpc объект, можно принять решение использовать решатель последовательного квадратичного программирования (SQP) вместо решателя внутренней точки (IP). Используйте решатель IP, если ваша нелинейная проблема MPC имеет длинный горизонт предсказания и большое количество ограничений. Для nlmpcMultistage объекты только решатель IP доступны.

  3. Сгенерируйте пользовательский решатель и связанные переменные, содержащие структуры для ядра, состояний и онлайнового использования данных nlmpcToForces, (или nlmpcMultistageToForces).

  4. Откройте браузер Библиотеки Simulink, найдите блок FORCES Multistage Nonlinear MPC под категорией FORCESPRO MPC Blocks и добавьте его в свою модель.

  5. Задайте переменную, содержащую структуру фундаментальных выражений в диалоговом окне блока.

  6. Симулируйте систему.

  7. Когда необходимый, сгенерируйте код непосредственно из модели или блока.

Можно также сгенерировать код для модели Simulink как описано в разделе Code Generation in Simulink.

Примечание

Используя NLP Embotech FORCESPRO только поддерживается Решатель, когда и выходные функции состояния совместимы с генерацией кода MATLAB и с CasADi. Кроме того, для типового (который не является многоступенчатым), нелинейные проблемы MPC:

  • Вы не должны использовать пользовательскую стоимость и ограничительные функции.

  • Если нелинейный диспетчер MPC использует несколько дополнительных параметров, необходимо сгруппировать их в векторе отдельного столбца и установить Model.NumberOfParameters свойство контроллера к 1.

Для примера при использовании блока FORCES Nonlinear MPC смотрите Управление Swing Маятника Используя Нелинейное Прогнозирующее Управление Модели.

Похожие темы