Программное обеспечение Model Predictive Control Toolbox™ позволяет переопределить метод оценки состояния контроллера по умолчанию.
Для этого можно использовать следующие методы:
Можно переопределить выигрыши Kalman по умолчанию
и,
используя 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.
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)