В этом примере используется systune для проектирования и настройки контроллера MIMO для дизельного двигателя. Контроллер настраивается в дискретное время для одного рабочего состояния.
Современные дизельные двигатели используют турбокомпрессор переменной геометрии (VGT) и рециркуляцию выхлопных газов (EGR) для снижения выбросов. Жесткий контроль давления наддува VGT и массового потока EGR необходим для достижения строгих целевых показателей выбросов. В этом примере показано, как сконструировать и настроить контроллер MIMO, который регулирует эти две переменные, когда двигатель работает при 2100 об/мин с массой топлива 12 мг на цилиндр впрыска.
open_system('rct_diesel')

Система управления VGT/EGR моделируется в Simulink. Контроллер регулирует положения EGRLIFT и VGTPOS клапанов EGR и VGT. Он имеет доступ к целям форсированного давления и массопотока ЭГР и измеренным значениям, а также измерениям массы топлива и частоты вращения двигателя. Оба клапана имеют пределы скорости и насыщения. Модель установки отбирается каждые 0,1 секунды и сигналы управления EGRLIFT и VGTPOS обновляются каждые 0,2 секунды. В данном примере рассматриваются ступенчатые изменения + 10 кПа в давлении наддува и + 3 г/с в массовом потоке EGR, а также нарушения + 5 мг в массе топлива и -200 об/мин в скорости.
Для рассматриваемого рабочего состояния мы использовали системную идентификацию, чтобы вывести линейную модель двигателя из экспериментальных данных. Частотная характеристика от обрабатываемых переменных EGRLIFT и VGTPOS к контролируемым переменным BOOST и EGR MF отображается ниже. При этом установка плохо кондиционируется на низкой частоте, что затрудняет независимое управление давлением наддува и массовым потоком ЭГР.
sigma(Plant(:,1:2)), grid
title('Frequency response of the linearized engine dynamics')

Существуют две основные цели контроля:
Реагируйте на ступенчатые изменения давления наддува и массового потока EGR примерно за 5 секунд с минимальным перекрестным соединением
Быть нечувствительным к (небольшим) изменениям скорости и массы топлива.
Используйте требование отслеживания для первой цели. Задайте амплитуды ступенчатых изменений, чтобы убедиться, что поперечные муфты малы относительно этих изменений.
% 5-second response time, steady-state error less than 5% TR = TuningGoal.Tracking({'BOOST REF';'EGRMF REF'},{'BOOST';'EGRMF'},5,0.05); TR.Name = 'Setpoint tracking'; TR.InputScaling = [10 3];
Для второй цели следует рассматривать изменения скорости и массы топлива как ступенчатые возмущения и определять пиковую амплитуду и время отстаивания результирующих изменений в давлении наддува и массовом потоке EGR. Также задают амплитуды сигнала для правильного отражения относительного вклада каждого возмущения.
% Peak<0.5, settling time<5 DR = TuningGoal.StepRejection({'FUELMASS';'SPEED'},{'BOOST';'EGRMF'},0.5,5); DR.Name = 'Disturbance rejection'; DR.InputScaling = [5 200]; DR.OutputScaling = [10 3];
Для обеспечения достаточной надежности немодулированной динамики и сглаживания ограничьте полосу пропускания управления и обеспечьте достаточный запас устойчивости как на заводских входах, так и на выходах. Поскольку мы имеем дело с контурами обратной связи MIMO 2 на 2, это требование гарантирует стабильность усиления или фазовых изменений в каждом канале обратной связи. Коэффициент усиления или фаза могут изменяться в обоих каналах одновременно и на различную величину в каждом канале. См. раздел Поля стабильности в настройке системы управления и TuningGoal.Margins для получения подробной информации.
% Roll off of -20 dB/dec past 1 rad/s RO = TuningGoal.MaxLoopGain({'EGRLIFT','VGTPOS'},1,1); RO.LoopScaling = 'off'; RO.Name = 'Roll-off'; % 7 dB of gain margin and 45 degrees of phase margin M1 = TuningGoal.Margins({'EGRLIFT','VGTPOS'},7,45); M1.Name = 'Plant input'; M2 = TuningGoal.Margins('DIESEL ENGINE',7,45); M2.Name = 'Plant output';
Без априорного знания подходящей структуры управления, сначала попробуйте «blackbox» государственных-космических контроллеров различных порядков. Модель завода имеет четыре состояния, поэтому попробуйте контроллер порядка четыре или менее. Здесь мы настраиваем контроллер второго порядка, так как блок «SS2» в модели Simulink имеет два состояния.

