Программное обеспечение 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)