Создайте структуры данных для 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
объект - Явный контроллер, созданный с помощью generateExplicitMPC
.
Задайте необязательные разделенные разделенными запятой парами Name,Value
аргументы. Name
- имя аргумента и Value
- соответствующее значение. Name
должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN
.
'DataType','single'
задает, что в сгенерированном коде используются значения с плавающей точкой с одной точностью.'InitialState'
- Начальное состояние контроллераmpcstate
объект'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 | Обновленные значения горизонта контроллера, возвращенные как структура со следующими полями:
The Когда | ||||||||||||
model | Обновленные заводские и номинальные значения для адаптивного MPC и изменяющегося во времени MPC, возвращенные как структура со следующими полями:
The |
getCodeGenerationData
возвращает onlineData
с пустыми матрицами для всех структурных полей, кроме signals.ref
, signals.ym
, и signals.md
. Эти поля содержат соответствующие номинальные значения сигналов от mpcobj
. Если ваш контроллер не имеет измеренных нарушений порядка, signals.md
возвращается как пустая матрица.
Для получения дополнительной информации о настройке onlineData
поля, см. mpcmoveCodeGeneration
.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.