Рис. 1: Контроллер blackbox второго порядка.
Используйте slTuner для настройки модели Simulink. Отметьте блок «SS2» как настраиваемый, зарегистрируйте местоположения для оценки полей и форм петель и укажите, что линеаризация и настройка должны выполняться с частотой дискретизации контроллера.
ST0 = slTuner('rct_diesel','SS2'); ST0.Ts = 0.2; addPoint(ST0,{'EGRLIFT','VGTPOS','DIESEL ENGINE'})
Теперь используйте systune настроить государственный-космический контроллер в соответствии с нашими контрольными целями. Оцените маржу стабильности и цель сворачивания как жесткие ограничения и постарайтесь наилучшим образом достичь остальных целей (мягких целей). Рандомизировать начальную точку, чтобы уменьшить воздействие нежелательных локальных минимумов.
Opt = systuneOptions('RandomStart',2);
rng(0), ST1 = systune(ST0,[TR DR],[M1 M2 RO],Opt);
Final: Soft = 1.06, Hard = 0.92146, Iterations = 306 Final: Soft = 1.05, Hard = 0.94287, Iterations = 403 Final: Soft = 1.05, Hard = 0.94653, Iterations = 435
Все требования почти выполнены (требование выполняется, когда его нормализованное значение меньше 1). Проверьте это графически.
figure('Position',[10,10,1071,714])
viewGoal([TR DR RO M1 M2],ST1)

Постройте график отслеживания уставок и откликов на отклонение возмущений. Шкала по амплитудам сигнала показывает нормализованные эффекты (изменение давления наддува на + 10 кПа, массовый расход ЭГР на + 3 г/с, масса топлива на + 5 мг, скорость на -200 об/мин).
figure('Position',[100,100,560,500]) T1 = getIOTransfer(ST1,{'BOOST REF';'EGRMF REF'},{'BOOST','EGRMF','EGRLIFT','VGTPOS'}); T1 = diag([1/10 1/3 1 1]) * T1 * diag([10 3]); subplot(211), step(T1(1:2,:),15), title('Setpoint tracking') subplot(212), step(T1(3:4,:),15), title('Control effort')

D1 = getIOTransfer(ST1,{'FUELMASS';'SPEED'},{'BOOST','EGRMF','EGRLIFT','VGTPOS'});
D1 = diag([1/10 1/3 1 1]) * D1 * diag([5 -200]);
subplot(211), step(D1(1:2,:),15), title('Disturbance rejection')
subplot(212), step(D1(3:4,:),15), title('Control effort')

Контроллер отвечает менее чем за 5 секунд с минимальным кросс-соединением между BOOST и EGRMF переменные.
Контроллер состояния-пространства может быть реализован как есть, но часто желательно кипятить его до более простой, более привычной структуры. Для этого возьмите настроенный контроллер и проверьте его частотную характеристику
C = getBlockValue(ST1,'SS2'); clf bode(C(:,1:2),C(:,3:4),{.02 20}), grid legend('REF to U','Y to U')

bodemag(C(:,5:6)), grid
title('Bode response from FUELMASS/SPEED to EGRLIFT/VGTPOS')

