Пользовательская оценка состояния

Программное обеспечение Model Predictive Control Toolbox™ позволяет вам заменять метод оценки состояния контроллера по умолчанию.

Для этого можно использовать следующие методы:

  • Можно заменить значение по умолчанию усиления Кальмана,$L$ и$M$, с помощью setEstimator функция. Чтобы получить значения по умолчанию от диспетчера используют getEstimator. Эти команды принимают, что столбцы$L$ и$M$ находятся в технических модулях измеренного объекта выходные параметры. Внутренне, программное обеспечение преобразует их в безразмерную форму.

  • Можно использовать пользовательскую опцию оценки, которая пропускает все вычисления усиления Кальмана в контроллере. Когда контроллер действует, в каждом контрольном интервале необходимо использовать внешнюю процедуру, чтобы оценить состояния контроллера и предоставить эти оценки состояния контроллеру.

Пользовательская оценка состояния не поддерживается в MPC Designer. Для получения дополнительной информации смотрите Оценку состояния Контроллера и Реализацию Пользовательское Средство оценки состояния, Эквивалентное Встроенному Фильтру Калмана.

Задайте модель объекта управления

Рассмотрите случай объекта с двойным интегратором, для которого все состояния объекта измеримы. В таком случае можно предоставить измеренные состояния контроллеру MPC, а не сделать, чтобы контроллер оценил состояния.

Линейная модель объекта управления разомкнутого контура является двойным интегратором.

plant = tf(1,[1 0 0]);

Спроектируйте контроллер MPC

Создайте объект контроллера с шагом расчета 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)

Смотрите также

|

Похожие темы