Обычно действительные системы нелинейны. Чтобы спроектировать контроллер MPC для нелинейной системы, можно смоделировать объект в Simulink®.
Несмотря на то, что контроллер MPC может отрегулировать нелинейный объект, модель, используемая в контроллере, должна быть линейной. Другими словами, контроллер использует линейную аппроксимацию нелинейного объекта. Точность этого приближения значительно влияет на эффективность контроллера.
Чтобы получить такую линейную аппроксимацию, вы линеаризуете нелинейный объект в заданной рабочей точке.
Примечание
Программное обеспечение Simulink Control Design™ должно быть установлено, чтобы линеаризовать нелинейные модели Simulink.
Можно линеаризовать модель Simulink:
Из командной строки.
Используя Model Linearizer.
Используя MPC Designer. Для примера смотрите, Линеаризуют Модели Simulink Используя MPC Designer.
В этом примере показано, как получить линейную модель объекта с помощью скрипта MATLAB.
Для этого примера модель CSTR, CSTR_OpenLoop, линеаризуется. Входные параметры модели являются температурой хладагента (переменная, которой управляют, контроллера MPC), ограничивая концентрацию реагента в потоке канала, и питают температуру. Состояния модели являются температурой и концентрацией ограничивающего реагента в потоке продукта. Оба состояния измеряются и используются для управления с обратной связью.
Получите установившуюся рабочую точку
Рабочая точка задает номинальные условия, при которых вы линеаризуете модель. Это обычно - установившееся условие.
Предположим, что вы планируете управлять CSTR с выходной концентрацией, C_A, в . Номинальная концентрация канала , и номинальная температура канала является 300 K.
Создайте и визуализируйте объект спецификации рабочей точки задать установившиеся условия.
opspec = operspec('CSTR_OpenLoop'); opspec = addoutputspec(opspec,'CSTR_OpenLoop/CSTR',2); opspec.Outputs(1).Known = true; opspec.Outputs(1).y = 2; opspec
opspec =
Operating point specification for the Model CSTR_OpenLoop.
(Time-Varying Components Evaluated at time t=0)
States:
----------
x Known SteadyState Min Max dxMin dxMax
______ _____ ___________ ___ ___ _____ _____
(1.) CSTR_OpenLoop/CSTR/C_A
8.5695 false true 0 Inf -Inf Inf
(2.) CSTR_OpenLoop/CSTR/T_K
311.27 false true 0 Inf -Inf Inf
Inputs:
----------
u Known Min Max
_ _____ ____ ___
(1.) CSTR_OpenLoop/Coolant Temperature
0 false -Inf Inf
Outputs:
----------
y Known Min Max
_ _____ ____ ___
(1.) CSTR_OpenLoop/CSTR
2 true -Inf Inf
Ищите рабочую точку, которая удовлетворяет техническим требованиям.
op1 = findop('CSTR_OpenLoop',opspec);Operating point search report: ---------------------------------
opreport =
Operating point search report for the Model CSTR_OpenLoop.
(Time-Varying Components Evaluated at time t=0)
Operating point specifications were successfully met.
States:
----------
Min x Max dxMin dx dxMax
___ ______ ___ _____ ___________ _____
(1.) CSTR_OpenLoop/CSTR/C_A
0 2 Inf 0 -4.5972e-12 0
(2.) CSTR_OpenLoop/CSTR/T_K
0 373.13 Inf 0 5.4897e-11 0
Inputs:
----------
Min u Max
____ ______ ___
(1.) CSTR_OpenLoop/Coolant Temperature
-Inf 299.03 Inf
Outputs:
----------
Min y Max
___ _ ___
(1.) CSTR_OpenLoop/CSTR
2 2 2
Расчетной рабочей точкой является C_A = и T_K = 373 K. Заметьте, что установившаяся температура хладагента также дана как 299 K, который является номинальной стоимостью входа, используемого, чтобы управлять объектом.
Задавать:
Значения известных входных параметров, используйте 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: ---------------------------------
opreport =
Operating point search report for the Model CSTR_OpenLoop.
(Time-Varying Components Evaluated at time t=0)
Operating point specifications were successfully met.
States:
----------
Min x Max dxMin dx dxMax
___ ______ ___ _____ ___________ _____
(1.) CSTR_OpenLoop/CSTR/C_A
0 1.7787 Inf 0 -1.4211e-14 0
(2.) CSTR_OpenLoop/CSTR/T_K
0 376.54 Inf 0 5.6843e-14 0
Inputs:
----------
Min u Max
___ ___ ___
(1.) CSTR_OpenLoop/Coolant Temperature
305 305 305
Outputs: None
----------
op2 =
Operating point for the Model CSTR_OpenLoop.
(Time-Varying Components Evaluated at time t=0)
States:
----------
x
______
(1.) CSTR_OpenLoop/CSTR/C_A
1.7787
(2.) CSTR_OpenLoop/CSTR/T_K
376.54
Inputs:
----------
u
___
(1.) CSTR_OpenLoop/Coolant Temperature
305
Задайте вводы и выводы линеаризации
Если сигналы ввода и вывода линеаризации уже заданы в модели, как в 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.
Линеаризуйте модель также вокруг рабочей точки, op2, использование тех же сигналов ввода/вывода.
sys = linearize('CSTR_OpenLoop',op2,io)sys =
A =
C_A T_K
C_A -5.622 -0.3458
T_K 55.1 2.822
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 кликните по сигналу.
Задавать сигнал как a:
Вход Linearization, на вкладке Linearization, в галерее Insert Analysis Points, нажимает Input Perturbation.
Linearization выход, на вкладке Linearization, в галерее Insert Analysis Points, нажимает Output Measurement.
Открытый Model Linearizer
Чтобы открыть Model Linearizer, в галерее Apps, нажимают Model Linearizer.

Задайте остаточную концентрацию как известное ограничение для обрезки
В окне модели Simulink нажмите 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 kmol/m3.

Создайте и проверьте рабочую точку
В Обрезке диалоговое окно модели нажмите Start trimming.
Рабочая точка op_trim1 отображения в Linear Analysis Workspace.

Дважды щелкните по op_trim1 просмотреть получившуюся рабочую точку.
В диалоговом окне Edit выберите вкладку Input.

Температура хладагента в устойчивом состоянии является 299 K, как желаемый.
Линеаризуйте модель
На вкладке 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)