Управление насосным баком с использованием дискретного набора управления MPC

В этом примере показано, как использовать линейный контроллер MPC с непрерывными и дискретными действиями управления для управления уровнем помпажа в Simulink.

Обзор

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

  • Насос 1 имеет переменную скорость и может обеспечить скорость потока жидкости от 0 до 100 л/мин. Скорость изменения скорости потока жидкости ограничена 50 л/мин в минуту.

  • Насос 2 включен и выдает 100 л/мин, когда он включен.

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

mdl = 'ReservoirMPC';
open_system(mdl)

Цель управления состоит в том, чтобы использовать два насоса (управляемые переменные), чтобы поддерживать объем бака в заданном значении, когда выпускной клапан вводит нарушение порядка в помпажный бак (измеренное нарушение порядка).

Когда потребность ниже по потоку постоянна, насос 1 управляет уровнем помпажного бака, в идеале держа его около 50%. Когда происходит нарушение порядка, оба насоса могут привести в действие, чтобы поддерживать объем бака между 25% и 75% в течение переходного периода времени. Однако, когда потребность в нисходящем потоке высока, насос 2 должен включаться.

Сводные данные, контроллер MPC управляет двумя насосами, так что:

  • Уровень бака остается около 50%, когда потребность постоянна.

  • Уровень бака остается в идеальной области значений, когда насос 2 включается и отключается. Быстрое включение насоса 2 является нежелательным.

Получите линейный объект из модели нелинейного уравнительного бака

В модели Simulink модель помпажного бака находится в Подсистеме резервуара. Он реализует следующие уравнения.

  • dV/dt = Qin - Qout, где V объем бака от 0 до 100 (процент)

  • Qin = Q1 + Q2, сумма двух скоростей потока жидкости насоса (л/мин)

  • Qout = 0.2*sqrt(2)*X*sqrt(V), скорость разряда (л/мин)

  • X - открытие выпускного клапана между 0 и 100 (процент)

Объект работает в номинальной установившейся рабочей точке: насос 1 работает со скоростью 70 л/мин, насос 2 отключен, нагнетательный клапан на 35% и объем бака на 50%. Создайте линейную модель бака в этой рабочей точке. Эта модель имеет три входа: Q1 и Q2 являются манипулируемыми переменными и X - измеренное нарушение порядка.

plant = ss(-0.7,[1 1 -2],1,[0 0 0]);
plant = setmpcsignals(plant,'MV',[1 2],'MD',3);

Проектируйте контроллер MPC с непрерывными и дискретными действиями управления

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

Ts = 1;
MPCobj = mpc(plant,Ts);
-->The "PredictionHorizon" property of "mpc" object is empty. Trying PredictionHorizon = 10.
-->The "ControlHorizon" property of the "mpc" object is empty. Assuming 2.
-->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.

Установите номинальные значения для контроллера, чтобы они совпадали с установившейся рабочей точкой.

MPCobj.Model.Nominal.U = [70; 0; 35];
MPCobj.Model.Nominal.Y = 50;
MPCobj.Model.Nominal.X = 50;
MPCobj.Model.Nominal.DX = 0;

Выберите веса MVRate таким образом, чтобы контроллер регулировал насос 1 в выборе насоса 2. В других проводах контроллер штрафует насос 1 за то, что он перемещается меньше, чем насос 2.

MPCobj.Weights.MVrate = [0.1 0.2];

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

MPCobj.OV.Min = 0;
MPCobj.OV.Max = 100;
MPCobj.MV(1).Min = 0;
MPCobj.MV(1).Max = 100;
MPCobj.MV(1).RateMin = -50;
MPCobj.MV(1).RateMax = 50;

Поскольку насос 2 имеет две дискретные настройки (0 и 100 л/мин), задайте дискретный набор в Type свойство контроллера. В зависимости от вашего приложения, Type свойство может также быть «двоичным» или «целым».

MPCobj.MV(2).Type = [0 100];

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

Симуляция начинается при номинальном условии. При t = 5 скорость нагнетания растёт до тех пор, пока насос 1 не достигнет полной производительности, и насос 2 не будет включен. Насос 2 включается при t = 12. Насос 1 должен уменьшаться как можно быстрее, чтобы сохранить уровень в границах, затем установить новую установившуюся рабочую точку. При t = 60 разряд начинает наклоняться вниз в номинальное состояние. Cotnroller MPC поддерживает объем в идеальной области значений, и насос 2 не показывает быстрого цикла.

sim(mdl)
open_system([mdl '/Volume'])
-->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.

ans = 

  Simulink.SimulationOutput:
                   tout: [106x1 double] 

     SimulationMetadata: [1x1 Simulink.SimulationMetadata] 
           ErrorMessage: [0x0 char] 

Следующий рисунок показывает скорости потока жидкости от двух насосов.

open_system([mdl '/Pumps'])

Насос 2 включается и отключается контроллером MPC, как и ожидалось.

bdclose(mdl) % close simulink model.

См. также

Похожие темы