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

Этот пример показывает, как разработать образцовый прогнозирующий контроллер для нелинейного объекта мультивывода мультивхода. Объект имеет 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" и линеаризуется в условиях работы по умолчанию с помощью "линеаризовать" команды от 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)    % Open Simulink Model
sim(mdl1);           % Start Simulation
-->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)    % Open Simulink Model
sim(mdl2);           % Start Simulation
-->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)       % Open Simulink(R) Model
sim(mdl3);              % Start Simulation

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

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.50163e-14
The MPC controller and the linear controller produce the same closed-loop trajectories.
bdclose(mdl1)
bdclose(mdl2)
bdclose(mdl3)

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

| |

Похожие темы