Линеаризуйте модели Simulink

Обычно действительные системы нелинейны. Чтобы спроектировать контроллер MPC для нелинейной системы, можно смоделировать объект в Simulink®.

Несмотря на то, что контроллер MPC может отрегулировать нелинейный объект, модель, используемая в контроллере, должна быть линейной. Другими словами, контроллер использует линейную аппроксимацию нелинейного объекта. Точность этого приближения значительно влияет на эффективность контроллера.

Чтобы получить такую линейную аппроксимацию, вы линеаризуете нелинейный объект в заданной рабочей точке.

Примечание

Программное обеспечение Simulink Control Design™ должно быть установлено, чтобы линеаризовать нелинейные модели Simulink.

Можно линеаризовать модель Simulink:

Линеаризация Используя код MATLAB

В этом примере показано, как получить линейную модель объекта с помощью скрипта MATLAB.

Для этого примера модель CSTR, CSTR_OpenLoop, линеаризуется. Входные параметры модели являются температурой хладагента (переменная, которой управляют, контроллера MPC), ограничивая концентрацию реагента в потоке канала, и питают температуру. Состояния модели являются температурой и концентрацией ограничивающего реагента в потоке продукта. Оба состояния измеряются и используются для управления с обратной связью.

Получите установившуюся рабочую точку

Рабочая точка задает номинальные условия, при которых вы линеаризуете модель. Это обычно - установившееся условие.

Предположим, что вы планируете управлять CSTR с выходной концентрацией, C_A, в 2kmol/m3. Номинальная концентрация канала 10kmol/m3, и номинальная температура канала является 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 = 2kmol/m3 и 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.

Линеаризация Используя Model Linearizer в Simulink Control Design

В этом примере показано, как линеаризовать модель 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.

Смотрите также

(Simulink Control Design) | (Simulink Control Design)

Похожие темы