Как для неявных, так и для адаптивных контроллеров MPC, можно настроить горизонты предсказания и управления во время работы контроллера. Это может быть полезно для:
Эффективная оценка различных вариантов горизонта во время исполнения во время прототипирования
Корректировка горизонтов без перераспределения после существенного изменения динамики объекта, например, в пакетном процессе
Чтобы настроить горизонты во время исполнения из командной строки, на каждом интервале управления задайте следующие свойства mpcmoveopt
объект.
PredictionHorizon
- Сигнал горизонта прогноза во время предсказания, заданный как положительное целое число
ControlHorizon
- Сигнал управляемого горизонта во время выполнения, заданный как положительное целое число или вектор положительных целых чисел
Затем можно передать mpcmoveopt
объект для любого из них mpcmove
или mpcmoveAdaptive
.
В Simulink®, чтобы настроить горизонты для MPC Controller или Adaptive MPC Controller блока, выберите параметр Adjust prediction horizon and control horizon at run time. Это добавляет следующие входные порты в блок:
p
- Сигнал горизонта предсказания во времени, заданный как скалярный целочисленный сигнал
m
- Рабочий сигнал горизонта управления, заданный как скалярный или векторный сигнал
Необходимо задать максимальный горизонт предсказания с помощью параметра Maximum prediction horizon. Это гарантирует, что оптимальные выходные порты последовательности блока (mv.seq
, x.seq
, и y.seq
) имеют постоянные размеры с pmax + 1 строками, где pmax является максимальным горизонтом предсказания.
Настройка горизонта во время выполнения поддерживает генерацию кода в обоих MATLAB® и Simulink. Генерация кода для контроллера, который поддерживает изменения горизонта во время выполнения, позволяет вам настраивать значения горизонта на развернутом оборудовании контроллера.
После настройки значений горизонта, чтобы улучшить вычислительную эффективность вашего окончательно развернутого контроллера, можно сгенерировать код для контроллера с постоянным горизонтом с помощью настроенных значений.
Развертывание контроллера с включенной настройкой горизонта во время выполнения значительно увеличивает вычислительную нагрузку и объем памяти вашего приложения MPC. Если вы планируете использовать настройку горизонта во время выполнения только для прототипирования, чтобы найти соответствующие значения горизонта, после настройки убедитесь, что эта функция отключена. Затем можно сгенерировать код с контроллером с постоянным горизонтом, используя настроенные значения.
Если ваш контроллер использует манипулированную блокировку переменных, и вы генерируете код для вашего контроллера, размер вектора горизонта управления должен оставаться постоянным во время выполнения. В этом случае можно по-прежнему настраивать значения в векторе управляющего горизонта.
Примечание
Чтобы сгенерировать код для контроллера, который использует настройку горизонта во время выполнения, ваша развернутая аппаратная цель должна поддерживать динамическое выделение памяти. Например, если ваша встраиваемая система не поддерживает malloc
Функция C, тогда сгенерированный код не запустится.
Чтобы сгенерировать код в MATLAB, установите 'UseVariableHorizon'
пара "имя-значение" getCodeGenerationData
на true
. На каждом контрольном интервале можно затем задать горизонты перед вызовом mpcmoveCodeGeneration
.
[configData,stateData,onlineData] = getCodeGenerationData(mpcobj,'UseVariableHorizon',true); ... onlineData.Horizons.p = 10; onlineData.Horizons.m = 3; [u,stateData] = mpcmoveCodeGeneration(configData,stateData,onlineData);
Если ваше приложение использует параметры контроллера, которые изменяются в пределах горизонта предсказания, корректировка горизонта предсказания во время исполнения влияет на поведение этих изменяющихся во времени параметров.
Если вы задаете изменяющиеся во времени ограничения в объекте контроллера, профиль ограничений на горизонте предсказания не меняется во время исполнения. Если ваше значение горизонта предсказания во время Pr является:
Больше длины профиля ограничений, заданного в вашем контроллере, затем контроллер использует окончательное значение профиля ограничений для остальной части горизонта предсказания
Меньше длины профиля ограничений, заданной в вашем контроллере, затем контроллер обрезает профиль ограничений после Pr шагов
Дополнительные сведения о корректировке ограничений см. в разделе «Обновление ограничений во время выполнения».
Чтобы изменить веса настройки во время выполнения, вы задаете массивы весов, где количество строк не должно превышать длину горизонтов предсказания. Если вы корректируете горизонт предсказания во время исполнения, лучшая практика также настроить количество строк в массивы весов настройки, чтобы соответствовать новому значению горизонта.
Если вы не корректируете размеры массивов весов настройки, количество строк расширяется или усекается способом, подобным изменяющейся во времени длине профиля ограничения.
Дополнительные сведения о настройке весов см. в разделе Настройка весов во время выполнения.
Для линейного изменяющегося во времени контроллера MPC вы варьируете модель объекта управления и номинальные условия по горизонту предсказания. Если вы корректируете горизонт предсказания во время исполнения, лучшая практика также настроить длины вашей изменяющейся во времени модели и номинальных массивов условий, чтобы соответствовать новому значению горизонта.
Если вы не корректируете длины модели и номинальных массивов условий, массивы расширяются или обрезаются способом, подобным изменяющемуся во времени профилю ограничений.
Для получения дополнительной информации о линейном меняющемся во времени MPC, смотрите Изменяющийся во времени MPC.