Обычно действительные системы нелинейны. Чтобы разработать контроллер MPC для нелинейной системы, необходимо смоделировать объект в Simulink®.
Несмотря на то, что контроллер MPC может отрегулировать нелинейный объект, модель, используемая в контроллере, должна быть линейной. Другими словами, контроллер использует линейную аппроксимацию нелинейного объекта. Точность этого приближения значительно влияет на производительность контроллера.
Чтобы получить такую линейную аппроксимацию, вы линеаризуете нелинейный объект в заданной рабочей точке.
Программное обеспечение Simulink Control Design™ должно быть установлено, чтобы линеаризовать нелинейные модели Simulink.
Можно линеаризовать модель Simulink:
Из командной строки.
Используя Linear Analysis Tool.
Используя 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; 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.49e-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 K. Заметьте, что установившаяся температура хладагента также дана как 299 K, который является номинальной стоимостью переменной, которой управляют, контроллера MPC.
Задавать:
Значения известных входных параметров, используйте поля 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: -1.42e-14 (0) (2.) CSTR_OpenLoop/CSTR/T_K x: 377 dx: 5.68e-14 (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 с помощью Linear Analysis Tool, обеспеченного продуктом Simulink Control Design.
Этот пример использует модель CSTR, CSTR_OpenLoop
.
Откройте модель Simulink
sys = 'CSTR_OpenLoop';
open_system(sys)
Открытый Linear Analysis Tool
В окне модели Simulink выберите Analysis> Control Design> Linear Analysis.
Задайте вводы и выводы линеаризации
Вводы и выводы линеаризации уже заданы для CSTR_OpenLoop
. Входные сигналы соответствуют выходным параметрам от Feed Concentration
, Feed Temperature
и блоков Coolant Temperature
. Выходные сигналы являются входными параметрами к блокам Residual Concentration
и CSTR Temperature
.
Задавать сигнал как a:
Вход Linearization, щелкните правой кнопкой по сигналу по окну модели Simulink и выберите Linear Analysis Points> Input Perturbation.
Linearization вывод, щелкните правой кнопкой по сигналу по окну модели Simulink и выберите Linear Analysis Points> Output Measurement.
Задайте остаточную концентрацию как известное ограничение для обрезки
В окне модели Simulink щелкните правой кнопкой по выходному сигналу CA
блока CSTR
. Выберите Linear Analysis Points> Trim Output Constraint.
В Linear Analysis Tool, во вкладке 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
уменьшают существенно.
Экспортируйте результат линеаризации
При необходимости можно повторить любой из этих шагов, чтобы улучшить производительность модели. Если вы удовлетворены своим результатом линеаризации, в Linear Analysis Tool, перетаскиваете мышью его от Linear Analysis Workspace до MATLAB Workspace. Можно теперь использовать линейную модель, чтобы разработать контроллер MPC.
Linear Analysis Tool | linearize