Запланированное на усиление неявное и явное 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

Модель является упрощенной версией модели, предложенной в [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

  • Переменная Manipulated: Получение по запросу силы 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, и управляйте horizn 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.

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

Повторите симуляцию Используя 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 управление с помощью блока 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.

Ссылки

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

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

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

|

Похожие темы