Разрабатывающий образцовый прогнозирующий диспетчер в рабочей точке равновесия

Этот пример показывает, как разработать образцовый прогнозирующий контроллер с ненулевой номинальной стоимостью.

Модель объекта управления получена линеаризацией нелинейного объекта в Simulink® в ненулевой рабочей точке устойчивого состояния.

Линеаризуйте нелинейную модель объекта управления

Чтобы запустить этот пример, Simulink® и Simulink Control Design® требуются.

if ~mpcchecktoolboxinstalled('simulink')
    disp('Simulink(R) is required to run this example.')
    return
end
if ~mpcchecktoolboxinstalled('slcontrol')
    disp('Simulink Control Design(R) is required to run this example.')
    return
end

Нелинейный объект реализуется в модели Simulink® "mpc_nloffsets" и линеаризуется в условиях работы по умолчанию с помощью "линеаризовать" команды от Simulink Control Design®.

Создайте спецификацию рабочей точки.

plant_mdl = 'mpc_nloffsets';
op = operspec(plant_mdl);
% Compute initial condition.
[op_point, op_report] = findop(plant_mdl,op);
% Obtain nominal values of x, y and u.
x0 = [op_report.States(1).x;op_report.States(2).x];
y0 = op_report.Outputs.y;
u0 = op_report.Inputs.u;
% Obtain linear plant at the initial condition.
plant = linearize(plant_mdl, op_point);
 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]

Разработайте контроллер MPC

Создайте объект контроллера с выборкой периода, прогноза и управляйте горизонтами:

Ts = 0.1;                 % Sampling time
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);

Установите выходную модель шума измерения (белый шум, обнулите среднее значение, variance=0.01),

mpcobj.Model.Noise = 0.1;

Установите ограничение мВ.

mpcobj.MV.Max = 0.2;

Моделируйте Используя Simulink®

Ссылочный сигнал для выходного вектора

r0 = 1.5*y0;
% Simulate
mdl = 'mpc_offsets';
open_system(mdl)    % Open Simulink(R) Model
sim(mdl);           % Start Simulation
-->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(121)
plot(y.time,y.signals.values,t1,y1,t1,r)
legend('Nonlinear','Linearized','Reference')
title('output')
grid
subplot(122)
plot(u.time,u.signals.values,t1,u1)
legend('Nonlinear','Linearized')
title('input')
grid

bdclose(plant_mdl);
bdclose(mdl);

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

|