Управление мультивхода Мультивыход нелинейный объект

В этом примере показано, как спроектировать прогнозирующий контроллер модели для нелинейного объекта мультивыхода мультивхода. Объект имеет 3 переменные, которыми управляют, и 2 измеренных выходных параметров.

Линеаризуйте нелинейный объект

Чтобы запустить этот пример, 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_nonlinmodel и линеаризовавший в условиях работы по умолчанию с помощью linearize команда от Simulink Control Design.

plant = linearize('mpc_nonlinmodel');

Присвойте имена к переменным I/O.

plant.InputName = {'Mass Flow';'Heat Flow';'Pressure'};
plant.OutputName = {'Temperature';'Level'};
plant.InputUnit = {'kg/s' 'J/s' 'Pa'};
plant.OutputUnit = {'K' 'm'};

Спроектируйте контроллер MPC

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

Ts = 0.2;
p = 5;
m = 2;
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.MV = struct('Min',{-3;-2;-2},'Max',{3;2;2},'RateMin',{-1000;-1000;-1000});

Задайте веса на которыми управляют и управляемых переменных.

mpcobj.Weights = struct('MV',[0 0 0],'MVRate',[.1 .1 .1],'OV',[1 1]);

Симулируйте Используя Simulink

Запустите симуляцию.

mdl1 = 'mpc_nonlinear';
open_system(mdl1)
sim(mdl1)
-->Converting model to discrete time.
-->Assuming output disturbance added to measured output channel #1 is integrated white noise.
-->Assuming output disturbance added to measured output channel #2 is integrated white noise.
-->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.

Измените проект MPC, чтобы отследить сигналы пандуса

Для того, чтобы отследить пандус, тройной интегратор задан как выходное возмущение на обоих выходных параметрах.

outdistmodel = tf({1 0;0 1},{[1 0 0 0],1;1,[1 0 0 0]});
setoutdist(mpcobj,'model',outdistmodel);

Запустите симуляцию.

mdl2 = 'mpc_nonlinear_setoutdist';
open_system(mdl2)
sim(mdl2)
-->Converting model to discrete time.
-->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.

Симулируйте без ограничений

Когда ограничения не активны, контроллер MPC ведет себя как линейный контроллер.

mpcobj.MV = [];

Сбросьте выходное возмущение, чтобы принять значение по умолчанию

setoutdist(mpcobj,'integrators');

Вход к линейному LTI контроллера является вектором [ym; r], где ym является вектором измеренных выходных параметров, и r является вектором выходных ссылок.

LTI = ss(mpcobj,'r');
-->Converting model to discrete time.
-->Assuming output disturbance added to measured output channel #1 is integrated white noise.
-->Assuming output disturbance added to measured output channel #2 is integrated white noise.
-->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.

Запустите симуляцию.

refs = [1;1];                  % output references are step signals
mdl3 = 'mpc_nonlinear_ss';
open_system(mdl3)
sim(mdl3)

Сравните результаты симуляции

fprintf('Compare output trajectories: ||ympc-ylin|| = %g\n',norm(ympc-ylin));
disp('The MPC controller and the linear controller produce the same closed-loop trajectories.');
Compare output trajectories: ||ympc-ylin|| = 1.29151e-14
The MPC controller and the linear controller produce the same closed-loop trajectories.
bdclose(mdl1)
bdclose(mdl2)
bdclose(mdl3)

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

| |

Похожие темы