Планируйте контроллеры в нескольких рабочих точках

Если ваш объект нелинейно, контроллер, предназначенный для работы в конкретной целевой области, может плохо работать в других областях. Общим способом компенсации является создание нескольких контроллеров, каждый из которых предназначен для определенной комбинации условий работы. Затем можно переключаться между контроллерами в режиме реального времени по мере изменения условий. Для получения дополнительной информации смотрите Gain-Scheduled MPC.

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

Модель объекта управления

Объект содержит две массы, M1 и M2, соединенный с двумя пружинами. Пружина с коэффициентом упругости k1 тянет массу M1 направо и пружина с постоянными пружинами k2 тянет массу M2 налево. Манипулируемая переменная является силой, вытягивающей массу M1 слева в виде красной стрелы на следующем рисунке.

Обе массы перемещаются свободно, пока они не столкнутся. Столкновение является неупругим, и массы слипаются, пока изменение приложенной силы не разделяет их. Поэтому существуют два условий работы для системы с различной динамикой.

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

Задайте параметры модели.

M1 = 1;       % masses
M2 = 5;
k1 = 1;       % spring constants
k2 = 0.1;
b1 = 0.3;     % friction coefficients
b2 = 0.8;
yeq1 = 10;    % wall mount positions
yeq2 = -10;

Создайте модель пространства состояний для, когда массы не контактируют; то есть когда mass 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,'MV',1,'MD',2);

Создайте модель пространства состояний для, когда массы соединяются.

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,'MV',1,'MD',2);

Для обеих моделей:

  • Состояния - это положение и скорость M1.

  • Входами являются приложенная сила, которая является манипулируемой переменной (MV) и коэффициентом упругости сигнал калибровки, который является измеренным нарушением порядка (MD).

  • Выходные данные - это положение M1.

Проектирование контроллеров MPC

Разработайте один контроллер MPC для каждой из моделей объекта управления. Оба контроллера идентичны, за исключением их внутренних моделей предсказания.

Задайте тот же шаг расчета, Ts, горизонт предсказания, p, и управляйте горизонтом, m, для обоих контроллеров.

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

Создайте контроллеры MPC по умолчанию для каждой модели объекта управления.

MPC1 = mpc(sys1,Ts,p,m);
MPC2 = mpc(sys2,Ts,p,m);
-->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.
-->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);
MPC2.MV = MPC1.MV;

Симулируйте контроллеры с запланированным усилением

Моделируйте эффективность контроллеров с помощью блока MPC Controller.

Откройте модель Simulink.

mdl = 'mpc_switching';
open_system(mdl)

В модели подсистема M1 масс моделирует движение масс M1, как при свободном движении, так и при соединении с M2. Подсистема M2 масс моделирует движение масс M2, когда она перемещается свободно. Подсистемы выбора режима и сброса скорости координируют столкновение и разделение масс.

Модель содержит логику переключения, которая обнаруживает, когда положения M1 и M2 те же самые. Полученный сигнал переключения соединяется с switch входной порт блока Multiple MPC Controllers и управляет активным контроллером MPC.

Задайте начальное положение для каждой массы.

y1initial = 0;
y2initial = 10;

Чтобы задать контроллеры с запланированным усилением, дважды кликните блок Multiple MPC Controllers. В диалоговом окне Параметры Блоков задайте контроллеры как массив ячеек с именами контроллеров. Установите начальные состояния для каждого контроллера на их соответствующее номинальное значение путем определения состояний как {'[],'[]'}.

Нажмите кнопку ОК.

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

sim(mdl)
-->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.

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

open_system([mdl '/signals'])

Первоначально, MPC1 перемещает массу M1 к ссылке. Примерно через 13 секунд, M2 сталкивается с M1. Сигнал переключения изменяется с 1 на 2, который переключает управление на MPC2.

Столкновение перемещается M1 от заданной точки и MPC2 быстро возвращает объединенные массы в ссылку точку.

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

Сравнение с одним контроллером MPC

Чтобы продемонстрировать преимущество использования двух контроллеров MPC для этого приложения, симулируйте систему используя только MPC2.

Изменение MPC1 чтобы соответствовать MPC2.

MPC1save = MPC1;
MPC1 = MPC2;

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

sim(mdl)

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

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

Задайте MPC1 вернемся к его исходному строению.

MPC1 = MPC1save;

Создание явных контроллеров MPC

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

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

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

range = generateExplicitRange(MPC1);

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

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

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

Когда это возможно, используйте свои знания о объекте, чтобы определить области значений состояний. Для примера первое состояние соответствует положению M1, который имеет область значений от -10 до 10.

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

Задайте области значений состояний для явных контроллеров MPC на основе областей значений предполагаемых состояний.

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

Задайте область значений для опорного сигнала. Выберите область значений ссылок, который меньше, чем 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(MPC1,range);

Regions found / unexplored:        4/       0

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

expMPC2 = generateExplicitMPC(MPC2,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(MPC1,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)

Чтобы задать явные контроллеры MPC, дважды щелкните блок «Несколько явных контроллеров MPC». В диалоговом окне Параметры Блоков задайте контроллеры как массив ячеек с именами контроллеров. Установите начальные состояния для каждого контроллера на их соответствующее номинальное значение путем определения состояний как {'[],'[]'}.

Нажмите кнопку ОК.

Если вы ранее проверили явные контроллеры MPC, то подстановка и конфигурирование блока Multiple Explicit MPC Controllers должны привести к тем же результатам, что и блок Multiple MPC Controllers.

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

sim(expModel)

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

open_system([expModel '/signals'])

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

bdclose('all')

См. также

|

Похожие темы