getCodeGenerationData

Создайте структуры данных для mpcmoveCodeGeneration

Описание

Используйте эту функцию для создания структур данных для mpcmoveCodeGeneration функция, которая вычисляет оптимальные ходы управления для неявных и явных линейных контроллеров MPC.

Для получения информации о генерации структур данных для nlmpcmoveCodeGeneration, см. getCodeGenerationData.

пример

[configData,stateData,onlineData] = getCodeGenerationData(mpcobj) создает структуры данных для использования с mpcmoveCodeGeneration.

пример

[___] = getCodeGenerationData(___,Name,Value) задает дополнительные опции, используя один или несколько Name,Value аргументы в виде пар.

Примеры

свернуть все

Создайте модель объекта управления и определите типы сигналов MPC.

plant = rss(3,2,2);
plant.D = 0;
plant = setmpcsignals(plant,'mv',1,'ud',2,'mo',1,'uo',2);

Создайте контроллер MPC.

mpcObj = mpc(plant,0.1);
-->The "PredictionHorizon" property of "mpc" object is empty. Trying PredictionHorizon = 10.
-->The "ControlHorizon" property of the "mpc" object is empty. Assuming 2.
-->The "Weights.ManipulatedVariables" property of "mpc" object is empty. Assuming default 0.00000.
-->The "Weights.ManipulatedVariablesRate" property of "mpc" object is empty. Assuming default 0.10000.
-->The "Weights.OutputVariables" property of "mpc" object is empty. Assuming default 1.00000.
   for output(s) y1 and zero weight for output(s) y2 

Сконфигурируйте параметры контроллера. Для примера задайте границы для манипулируемой переменной.

mpcObj.ManipulatedVariables.Min = -1;
mpcObj.ManipulatedVariables.Max = 1;

Создайте структуры данных генерации кода.

[configData,stateData,onlineData] = getCodeGenerationData(mpcObj);
-->Converting model to discrete time.
-->The "Model.Disturbance" property of "mpc" object is empty:
   Assuming unmeasured input disturbance #2 is integrated white noise.
   Assuming no disturbance added to measured output channel #1.
-->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.
-->Converting model to discrete time.
-->The "Model.Disturbance" property of "mpc" object is empty:
   Assuming unmeasured input disturbance #2 is integrated white noise.
   Assuming no disturbance added to measured output channel #1.
-->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.

Создайте модель объекта управления и определите типы сигналов MPC.

plant = rss(3,2,2);
plant.D = 0;

Создайте контроллер MPC.

mpcObj = mpc(plant,0.1);
-->The "PredictionHorizon" property of "mpc" object is empty. Trying PredictionHorizon = 10.
-->The "ControlHorizon" property of the "mpc" object is empty. Assuming 2.
-->The "Weights.ManipulatedVariables" property of "mpc" object is empty. Assuming default 0.00000.
-->The "Weights.ManipulatedVariablesRate" property of "mpc" object is empty. Assuming default 0.10000.
-->The "Weights.OutputVariables" property of "mpc" object is empty. Assuming default 1.00000.

Создайте структуры данных генерации кода. Сконфигурируйте опции для:

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

  • Улучшите вычислительную эффективность, не вычисляя оптимальные данные последовательности.

  • Запустите контроллер MPC в адаптивном режиме.

[configData,stateData,onlineData] = getCodeGenerationData(mpcObj,...
    'DataType','single','OnlyComputeCost',true,'IsAdaptive',true);
-->Converting model to discrete time.
-->Assuming output disturbance added to measured output channel #1 is integrated white noise.
-->Assuming output disturbance added to measured output channel #2 is integrated white noise.
-->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.
-->Converting model to discrete time.
-->Assuming output disturbance added to measured output channel #1 is integrated white noise.
-->Assuming output disturbance added to measured output channel #2 is integrated white noise.
-->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.

Входные параметры

свернуть все

Моделируйте прогнозирующий контроллер, заданный как один из следующих:

  • mpc объект - Неявный контроллер MPC

  • explicitMPC объект - Явный контроллер, созданный с помощью generateExplicitMPC.

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: 'DataType','single' задает, что в сгенерированном коде используются значения с плавающей точкой с одной точностью.

Начальное состояние контроллера при использовании mpcmoveCodeGeneration, заданная как разделенная разделенными запятой парами, состоящая из 'InitialState' и mpcstate объект. Это состояние используется вместо информации о состоянии по умолчанию от mpcobj.

Тип данных, используемый в сгенерированном коде при использовании mpcmoveCodeGeneration, заданный как разделенная разделенными запятой парами, состоящая из 'DataType' и одно из следующих:

  • 'double' - Используйте значения с плавающей точкой двойной точности.

  • 'single' - Используйте значения с плавающей точкой с одной точностью.

Переключение для вычисления только оптимальных затрат во время симуляции при использовании mpcmoveCodeGeneration, заданный как разделенная разделенными запятой парами, состоящая из 'OnlyComputeCost' и любой из них true или false. Чтобы уменьшить вычислительную нагрузку путем не вычисления оптимальных данных последовательности, установите OnlyComputeCost на true.

Адаптивный индикатор MPC при использовании mpcmoveCodeGeneration, заданный как разделенная разделенными запятой парами, состоящая из 'IsAdaptive' и любой из них true или false. Задайте IsAdaptive на true если ваш контроллер работает в адаптивном режиме.

