Решите дискретный набор проблема 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 команда.

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

Похожие темы