Используя пользовательскую оценку состояния

Этот пример показывает, как использовать измеримые состояния объекта в MPC управлении во время выполнения.

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

Линейная модель объекта управления разомкнутого цикла является двойным интегратором.

plant = tf(1,[1 0 0]);

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

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

Ts = 0.1;
p = 10;
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.MV = struct('Min',-1,'Max',1);

Задайте контроллер, чтобы использовать пользовательскую оценку состояния.

setEstimator(mpcobj,'custom');

Моделируйте Используя команду MPCMOVE

Сконфигурируйте переменные, чтобы сохранить ответы с обратной связью.

Tf = round(5/Ts);
YY = zeros(Tf,1);
UU = zeros(Tf,1);

Подготовьте объект, используемый в симуляции.

sys = c2d(ss(plant),Ts);
xsys = [0;0];

Используйте объект MPCSTATE задать начальные состояния контроллера, прежде чем симуляция запустится.

xmpc = mpcstate(mpcobj);
-->Converting the "Model.Plant" property of "mpc" object to state-space.
-->Converting model to discrete time.
   Assuming no disturbance added to measured output channel #1.
-->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.

Моделируйте ответ с обратной связью итеративно.

for t = 0:Tf
    % Update plant measurement.
    ysys = sys.C*xsys;
    % Compute MPC action. Because the plant states are measurable, use
    % these values for state estimation instead of the plant output.
    xmpc.Plant = xsys;
    u = mpcmove(mpcobj,xmpc,[],1);
    % Store signals.
    YY(t+1) = ysys;
    UU(t+1) = u;
    % Update plant states.
    xsys = sys.A*xsys + sys.B*u;
end
subplot(2,1,1)
plot(0:Ts:5,YY);
title('y');
subplot(2,1,2)
plot(0:Ts:5,UU);
title('u');

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

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

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

Моделируйте управление с обратной связью линейной модели объекта управления в Simulink. Контроллер "mpcobj" задан в диалоговом окне блока MPC Controller.

mdl = 'mpc_customestimation';
open_system(mdl);
sim(mdl);

Ответы с обратной связью идентичны между симуляциями в MATLAB и Simulink.

fprintf('\nDifference between simulations in MATLAB and Simulink is %g\n',norm(UU-u));
Difference between simulations in MATLAB and Simulink is 7.66845e-14
bdclose(mdl)

Похожие темы