Дополнительные сведения об адаптивном MPC см. в разделе Адаптивный MPC.

Примечание

IsAdaptive и IsLTV невозможно true одновременно.

Изменяющийся во времени индикатор MPC при использовании mpcmoveCodeGeneration, заданная как разделенная разделенными запятой парами, состоящая из 'IsLTV' и любой из них true или false. Задайте IsLTV на true если ваш контроллер работает в изменяющемся во времени режиме.

Для получения дополнительной информации о меняющемся во времени MPC, смотрите Изменяющийся во времени MPC.

Примечание

IsAdaptive и IsLTV невозможно true одновременно.

Индикатор переменного горизонта при использовании mpcmoveCodeGeneration, заданная как разделенная разделенными запятой парами, состоящая из 'UseVariableHorizon' и любой из них true или false. Чтобы изменить свое предсказание и управлять горизонтами во время исполнения, установите UseVariableHorizons на true.

Когда вы используете переменные горизонты, mpcmoveCodeGeneration игнорирует горизонты, заданные в configData и вместо этого использует горизонт предсказания и управления, указанный в onlineData.horizons.

Для получения дополнительной информации смотрите Настроить горизонты во время выполнения.

Выходные аргументы

свернуть все

Параметры конфигурации MPC, которые являются постоянными во время исполнения, возвращаются как структура. Эти параметры получают из настроек контроллера в mpcobj. При симуляции контроллера передайте configData кому mpcmoveCodeGeneration без изменения параметров.

Для получения дополнительной информации о том, как сгенерированный код MPC использует постоянные матрицы в configData для решения проблемы QP смотрите Конструкцию задачи QP для сгенерированного кода C.

Начальные состояния контроллера, возвращенные как структура. Чтобы инициализировать симуляцию с начальными состояниями, определенными в mpcobj, передайте stateData кому mpcmoveCodeGeneration. Чтобы использовать другие начальные условия, измените stateData. Можно задать состояния недефакта контроллера, используя InitialState.

Для получения дополнительной информации о stateData поля, см. mpcmoveCodeGeneration.

stateData имеет следующие поля.

ОбластьОписание
Plant

Оценки состояния модели объекта управления

Disturbance

Оценки состояния неизмеренной модели возмущения

Noise

Выходы состояния модели шума выходного измерения

LastMove

Управляемое управление переходит с предыдущего контрольного интервала

Covariance

Ковариационная матрица для оценок состояния контроллера

iA

Ограничения активного неравенства

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

ОбластьОписание
signals

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

ОбластьОписание
ymИзмеренные выходы
refВыходные ссылки
mdИзмеренные нарушения порядка
mvTargetЦели для манипулируемых переменных
externalMVМанипулируемые переменные, внешне примененные к объекту

limits

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

ОбластьОписание
yminНижние границы выходных сигналов
ymaxВерхние границы выходных сигналов
uminНижние границы входных сигналов
umaxВерхние границы входных сигналов

Когда mpcobj является явным контроллером MPC, mpcmoveCodeGeneration игнорирует limits поле.

weights

Обновленные веса оптимизации QP, возвращенные как структура со следующими полями:

ОбластьОписание
ywtВыходы веса
uwtМанипулируемые переменные веса
duwtМанипулируемые веса переменных скоростей
ecrВес на переменную slack, используемую для смягчения ограничений

Когда mpcobj является явным контроллером MPC, mpcmoveCodeGeneration игнорирует weights поле.

customconstraints

Обновлены пользовательские смешанные ограничения ввода/вывода, возвращенные как структура со следующими полями:

ОбластьОписание
E Манипулируемая переменная константа ограничения
FУправляемая выходная константа ограничения
GСмешанная константа входного/выходного ограничения
SИзмеренная нарушением порядка константа ограничения

Когда mpcobj является явным контроллером MPC, mpcmoveCodeGeneration игнорирует customconstraints поле.

horizons

Обновленные значения горизонта контроллера, возвращенные как структура со следующими полями:

ОбластьОписание
p Горизонт предсказания
mГоризонт управления

The horizons возвращается только тогда, когда UseVariableHorizon Пара "имя-значение" true.

Когда mpcobj является явным контроллером MPC, mpcmoveCodeGeneration игнорирует horizons поле.

model

Обновленные заводские и номинальные значения для адаптивного MPC и изменяющегося во времени MPC, возвращенные как структура со следующими полями:

ОбластьОписание
A, B, C, DМатрицы пространства состояний модели пространства состояний в дискретном времени.
XНоминальные состояния объекта
UНоминальные входы объекта управления
YНоминальные выходные параметры объекта выходов
DXНоминальные производные по состоянию объекта

The model возвращается только тогда, когда IsAdaptive или IsLTV Пара "имя-значение" true.

getCodeGenerationData возвращает onlineData с пустыми матрицами для всех структурных полей, кроме signals.ref, signals.ym, и signals.md. Эти поля содержат соответствующие номинальные значения сигналов от mpcobj. Если ваш контроллер не имеет измеренных нарушений порядка, signals.md возвращается как пустая матрица.

Для получения дополнительной информации о настройке onlineData поля, см. mpcmoveCodeGeneration.

Введенный в R2016a