Программное обеспечение Model Predictive Control Toolbox™ позволяет вам заменять метод оценки состояния контроллера по умолчанию.
Для этого можно использовать следующие методы:
Можно заменить значение по умолчанию усиления Кальмана, и, с помощью setEstimator
функция. Чтобы получить значения по умолчанию от диспетчера используют getEstimator
. Эти команды принимают, что столбцы и находятся в технических модулях измеренного объекта выходные параметры. Внутренне, программное обеспечение преобразует их в безразмерную форму.
Можно использовать пользовательскую опцию оценки, которая пропускает все вычисления усиления Кальмана в контроллере. Когда контроллер действует, в каждом контрольном интервале необходимо использовать внешнюю процедуру, чтобы оценить состояния контроллера и предоставить эти оценки состояния контроллеру.
Пользовательская оценка состояния не поддерживается в MPC Designer. Для получения дополнительной информации смотрите Оценку состояния Контроллера и Реализацию Пользовательское Средство оценки состояния, Эквивалентное Встроенному Фильтру Калмана.
Рассмотрите случай объекта с двойным интегратором, для которого все состояния объекта измеримы. В таком случае можно предоставить измеренные состояния контроллеру MPC, а не сделать, чтобы контроллер оценил состояния.
Линейная модель объекта управления разомкнутого контура является двойным интегратором.
plant = tf(1,[1 0 0]);
Создайте объект контроллера с шагом расчета 0.1
секунды, горизонт предсказания 10
шаги и горизонт управления 3
шаги.
Ts=0.1; mpcobj = mpc(plant,Ts,10,3);
-->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
функция.
Для каждого шага симуляции:
Получите объект выход, y
, от текущего состояния.
Сохраните объект выход.
Установите состояние объекта в mpcstate
возразите против текущих измеренных значений состояния, xsys
, использование указателя xmpc
. Для объектов, на которых состояние не измеримо, оценка состояния должна быть обеспечена наблюдателем. При использовании встроенного средства оценки это не нужно.
Вычислите действие MPC управления, u
, передача в mpcstate
возразите и выходная ссылка, 1
.
Сохраните управляющий сигнал.
Обновите состояние объекта.
for t = 0:Tf y = sys.C*xsys; % plant equations: output YY(t+1) = y; xmpc.Plant = xsys; % state estimation u = mpcmove(mpcobj,xmpc,[],1); % y is not needed UU(t+1) = u; xsys = sys.A*xsys + sys.B*u; % plant equations: next state 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 3.99378e-14
Закройте модель Simulink.
bdclose(mdl)