Обычно действительные системы нелинейны. Чтобы спроектировать контроллер MPC для нелинейной системы, можно смоделировать объект в Simulink®.
Несмотря на то, что контроллер MPC может регулировать нелинейный объект, модель, используемая в контроллере, должна быть линейной. Другими словами, контроллер использует линейное приближение нелинейного объекта. Точность этого приближения значительно влияет на эффективность контроллера.
Чтобы получить такое линейное приближение, вы линеаризируете нелинейный объект в заданной рабочей точке.
Примечание
Программное обеспечение Simulink Control Design™ должно быть установлено, чтобы линеаризировать нелинейные модели Simulink.
Можно линеаризировать модель Simulink:
Из командной строки.
Использование Model Linearizer.
Использование MPC Designer. Для получения примера смотрите Linearize Simulink Models Using MPC Designer.
В этом примере показано, как получить линейную модель объекта с помощью скрипта MATLAB.
В данном примере модель CSTR, CSTR_OpenLoop
, линеаризируется. Входами модели являются температура хладагента (манипулируемая переменная контроллера MPC), ограничивающая концентрацию реагента в потоке сырья и температуру подачи. Состояниями модели являются температура и концентрация ограничивающего реагента в потоке продукта. Оба состояния измеряются и используются для управления с обратной связью.
Получение установившейся рабочей точки
Рабочая точка определяет номинальные условия, при которых вы линеаризируете модель. Обычно это установившееся условие.
Предположим, что вы планируете управлять CSTR с выходом концентрацией C_A
, при . Номинальная концентрация сырья , и номинальная температура подачи составляет 300 К. Создайте объект спецификации рабочей точки, чтобы определить установившиеся условия.
opspec = operspec('CSTR_OpenLoop'); opspec = addoutputspec(opspec,'CSTR_OpenLoop/CSTR',2); opspec.Outputs(1).Known = true; opspec.Outputs(1).y = 2; op1 = findop('CSTR_OpenLoop',opspec);
Operating point search report: --------------------------------- Operating point search report for the Model CSTR_OpenLoop. (Time-Varying Components Evaluated at time t=0) Operating point specifications were successfully met. States: ---------- (1.) CSTR_OpenLoop/CSTR/C_A x: 2 dx: -4.6e-12 (0) (2.) CSTR_OpenLoop/CSTR/T_K x: 373 dx: 5.48e-11 (0) Inputs: ---------- (1.) CSTR_OpenLoop/Coolant Temperature u: 299 [-Inf Inf] Outputs: ---------- (1.) CSTR_OpenLoop/CSTR y: 2 (2)
Вычисленная рабочая точка C_A
= и T_K
= 373 К. Заметьте, что установившаяся температура теплоносителя также определяется как 299 К, что является номинальным значением управляемой переменной контроллера ПДК.
Чтобы задать:
Значения известных входов, используйте Input.Known
и Input.u
поля opspec
Начальные предположения для значений состояния, используйте State.x
область opspec
Для примера следующий код задает температуру хладагента как 305 K и начальные значения прогноза C_A
и T_K
состояния перед вычислением установившейся рабочей точки:
opspec = operspec('CSTR_OpenLoop'); opspec.States(1).x = 1; opspec.States(2).x = 400; opspec.Inputs(1).Known = true; opspec.Inputs(1).u = 305; op2 = findop('CSTR_OpenLoop',opspec);
Operating point search report: --------------------------------- Operating point search report for the Model CSTR_OpenLoop. (Time-Varying Components Evaluated at time t=0) Operating point specifications were successfully met. States: ---------- (1.) CSTR_OpenLoop/CSTR/C_A x: 1.78 dx: -4.8e-14 (0) (2.) CSTR_OpenLoop/CSTR/T_K x: 377 dx: 5.4e-13 (0) Inputs: ---------- (1.) CSTR_OpenLoop/Coolant Temperature u: 305 Outputs: None ----------
Задайте входы и выходы линеаризации
Если входные и выходные сигналы линеаризации уже определены в модели, как в CSTR_OpenLoop
, затем используйте следующее для получения набора сигналов.
io = getlinio('CSTR_OpenLoop');
В противном случае задайте входной и выходной сигналы как показано здесь.
io(1) = linio('CSTR_OpenLoop/Coolant Temperature',1,'input'); io(2) = linio('CSTR_OpenLoop/Feed Concentration',1,'input'); io(3) = linio('CSTR_OpenLoop/Feed Temperature',1,'input'); io(4) = linio('CSTR_OpenLoop/CSTR',1,'output'); io(5) = linio('CSTR_OpenLoop/CSTR',2,'output');
Линеаризация модели
Линеаризируйте модель с помощью заданной рабочей точки, op1
, и входные/выходные сигналы, io
.
sys = linearize('CSTR_OpenLoop',op1,io)
sys = A = C_A T_K C_A -5 -0.3427 T_K 47.68 2.785 B = Coolant Temp Feed Concent Feed Tempera C_A 0 1 0 T_K 0.3 0 1 C = C_A T_K CSTR/1 0 1 CSTR/2 1 0 D = Coolant Temp Feed Concent Feed Tempera CSTR/1 0 0 0 CSTR/2 0 0 0 Continuous-time state-space model.
В этом примере показано, как линеаризировать модель Simulink с помощью Model Linearizer, предоставленной программным обеспечением Simulink Control Design.
Откройте модель Simulink
Этот пример использует модель CSTR, CSTR_OpenLoop
.
open_system('CSTR_OpenLoop')
Задайте входы и выходы линеаризации
Входы и выходы линеаризации уже заданы для CSTR_OpenLoop
. Входные сигналы соответствуют выходам от Feed Concentration
, Feed Temperature
, и Coolant Temperature
блоки. Сигналы выхода являются входами в CSTR Temperature
и Residual Concentration
блоки.
Чтобы задать сигнал в качестве входных или выходных входов линеаризации, сначала откройте вкладку Linearization. Для этого в галерее Apps Simulink нажмите Linearization Manager. Затем в окне модели Simulink щелкните сигнал.
Чтобы задать сигнал как:
Вход линеаризации, на вкладке Linearization, в галерее Insert Analysis Points, нажмите Input Perturbation.
Выход линеаризации на вкладке Linearization, в галерее Insert Analysis Points, нажмите Output Measurement.
Откройте Model Linearizer
Чтобы открыть Model Linearizer, в галерее Apps нажмите Model Linearizer.
Задайте остаточную концентрацию как известное ограничение обрезки
В окне модели нажмите CA
выходной сигнал от CSTR
блок. Затем на вкладке Linearization, в галерее Insert Analysis Points, нажмите Trim Output Constraint.
В Model Linearizer на вкладке Linear Analysis выберите Operating Point > Trim Model.
В диалоговом окне «Обрезка модели» на вкладке «Outputs»:
Установите флажок Known для Channel - 1
под CSTR_OpenLoop/CSTR.
Установите соответствующий Value равным 2
кмоль/м3.
Создайте и проверьте рабочую точку
В диалоговом окне «Обрезка модели» нажмите кнопку Start trimming.
Рабочая точка op_trim1
отображается в Linear Analysis Workspace.
Дважды кликните op_trim1
для просмотра получившейся рабочей точки.
В диалоговом окне «Редактирование» выберите вкладку Input.
При желании температура хладагента в установившемся состоянии составляет 299 К.
Линеаризация модели
На вкладке Linear Analysis в раскрывающемся списке Operating Point выберите op_trim1
.
Щелкните Step, чтобы линеаризировать модель.
Эта опция создает линейную модель linsys1
в Linear Analysis Workspace и генерирует переходную характеристику для этой модели. linsys1
использует optrim1
в качестве его рабочей точки.
Значение переходной характеристики от концентрации сырья до выходного CSTR/2
отображает интересный обратный ответ. Исследование линейной модели показывает, что CSTR/2
- остаточная концентрация CSTR, C_A
. Когда концентрация корма увеличивается, C_A
первоначально увеличивается, потому что поступает больше реагента, что увеличивает скорость реакции. Это увеличение скорости приводит к более высокой температуре реактора (на выходе CSTR/1
), что дополнительно увеличивает скорость реакции и C_A
резко уменьшается.
Экспорт результатов линеаризации
При необходимости можно повторить любой из этих шагов, чтобы улучшить производительность модели. Как только вы удовлетворены результатом линеаризации, в Model Linearizer перетащите его из Linear Analysis Workspace в MATLAB Workspace. Теперь можно использовать линейную модель для разработки контроллера MPC.
linearize
(Simulink Control Design) | Model Linearizer (Simulink Control Design)