Программное обеспечение Model Predictive Control Toolbox™ позволяет вам переопределить метод оценки состояния контроллера по умолчанию.
Для этого можно использовать следующие методы:
Можно переопределить коэффициент усиления Калмана по умолчанию, и, используя setEstimator
функция. Чтобы получить значения по умолчанию от контроллера, используйте getEstimator
. Эти команды предполагают, что столбцы и находятся в технических модулях измеренных выходов объекта. Внутренне программа преобразует их в безразмерную форму.
Можно использовать пользовательскую опцию оценки, которая пропускает все вычисления усиления Калмана в контроллере. Когда контроллер работает, на каждом контрольном интервале вы должны использовать внешнюю процедуру, чтобы оценить состояние контроллера и предоставить эти оценки состояния контроллеру.
Оценка пользовательского состояния не поддерживается в MPC Designer.
Рассмотрим случай объекта с двойным интегратором, для которой все состояния объекта являются измеримыми. В таком случае можно предоставить измеренные состояния контроллеру MPC, а не иметь контроллер, оценивающий состояния.
Линейная модель объекта управления без разомкнутого контура является двойным интегратором.
plant = tf(1,[1 0 0]);
Создайте объект контроллера с заданным шагом расчета, горизонтом предсказания и горизонтом управления.
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)