Оценка пользовательского состояния

Программное обеспечение Model Predictive Control Toolbox™ позволяет вам переопределить метод оценки состояния контроллера по умолчанию.

Для этого можно использовать следующие методы:

  • Можно переопределить коэффициент усиления Калмана по умолчанию$L$, и, $M$используя setEstimator функция. Чтобы получить значения по умолчанию от контроллера, используйте getEstimator. Эти команды предполагают, что столбцы$L$ и$M$ находятся в технических модулях измеренных выходов объекта. Внутренне программа преобразует их в безразмерную форму.

  • Можно использовать пользовательскую опцию оценки, которая пропускает все вычисления усиления Калмана в контроллере. Когда контроллер работает, на каждом контрольном интервале вы должны использовать внешнюю процедуру, чтобы оценить состояние контроллера и предоставить эти оценки состояния контроллеру.

Оценка пользовательского состояния не поддерживается в MPC Designer.

Рассмотрим случай объекта с двойным интегратором, для которой все состояния объекта являются измеримыми. В таком случае можно предоставить измеренные состояния контроллеру 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');

Симулируйте контроллер

Сконфигурируйте переменные, чтобы хранить отклики замкнутого цикла.

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.

Итеративно симулируйте ответ с обратной связью с помощью mpcmove функция.

Для каждого шага симуляции:

  • Получите выход объекта, ysys, для текущего состояния.

  • Установите состояние объекта в mpcstate объект, xmpc, к текущим измеренным значениям состояния, xsys.

  • Вычислите действие MPC управления, u, проходя в mpcstate объект.

  • Сохраните выходные и управляющие сигналы действия объекта.

  • Обновите измеренные состояния объекта.

for t = 0:Tf
    ysys = sys.C*xsys;
    xmpc.Plant = xsys;
    u = mpcmove(mpcobj,xmpc,[],1);
    YY(t+1) = ysys;
    UU(t+1) = u;
    xsys = sys.A*xsys + sys.B*u;
end

Постройте график результатов симуляции.

figure
subplot(2,1,1)
plot(0:Ts:5,YY)
title('y')
subplot(2,1,2)
plot(0:Ts:5,UU)
title('u')

Симулируйте управление с обратной связью линейной модели объекта управления в 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 6.77858e-14
bdclose(mdl)

См. также

|

Похожие темы