Первый график предполагает, что контроллер по существу ведет себя как PI-контроллер, действующий на REF-Y (разность между целевым и фактическим значениями контролируемых переменных). Второй график предполагает, что переход от измеренного возмущения к манипулируемым переменным может быть заменен усилением последовательно с сетью запаздывания. В целом это предполагает следующую упрощенную структуру управления, состоящую из PI-контроллера MIMO с обратной связью возмущения первого порядка.

Рис. 2: Упрощенная структура управления.
С помощью подсистем вариантов можно реализовать обе структуры управления в одной модели Simulink и использовать переменную для переключения между ними. Здесь настройка MODE=2 выбирает структуру PI MIMO. Как и прежде, используйте systune настройка трех матриц усиления 2 на 2 Kp, Ki, Kff в упрощенной структуре управления.
% Select "MIMO PI" variant in "CONTROLLER" block MODE = 2; % Configure tuning interface ST0 = slTuner('rct_diesel',{'Kp','Ki','Kff'}); ST0.Ts = 0.2; addPoint(ST0,{'EGRLIFT','VGTPOS','DIESEL ENGINE'}) % Tune MIMO PI controller. ST2 = systune(ST0,[TR DR],[M1 M2 RO]);
Final: Soft = 1.09, Hard = 0.9993, Iterations = 178
Опять же все требования почти выполнены. Постройте график ответов с замкнутым контуром и сравните его с проектом состояния и пространства.
clf
T2 = getIOTransfer(ST2,{'BOOST REF';'EGRMF REF'},{'BOOST','EGRMF','EGRLIFT','VGTPOS'});
T2 = diag([1/10 1/3 1 1]) * T2 * diag([10 3]);
subplot(211), step(T1(1:2,:),T2(1:2,:),15), title('Setpoint tracking')
legend('SS2','PI+FF')
subplot(212), step(T1(3:4,:),T2(3:4,:),15), title('Control effort')

D2 = getIOTransfer(ST2,{'FUELMASS';'SPEED'},{'BOOST','EGRMF','EGRLIFT','VGTPOS'});
D2 = diag([1/10 1/3 1 1]) * D2 * diag([5 -200]);
subplot(211), step(D1(1:2,:),D2(1:2,:),15), title('Disturbance rejection')
legend('SS2','PI+FF')
subplot(212), step(D1(3:4,:),D2(3:4,:),15), title('Control effort')

Черная коробка и упрощенные структуры управления обеспечивают одинаковую производительность. Проверьте настроенные значения PI и усиления обратной связи.
showTunable(ST2)
Block 1: rct_diesel/CONTROLLER/MIMO PID/Kp =
D =
u1 u2
y1 -0.007985 -0.0007788
y2 -0.02045 0.0146
Name: Kp
Static gain.
-----------------------------------
Block 2: rct_diesel/CONTROLLER/MIMO PID/Ki =
D =
u1 u2
y1 -0.01055 -0.01432
y2 -0.03002 0.04681
Name: Ki
Static gain.
-----------------------------------
Block 3: rct_diesel/CONTROLLER/MIMO PID/Kff =
D =
u1 u2
y1 0.01366 -9.399e-05
y2 0.03403 -0.001471
Name: Kff
Static gain.
Чтобы проверить PI-контроллер MIMO в модели Simulink, переместите настроенные параметры контроллера в Simulink и запустите моделирование.
writeBlockValue(ST2)
Результаты моделирования показаны ниже и подтверждают, что контроллер адекватно отслеживает изменения уставки в давлении наддува и массовом потоке EGR и быстро отклоняет изменения массы топлива (при t = 90) и скорости (при t = 110).

Рис. 3: Результаты моделирования с упрощенным контроллером.
TuningGoal.Margins | TuningGoal.MaxLoopGain | TuningGoal.StepRejection | TuningGoal.Tracking | slTuner (Simulink Control Design) | systune (slTuner)(Проект управления Simulink)