Неявное и явное MPC управление системой Mass-Spring

В этом примере показано, как использовать блок 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 для случая, когда mass 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 управление с помощью блока 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, запланированного с учетом коэффициента усиления. Например, чтобы сравнить эффективность 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® по Решению и Контролю, Новому Орлеану, Луизиана, 2007.

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

См. также

|

Похожие темы

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