exponenta event banner

Неявное и явное управление MPC системой с массовым пружинным усилением

В этом примере показано, как использовать блок Multiple MPC Controllers и блок Multiple Explicit MPC Controllers для реализации запланированного управления MPC нелинейной установки.

Описание системы

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

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

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

Модель представляет собой упрощенный вариант модели, предложенный в [1].

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

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, горизонт прогнозирования pи горизонт управления m.

Ts = 0.2;
p = 20;
m = 1;

Спроектируйте первый контроллер 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

®

Моделирование управления MPC по расписанию усиления с использованием блока Multiple MPC Controllers, который переключается между MPC1 и MPC2.

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

Откройте и настройте модель.

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

Моделирование модели.

open_system([mdl '/signals'])
sim(mdl)
MPC1saved = MPC1;
MPC2saved = MPC2;
-->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.
-->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 Только

Повторите моделирование, предполагая, что массы никогда не соприкасаются; то есть с использованием только контроллера MPC1.

MPC1 = MPC1saved;
MPC2 = MPC1saved;
sim(mdl)

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

Повторить моделирование с помощью MPC2 Только

Повторите моделирование, предполагая, что массы всегда находятся в контакте; то есть с использованием только контроллера MPC2.

MPC1 = MPC2saved;
MPC2 = MPC2saved;
sim(mdl)

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

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

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

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

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

range = generateExplicitRange(MPC1saved);

Укажите диапазоны для состояний контроллера. Оба MPC1 и MPC2 содержат состояния для:

  • Положение и скорость масс M1

  • Интегратор из модели выходного возмущения по умолчанию

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

По возможности используйте свои знания о заводе для определения диапазонов состояний. Однако может быть трудно, когда состояние не соответствует физическому параметру, например, для состояния модели выходного возмущения. В этом случае собирать информацию о дальности с помощью моделирования с использованием типичных опорных сигналов и сигналов возмущения. Для этой системы можно активировать дополнительный est.state outport блока 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.

Simulate Gain-Scheduled явный MPC

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

expModel = 'mpc_switching_explicit';
open_system(expModel)

Запустите моделирование.

sim(expModel)

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

open_system([expModel '/signals'])

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

Ссылки

[1] А. Бемпорад, С. Ди Кэрано, И. В. Колмановский и Д. Хроват, «Гибридное моделирование и управление многозвенным магнитным приводом для автомобильных приложений», в Proc. 46-й IEEE ® Conf. on Decision and Control, New Orleans, LA, 2007.

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

См. также

|

Связанные темы