Создайте структуры данных для 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.
mpcobj
— Прогнозирующий контроллер моделиmpc
объект | explicitMPC
объектПрогнозирующий контроллер модели в виде одного из следующего:
mpc
объект — Неявный контроллер MPC
explicitMPC
объект — Явный контроллер MPC создал использование generateExplicitMPC
.
Задайте дополнительные разделенные запятой пары Name,Value
аргументы. Name
имя аргумента и Value
соответствующее значение. Name
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN
.
'DataType','single'
указывает, что сгенерированный код использует значения с плавающей точкой с одинарной точностью.'DataType'
— Тип данных используется в сгенерированном коде'double'
(значение по умолчанию) | 'single'
Тип данных, используемый в сгенерированном коде при использовании mpcmoveCodeGeneration
В виде заданного как разделенная запятой пара, состоящая из 'DataType'
и одно из следующего:
'double'
— Используйте значения плавающей точки двойной точности.
'single'
— Используйте значения с плавающей точкой с одинарной точностью.
'OnlyComputeCost'
— Переключитесь для вычисления только оптимальной стоимостиfalse
(значение по умолчанию) | true
Переключитесь для вычисления только оптимальной стоимости в процессе моделирования при использовании mpcmoveCodeGeneration
В виде заданного как разделенная запятой пара, состоящая из 'OnlyComputeCost'
и любой true
или false
. Чтобы уменьшать вычислительную загрузку, не вычисляя оптимальные данные о последовательности, установите OnlyComputeCost
к true
.
'IsAdaptive'
— Адаптивный индикатор MPCfalse
(значение по умолчанию) | true
Адаптивный индикатор MPC при использовании mpcmoveCodeGeneration
В виде заданного как разделенная запятой пара, состоящая из 'IsAdaptive'
и любой true
или false
. Установите IsAdaptive
к true
если ваш контроллер запускается в адаптивном режиме.
Для получения дополнительной информации об адаптивном MPC смотрите Адаптивный MPC.
Примечание
IsAdaptive
и IsLTV
не может быть true
одновременно.
'IsLTV'
— Изменяющийся во времени индикатор MPCfalse
(значение по умолчанию) | true
Изменяющийся во времени индикатор MPC при использовании mpcmoveCodeGeneration
В виде разделенной запятой пары, состоящей из 'IsLTV'
и любой true
или false
. Установите IsLTV
к true
если ваш контроллер запускается в изменяющемся во времени режиме.
Для получения дополнительной информации об изменяющемся во времени MPC смотрите Изменяющийся во времени MPC.
Примечание
IsAdaptive
и IsLTV
не может быть true
одновременно.
'UseVariableHorizon'
— Переменный индикатор горизонтаfalse
(значение по умолчанию) | true
Переменный индикатор горизонта при использовании mpcmoveCodeGeneration
В виде разделенной запятой пары, состоящей из 'UseVariableHorizon'
и любой true
или false
. Чтобы варьироваться ваше предсказание и горизонты управления во время выполнения, установите UseVariableHorizons
к true
.
Когда вы используете переменные горизонты, mpcmoveCodeGeneration
игнорирует горизонты, заданные в configData
и вместо этого использует предсказание и горизонт управления, заданный в onlineData.horizons
.
Для получения дополнительной информации смотрите, Настраивают Горизонты во Время выполнения.
configData
— Параметры конфигурации MPCПараметры конфигурации MPC, которые являются постоянными во время выполнения, возвратились как структура. Эти параметры выведены из настроек контроллера в mpcobj
. При симуляции контроллера передайте configData
к mpcmoveCodeGeneration
не изменяя параметров.
Для получения дополнительной информации о том, как сгенерированный код MPC использует постоянные матрицы в configData
чтобы решить задачу QP, см. Конструкцию задач QP для Сгенерированного кода C.
stateData
— Начальные состояния контроллераНачальные состояния контроллера, возвращенные как структура. Инициализировать вашу симуляцию начальными состояниями, заданными в mpcobj
, передайте stateData
к mpcmoveCodeGeneration
. Чтобы использовать различные начальные условия, измените stateData
. Можно задать состояния контроллера не по умолчанию с помощью InitialState
.
Для получения дополнительной информации о stateData
поля, смотрите mpcmoveCodeGeneration
.
stateData
имеет следующие поля.
Поле | Описание |
---|---|
Plant | Оценки состояния модели объекта управления |
Disturbance | Неизмеренные оценки состояния возмущения |
Noise | Выведите оценки состояния модели шума измерения |
LastMove | Управление переменными, которым управляют, перемещается от предыдущего контрольного интервала |
Covariance | Ковариационная матрица для контроллера утверждает оценки |
iA | Активные ограничения неравенства |
onlineData
— Онлайновый контроллер MPC данныеОнлайновый контроллер MPC данные, которые необходимо обновить в каждом контрольном интервале, возвратился как структура со следующими полями.
Поле | Описание | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
signals | Сигналы ввода и вывода, возвращенные как структура со следующими полями.
| ||||||||||||
limits | Ограничения ввода и вывода, возвращенные как структура со следующими полями:
Когда | ||||||||||||
weights | Обновленные веса оптимизации QP, возвращенные как структура со следующими полями:
Когда | ||||||||||||
customconstraints | Обновленные пользовательские смешанные ограничения ввода/вывода, возвращенные как структура со следующими полями:
Когда | ||||||||||||
horizons | Обновленные значения горизонта контроллера, возвращенные как структура со следующими полями:
Когда | ||||||||||||
model | Обновленный объект и номинальная стоимость для адаптивного MPC и изменяющегося во времени MPC, возвращенного как структура со следующими полями:
|
getCodeGenerationData
возвращает onlineData
с пустыми матрицами для всех полей структуры, кроме signals.ref
, signals.ym
, и signals.md
. Эти поля содержат соответствующие номинальные значения сигналов от mpcobj
. Если у вашего контроллера нет измеренных воздействий, signals.md
возвращен как пустая матрица.
Для получения дополнительной информации о конфигурировании onlineData
поля, смотрите mpcmoveCodeGeneration
.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.