Этот пример показывает, как использовать измеримые состояния объекта в 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.
Моделируйте ответ с обратной связью итеративно.
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® требуется.
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)