В этом примере показано, как создать прогнозирующий контроллер модели с ненулевыми номинальными значениями.
Модель установки получают линеаризацией нелинейной установки в Simulink ® в ненулевой стационарной рабочей точке.
Для выполнения этого примера необходимы Design™ управления Simulink и Simulink.
if ~mpcchecktoolboxinstalled('simulink') disp('Simulink is required to run this example.') return end if ~mpcchecktoolboxinstalled('slcontrol') disp('Simulink Control Design is required to run this example.') return end
Нелинейная установка реализована в модели Simulink mpc_nloffsets и линеаризован в рабочем состоянии по умолчанию с использованием linearize из приложения Simulink Control Design.
Создайте спецификацию рабочей точки для исходного условия текущей модели.
plant_mdl = 'mpc_nloffsets';
op = operspec(plant_mdl);
Вычислите рабочую точку для этого начального условия.
[op_point, op_report] = findop(plant_mdl,op);
Operating point search report:
---------------------------------
Operating point search report for the Model mpc_nloffsets.
(Time-Varying Components Evaluated at time t=0)
Operating point specifications were successfully met.
States:
----------
(1.) mpc_nloffsets/Integrator
x: 0.575 dx: -1.82e-14 (0)
(2.) mpc_nloffsets/Integrator2
x: 2.15 dx: -8.38e-12 (0)
Inputs:
----------
(1.) mpc_nloffsets/In1
u: -1.25 [-Inf Inf]
Outputs:
----------
(1.) mpc_nloffsets/Out1
y: -0.529 [-Inf Inf]
Извлеките номинальное состояние, выходные и входные значения из вычисленной рабочей точки.
x0 = [op_report.States(1).x;op_report.States(2).x]; y0 = op_report.Outputs.y; u0 = op_report.Inputs.u;
Линеаризуйте растение в исходном состоянии.
plant = linearize(plant_mdl,op_point);
Создание объекта контроллера MPC с указанным временем выборки Ts, горизонт прогнозирования pи горизонт управления m.
Ts = 0.1; p = 20; m = 3; mpcobj = mpc(plant,Ts,p,m);
-->The "Weights.ManipulatedVariables" property of "mpc" object is empty. Assuming default 0.00000. -->The "Weights.ManipulatedVariablesRate" property of "mpc" object is empty. Assuming default 0.10000. -->The "Weights.OutputVariables" property of "mpc" object is empty. Assuming default 1.00000.
Установите номинальные значения в контроллере.
mpcobj.Model.Nominal = struct('X',x0,'U',u0,'Y',y0);
Установите модель шума выходного измерения (белый шум, нулевое среднее значение, дисперсия = 0,01).
mpcobj.Model.Noise = 0.1;
Задайте управляемое ограничение переменной.
mpcobj.MV.Max = 0.2;
Укажите опорное значение для выходного сигнала.
r0 = 1.5*y0;
Откройте и смоделируйте модель.
mdl = 'mpc_offsets';
open_system(mdl)
sim(mdl)
-->Converting model to discrete time. -->Assuming output disturbance added to measured output channel #1 is integrated white noise.



sim КомандаСмоделировать контроллер.
Tf = round(10/Ts); r = r0*ones(Tf,1); [y1,t1,u1,x1,xmpc1] = sim(mpcobj,Tf,r);
Постройте график и сравните результаты моделирования.
subplot(1,2,1) plot(y.time,y.signals.values,t1,y1,t1,r) legend('Nonlinear','Linearized','Reference') title('output') grid subplot(1,2,2) plot(u.time,u.signals.values,t1,u1) legend('Nonlinear','Linearized') title('input') grid

bdclose(plant_mdl) bdclose(mdl)