Решите задачу MPC дискретного набора в MATLAB

Этот пример показов, как решить в MATLAB задачу MPC, в которой некоторые манипулированные переменные принадлежат дискретному набору.

Создайте Модель объекта управления

Исправьте начальное значение генератора для повторяемости.

rng(0);

Создайте строго соответствующий объект в дискретном времени с 4 состояниями, двумя входами и одним выходом.

plant = drss(4,1,2);
plant.D = 0;

Установите время дискретизации равное 0,1 с, и увеличьте полномочия управления первого входа, чтобы лучше проиллюстрировать его вклад в управление.

plant.Ts = 0.1;
plant.B(:,1)=plant.B(:,1)*2;

Проектирование контроллера MPC

Создайте контроллер MPC с одним временем дискретизации секунды, 20 шаги предсказания горизонт и 5 шаги управляют горизонтом.

mpcobj = mpc(plant,0.1,20,5);
-->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(1).Type = 'integer';)

mpcobj.MV(1).Type = [-1 -0.7 -0.3 0 0.2 0.5 1];

Используйте пределы скорости, чтобы применить максимальные значения шага и уменьшения для первой управляемой переменной.

mpcobj.MV(1).RateMin = -0.5;
mpcobj.MV(1).RateMax = 0.5;

Установите пределы второй манипулируемой переменной, тип которой по умолчанию (непрерывный) не был изменен.

mpcobj.MV(2).Min = -2;
mpcobj.MV(2).Max = 2;

Симулируйте замкнутый цикл с помощью sim Результаты команд и графиков

Установите количество шагов симуляции.

simsteps = 50;

Создайте выход уставку, равную нулю, из шагов 20 на 35 и равным 0.6 до и после.

r = ones(simsteps,1)*0.6;
r(20:35) = 0;

Симулируйте замкнутый цикл с помощью sim команда. Возвращает входной и выходной сигналы объекта.

[YY,~,UU,~,~,~,status] = sim(mpcobj,simsteps,r);
-->Assuming output disturbance added to measured output channel #1 is integrated white noise.
-->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.

Постройте график результатов.

figure(1)

subplot(211)    % plant output
plot([YY,r]);
grid
title("Tracking control");

subplot(223)    % first plant input
stairs(UU(:,1));
grid
%title("MV(1) discrete set "+ num2str(mpcobj.MV(1).Type','%0.1f '))
title("MV(1) discrete set ")

subplot(224)    % second plant input
stairs(UU(:,2));
grid
title("MV(2) continuous between [-2 2]")

Figure contains 3 axes. Axes 1 with title Tracking control contains 2 objects of type line. Axes 2 with title MV(1) discrete set contains an object of type stair. Axes 3 with title MV(2) continuous between [-2 2] contains an object of type stair.

Как ожидалось, первая манипулируемая переменная ограничена значениями, заданными в дискретном наборе (с переходами меньше заданного предела), в то время как вторая может изменяться постоянно между -2 и 2. Вывод объекта отслеживает значение ссылки через несколько секунд.

Симулируйте замкнутый цикл с помощью mpcmove Результаты команд и графиков

Получите указатель на mpcobj состояние и инициализация состояния объекта.

xmpc = mpcstate(mpcobj);
x = xmpc.Plant;

Инициализируйте массивы, которые хранят сигналы.

YY = []; RR = []; UU = []; XX = [];

Выполните симуляцию с помощью mpcmove команда для вычисления управляющих действий.

for k = 1:simsteps
    XX = [XX;x']; % store plant state
    y = plant.C*x; % calculate plant output
    YY = [YY;y]; % store plant output
    RR = [RR;r(k)]; % store reference
    u = mpcmove(mpcobj,xmpc,y,r(k)); % calculate optimal mpc move
    UU = [UU;u']; % store plant input
    x = plant.A*x+plant.B*u; % update plant state
    % is the last line necessary since x=xmpc.Plant gets updated anyway?
end

Постройте график результатов.

figure(2)

subplot(211)    % plant output
plot([YY,r]);
grid
title("Tracking control");

subplot(223)    % first plant input
stairs(UU(:,1));
grid
title("MV(1) discrete set")

subplot(224)    % second plant input
stairs(UU(:,2));
grid
title("MV(2) continuous between [-2 2]")

Figure contains 3 axes. Axes 1 with title Tracking control contains 2 objects of type line. Axes 2 with title MV(1) discrete set contains an object of type stair. Axes 3 with title MV(2) continuous between [-2 2] contains an object of type stair.

Эти результаты симуляции идентичны таковым, достигнутой с помощью sim команда.

См. также

Похожие темы