Получите запланированное неявное и явное MPC управление системой массового Spring

Этот пример показывает, как использовать блок Multiple MPC Controllers, и блок Multiple Explicit MPC Controllers, чтобы реализовать усиление запланировал MPC управление нелинейным объектом.

Системное описание

Система составлена двумя массами M1 и M2, соединенный с двумя пружинами k1 и k2 соответственно. Столкновение принято абсолютно неэластичное. Массовый M1 вытягивает сила F, который является переменной, которой управляют. Цель состоит в том, чтобы заставить положение y1 массового M1 отследить данную ссылку r.

Движущие силы являются двукратными: когда массы отсоединяются, перемещения M1 свободно. В противном случае M1+M2 двигаются вместе. Мы принимаем, что только положение M1 и датчик контакта доступны для обратной связи. Последний используется, чтобы инициировать переключение контроллеров MPC. Обратите внимание на то, что положение и скорость массового M2 не управляемы.

                         /-----\     k1                 ||
                  F <--- | M1  |----/\/\/\-------------[|| wall
    ||                   | |---/                        ||
    ||     k2            \-/      /----\                ||
wall||]--/\/\/\-------------------| M2 |                ||
    ||                            \----/                ||
    ||                                                  ||
----yeq2------------------ y1 ------ y2 ----------------yeq1----> y axis

Модель является упрощенной версией модели, предложенной в следующей ссылке:

А. Бемпорэд, С. Ди Кайрано, я. В. Кольмановский и Д. Хровэт, "Гибридное моделирование и управление мультитела магнитный привод для автомобильных приложений", в материалах 46-я Конференция IEEE® по Решению и Управлению, Новому Орлеану, LA, 2007.

Параметры модели

M1 = 1;       % mass
M2 = 5;       % mass
k1 = 1;       % spring constant
k2 = 0.1;     % spring constant
b1 = 0.3;     % friction coefficient
b2 = 0.8;     % friction coefficient
yeq1 = 10;    % wall mount position
yeq2 = -10;   % wall mount position

Модели в пространстве состояний

состояния: положение и скорость массового M1; переменная, которой управляют: вытяните силу F измеренное воздействие: постоянное значение 1, который обеспечивает, калибрует пружинную силу к правильному значению, измеренному вывод: положение массового M1

Модель в пространстве состояний M1, когда массы не находятся в контакте.

A1 = [0 1;-k1/M1 -b1/M1];
B1 = [0 0;-1/M1 k1*yeq1/M1];
C1 = [1 0];
D1 = [0 0];
sys1 = ss(A1,B1,C1,D1);
sys1 = setmpcsignals(sys1,'MD',2);
-->Assuming unspecified input signals are manipulated variables.

Модель в пространстве состояний, когда эти две массы находятся в контакте.

A2 = [0 1;-(k1+k2)/(M1+M2) -(b1+b2)/(M1+M2)];
B2 = [0 0;-1/(M1+M2) (k1*yeq1+k2*yeq2)/(M1+M2)];
C2 = [1 0];
D2 = [0 0];
sys2 = ss(A2,B2,C2,D2);
sys2 = setmpcsignals(sys2,'MD',2);
-->Assuming unspecified input signals are manipulated variables.

Разработайте контроллеры MPC

Общие параметры

Ts = 0.2;     % sampling time
p = 20;       % prediction horizon
m = 1;        % control horizon

Разработайте первый контроллер MPC для случая, когда массовый M1 отсоединится от M2.

MPC1 = mpc(sys1,Ts,p,m);
MPC1.Weights.OV = 1;
-->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.

Задайте ограничения на переменную, которой управляют.

MPC1.MV = struct('Min',0,'Max',30,'RateMin',-10,'RateMax',10);

Разработайте второй контроллер MPC для случая, когда массовый M1 и M2 будут вместе.

MPC2 = mpc(sys2,Ts,p,m);
MPC2.Weights.OV = 1;
-->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.

Задайте ограничения на переменную, которой управляют.

MPC2.MV = struct('Min',0,'Max',30,'RateMin',-10,'RateMax',10);

Моделируйте усиление запланированный MPC в Simulink®

Чтобы запустить этот пример, Simulink® требуется.

if ~mpcchecktoolboxinstalled('simulink')
    disp('Simulink(R) is required to run this example.')
    return
end

Моделируйте запланированное MPC управление усиления с блоком Multiple MPC Controllers.

y1initial = 0;      % Initial position of M1
y2initial = 10;     % Initial position of M2
mdl = 'mpc_switching';
open_system(mdl);
if exist('animationmpc_switchoff','var') && animationmpc_switchoff
    close_system([mdl '/Animation']);
    clear animationmpc_switchoff
end

disp('Start simulation by switching control between MPC1 and MPC2 ...');
disp('Control performance is satisfactory.');
open_system([mdl '/signals']);
sim(mdl);
MPC1saved = MPC1;
MPC2saved = MPC2;
Start simulation by switching control between MPC1 and MPC2 ...
Control performance is satisfactory.
-->Converting model to discrete time.
-->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.
-->Converting model to discrete time.
-->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.

Использование двух контроллеров обеспечивает хорошую производительность при всех условиях.

Повторитесь симуляция Используя MPC1 только (Никогда принимает массы в контакте),

disp('Now repeat simulation by using only MPC1 ...');
disp('When two masses stick together, control performance deteriorates.');
MPC1 = MPC1saved;
MPC2 = MPC1saved;
sim(mdl);
Now repeat simulation by using only MPC1 ...
When two masses stick together, control performance deteriorates.

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

Повторитесь симуляция Используя MPC2 только (Всегда принимает массы в контакте),

disp('Now repeat simulation by using only MPC2 ...');
disp('When two masses are detached, control performance deteriorates.');
MPC1 = MPC2saved;
MPC2 = MPC2saved;
sim(mdl);
Now repeat simulation by using only MPC2 ...
When two masses are detached, control performance deteriorates.

В этом случае производительность ухудшается, когда массы отделяются, заставляя контроллер прикладывать чрезмерную силу.

bdclose(mdl);
close(findobj('Tag','mpc_switching_demo'));

Разработайте явные контроллеры MPC

Чтобы уменьшать онлайновое вычислительное усилие, можно создать явный контроллер MPC для каждых условий работы и реализовать запланированное на усиление явное MPC управление с помощью блока Multiple Explicit MPC Controllers.

Чтобы создать явный контроллер MPC, сначала задайте рабочие диапазоны для состояний контроллера, входных сигналов и ссылочных сигналов. Создайте явный объект области значений MPC с помощью соответствующего традиционного контроллера, MPC1.

range = generateExplicitRange(MPC1saved);

Задайте области значений для состояний контроллера. И MPC1 и MPC2 содержат состояния для: * Положение и скорость массового M1 * интегратор от выходного возмущения по умолчанию

range.State.Min(:) = [-10;-8;-3];
range.State.Max(:) = [10;8;3];

Когда возможно, используйте свое знание объекта, чтобы задать области значений состояния. Однако это может быть трудно, когда состояние не соответствует физическому параметру, такой что касается выходного состояния возмущения. В этом случае соберите информацию области значений с помощью симуляций с типичной ссылкой и сигналами воздействия. Для этой системы можно активировать дополнительный est.state выходной порт блока Multiple MPC Controllers и просмотреть предполагаемые состояния с помощью осциллографа. При симуляции ответов контроллера используйте ссылочный сигнал, который покрывает ожидаемый рабочий диапазон.

Задайте область значений для ссылочного сигнала. Выберите диапазон ссылки, который меньше, чем область значений положения M1.

range.Reference.Min = -8;
range.Reference.Max = 8;

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

range.ManipulatedVariable.Min = 0;
range.ManipulatedVariable.Max = 30;

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

range.MeasuredDisturbance.Min = 0.9;
range.MeasuredDisturbance.Max = 1.1;

Создайте явный контроллер MPC, который соответствует MPC1 с помощью заданного объекта области значений.

expMPC1 = generateExplicitMPC(MPC1saved,range);

Regions found / unexplored:        4/       0

Создайте явный контроллер MPC, который соответствует MPC2. Поскольку MPC1 и MPC2 действуют по тем же и входным диапазонам состояния и имеют те же ограничения, можно использовать тот же объект области значений.

expMPC2 = generateExplicitMPC(MPC2saved,range);

Regions found / unexplored:        5/       0

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

Подтвердите явные контроллеры MPC

Это - хорошая практика, чтобы подтвердить производительность каждого явного контроллера MPC прежде, чем реализовать запланированный на усиление явный MPC. Например, чтобы сравнить производительность MPC1 и expMPC1, моделируйте ответ с обратной связью каждого контроллера, использующего sim.

r = [zeros(30,1); 5*ones(160,1); -5*ones(160,1)];
[Yimp,Timp,Uimp] = sim(MPC1saved,350,r,1);
[Yexp,Texp,Uexp] = sim(expMPC1,350,r,1);
-->Converting model to discrete time.
-->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
subplot(2,1,1)
plot(Timp,Yimp,'b-',Texp,Yexp,'r--')
grid on
xlabel('Time (s)')
ylabel('Output')
title('Explicit MPC Validation')
legend('Implicit MPC','Explicit MPC')
subplot(2,1,2)
plot(Timp,Uimp,'b-',Texp,Uexp,'r--')
grid on
ylabel('MV')
xlabel('Time (s)')

Ответы с обратной связью и переменные последовательности, которыми управляют, неявного и явного соответствия контроллеров. Точно так же можно подтвердить производительность expMPC2 против того из MPC2.

Если ответы неявных и явных контроллеров не совпадают, настраивают явные области значений MPC и создают новый явный контроллер MPC.

Моделируйте запланированный на усиление явный MPC

Чтобы реализовать запланированное на усиление явное MPC управление, замените блок Multiple MPC Controllers на блок Multiple Explicit MPC Controllers.

expModel = 'mpc_switching_explicit';
open_system(expModel);

Запустите симуляцию.

sim(expModel);

Чтобы просмотреть результаты симуляции, откройте осциллограф сигналов.

open_system([expModel '/signals']);

Запланированные на усиление явные контроллеры MPC обеспечивают ту же производительность как запланированные на усиление неявные контроллеры MPC.

bdclose(expModel);
close(findobj('Tag','mpc_switching_demo'));

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

|

Похожие темы