В этом примере показано, как использовать блок Closed-Loop PID Autotuner, чтобы настроить запланированный на усиление контроллер в одной симуляции.
Этот пример использует запланированный на усиление контроллер, чтобы управлять уровнем воды нелинейного Системного объекта Бака с водой. Системным объектом Бака с водой первоначально управляет один ПИ-контроллер в watertank
Модель Simulink®. Для получения дополнительной информации о нелинейном Системном объекте Бака с водой см. watertank Модель Simulink.
Следующие разделы описывают, как изменить watertank
модель для настройки и проверки запланированного на усиление контроллера. В качестве альтернативы используйте watertank_gainscheduledcontrol
модели предоставляют этот пример.
Вставьте блок Closed-Loop PID Autotuner между контроллером и объектом как показано в следующей схеме. Запустить/остановить сигнал запускает и останавливает эксперимент с обратной связью. Когда никакой эксперимент не запускается, блок Closed-Loop PID Autotuner ведет себя как блок усиления единицы, где u сигнализируют о передачах непосредственно в u +Δu.
Чтобы создать расписание усиления, автоматически настроенные усиления зарегистрированы в каждой рабочей точке. В этом примере триггируемая подсистема используется, чтобы записать ссылочные высоты, и усиления контроллера к рабочей области на падающие ребра автотюнера запускают/останавливают сигнал. Симуляция этой модели производит массив настроенных усилений и точек останова для легкого использования с динамическими интерполяционными таблицами, чтобы протестировать контроллер.
После того, как вы получаете набор точек останова и настроенных усилений, тестируете настроенный запланированный на усиление контроллер с Системным объектом Бака с водой. Для этого удалите блок автотюнера, измените источник блока PID Controller к внешнему, и вставьте Интерполяционную таблицу Динамические блоки как показано в схеме.
В этом примере запланированный на усиление контроллер настраивается с помощью блока Closed-Loop PID Autotuner, и его производительность затем проверена в той же модели. Модель в качестве примера использует различную подсистему, чтобы организовать настройку и тестирование рабочих процессов.
Чтобы переключиться между Настройкой и Режимами тестирования, дважды кликните Различный блок Subsystem.
Прежде, чем настроить запланированный на усиление контроллер в нескольких рабочих точках, настраиваясь в одной рабочей точке помогает вам сконфигурировать блок Closed-Loop PID Autotuner. Откройте модель watertank_gainscheduledcontrol
в качестве примера с усилениями контроллера, используемыми
watertank
Модель Simulink.
mdl = 'watertank_gainscheduledcontrol'; Kp = 1.599340; Ki = 0.079967; open_system(mdl); set_param([mdl,'/Variant Subsystem'],'SimMode','Tuning');
После соединения блока Closed-Loop PID Autotuner с Системной моделью объекта управления Бака с водой и блока PID Controller, используйте параметры блоков, чтобы задать настройки настройки и эксперимента. Этот пример использует те же конструктивные требования, найденные в Компенсаторе Проекта в качестве примера Используя Автоматизированную Настройку ПИДа, и Графический Предвещают Проект. Эти конструктивные требования в форме характеристик переходного процесса с обратной связью.
Перерегулирование меньше чем 5%
Время нарастания меньше чем 5 секунд
Чтобы настроить ПИД-регулятор, чтобы соответствовать вышеупомянутым конструктивным требованиям, параметры блока Closed-Loop PID Autotuner предварительно заполняются. Вкладка Tuning имеет три основных настраивающих настройки.
Целевая полоса пропускания — Определяет, как быстро вы хотите, чтобы контроллер ответил. Целевая полоса пропускания является примерно 2/желаемыми временами нарастания. Для желаемого времени нарастания 4 секунд набор предназначается для полосы пропускания = 2/4 = 0,5 рад/с.
Целевой запас по фазе — Определяет, как устойчивый вы хотите, чтобы контроллер был. В этом примере начните со значения по умолчанию 60 градусов.
Шаг расчета эксперимента — Шаг расчета для эксперимента выполняется блоком автотюнера. Используйте рекомендуемую 0.02/полосы пропускания для шага расчета = 0.02/0.5 = 0,04 с.
Вкладка Experiment имеет три основных настройки эксперимента.
Тип объекта — Задает, устойчив ли объект асимптотически или объединяется. В этом примере объединяется Системный объект Бака с водой.
Знак объекта — Задает, имеет ли объект положительный или знак минус. Знак объекта положителен, если положительное изменение во входе объекта в номинальной рабочей точке приводит к положительному изменению на объекте выход, когда объект достигает нового устойчивого состояния. В этом примере Системный объект Бака с водой имеет положительный знак объекта.
Амплитуды синуса — Задают амплитуды введенных возмущений синусоиды. В этом примере задайте амплитуду синуса 0,3.
Запустите эксперимент в 140 секунд, чтобы гарантировать, что уровень воды достиг установившийся . Рекомендуемая длительность эксперимента составляет 200/полос пропускания секунд = 200/0.4 = 500 с. Со временем начала 140 секунд время остановки составляет 640 секунд. Время остановки симуляции далее увеличено, чтобы получить полный эксперимент.
set_param([mdl,'/Variant Subsystem/Tuning/Closed-Loop PID Autotuner1'],'TargetPM','60'); set_param([mdl,'/Signal Editor'],'ActiveScenario','TuningSignal_OnePoint'); simOut = sim(mdl,'StopTime','800'); simOut.Kp_tuned
ans = 1.8257
simOut.Ki_tuned
ans = 0.2037
В watertank
Модель Simulink, начальными усилениями ПИ-контроллера является Kp = 1.599340 и Ки = 0.079967. После настройки усилениями контроллера является Kp = 1.82567 и Ки = 0.20373.
Замените усиления контроллера на новые автоматически настроенные усиления и подтвердите конструктивные требования.
Kp = simOut.Kp_tuned; Ki = simOut.Ki_tuned; simOut = sim(mdl,'StopTime','100'); figure; plot(simOut.ScopeDataGS.time,simOut.ScopeDataGS.signals.values); grid on title('Step Response of Controller Tuned with 60-Degree Target Phase Margin');
StepPerformance_OnePoint = stepinfo(simOut.ScopeDataGS.signals.values(:),simOut.ScopeDataGS.time(:),10,1)
StepPerformance_OnePoint = struct with fields:
RiseTime: 3.6251
TransientTime: 22.5219
SettlingTime: 22.5219
SettlingMin: 9.1089
SettlingMax: 10.7821
Overshoot: 8.6895
Undershoot: 0
Peak: 9.7821
PeakTime: 9.5500
Переходной процесс имеет время нарастания 3,6251 секунд и перерегулирование 8,6895%. Перерегулирование больше, чем желаемый; увеличьте целевой запас по фазе до 75 градусов, чтобы улучшить переходный процесс с обратной связью.
set_param([mdl,'/Variant Subsystem/Tuning/Closed-Loop PID Autotuner1'],'TargetPM','75');
Исследуйте результат симуляции. Система в установившемся, когда эксперимент запускается и возвращается к установившемуся после того, как настройка завершается. Как индикация относительно контроллера, настраивающего эффективность, блок Closed-Loop PID Autotuner достигает 100%-го уровня сходимости раньше, чем рекомендуемые 500 секунд. В результате уменьшайте длительность эксперимента до 300 секунд, означая время остановки 440 секунд. Соответственно, уменьшите время остановки симуляции с 800 секунд до 500 секунд.
Kp = 1.599340; Ki = 0.079967; set_param([mdl,'/Signal Editor'],'ActiveScenario','TuningSignal_OnePointAdjusted'); simOut = sim(mdl,'StopTime','500'); simOut.Kp_tuned
ans = 1.9351
simOut.Ki_tuned
ans = 0.1141
Симуляция новыми параметрами эксперимента производит настроенные усиления Kp = 1.93514 и Ки = 0.11415. Исследуйте переходной процесс снова с помощью усилений, настроенных с увеличенным целевым значением запаса по фазе.
Kp = simOut.Kp_tuned; Ki = simOut.Ki_tuned; simOut = sim(mdl,'StopTime','100'); figure; plot(simOut.ScopeDataGS.time,simOut.ScopeDataGS.signals.values); grid on title('Step Response of Controller Tuned with 75-Degree Target Phase Margin');
StepPerformance_OnePointAdjusted = stepinfo(simOut.ScopeDataGS.signals.values(:),simOut.ScopeDataGS.time(:),10,1)
StepPerformance_OnePointAdjusted = struct with fields:
RiseTime: 4.1398
TransientTime: 21.4047
SettlingTime: 21.4047
SettlingMin: 9.1044
SettlingMax: 10.2829
Overshoot: 3.1438
Undershoot: 0
Peak: 9.2829
PeakTime: 12.1100
Переходной процесс имеет время нарастания 4,1398 секунд и перерегулирование 3,1438%, оба из которых соответствуют конструктивным требованиям.
Симулируйте модель с настроенными усилениями для нескольких рабочих точек = [5, 10, 15, 20].
set_param([mdl,'/Signal Editor'],'ActiveScenario','TuningSignal_SinglePID'); simOut_single = sim(mdl,'StopTime','2400');
Набор настроенных усилений производит желаемый ответ. Можно теперь выполнить настройку в нескольких рабочих точках, чтобы создать запланированный на усиление контроллер.
Рабочий диапазон планирования переменной от 1 до 20 покрыт рабочими точками для автоматической настройки. В этом примере запланированные на усиление усиления контроллера настраиваются в четырех рабочих точках с = [5, 10, 15, 20]. Чтобы настроиться в нескольких рабочих точках, используйте блок Signal Editor, чтобы создать ссылку, и автотюнер запускают/останавливают сигнал
Используя входной сигнал, симулируйте watertank_gainscheduledcontrol
модель в течение целой продолжительности процесса автоматической настройки. В конце симуляции сохраните и настроенные усиления и точки останова как векторы в MATLAB® Workspace.
Kp = 1.599340; Ki = 0.079967; set_param([mdl,'/Signal Editor'],'ActiveScenario','TuningSignal'); simOut = sim(mdl,'StopTime','2400'); Kp_tuned = simOut.Kp_tuned
Kp_tuned = 4×1
1.9283
1.9351
1.9382
1.9400
Ki_tuned = simOut.Ki_tuned
Ki_tuned = 4×1
0.1277
0.1141
0.1082
0.1046
breakpoints = simOut.breakpoints
breakpoints = 4×1
0.1550
0.1579
0.1592
0.1600
Чтобы исследовать эффективность запланированного на усиление контроллера, установите Различную Подсистему на Режим тестирования и симулируйте модель.
set_param([mdl,'/Variant Subsystem'],'SimMode','Testing'); simOut_GS = sim(mdl,'StopTime','2400');
Используя запланированный на усиление контроллер, переходные процессы уровня воды на Системном объекте Бака с водой намного быстрее и имеют меньше перерегулирования, чем ненастроенный контроллер, используемый в watertank Модели Simulink.
Кроме того, настроенный запланированный на усиление контроллер приводит к лучшей эффективности переходного процесса, чем один набор усилений, настроенных в уровне воды = 10.
Используйте compareControllers_watertank
скрипт, чтобы вычислить характеристики переходного процесса для ПИД-регулятора, настроенного в = 10 и запланированный на усиление контроллер. Скрипт генерирует две таблицы, которые содержат время нарастания (в секундах) и перерегулирование процента для запланированного на усиление контроллера и одного набора усилений контроллера.
compareControllers_watertank
RiseTime=2×4 table
H = 1 to 5 H = 5 to 10 H = 10 to 15 H = 15 to 20
__________ ___________ ____________ ____________
Single PID 4.6721 3.7818 3.715 3.6826
Gain-Scheduled 4.8012 3.845 3.7744 3.7402
Overshoot=2×4 table
H = 1 to 5 H = 5 to 10 H = 10 to 15 H = 15 to 20
__________ ___________ ____________ ____________
Single PID 0.69606 5.2553 5.888 6.2236
Gain-Scheduled 0.14074 4.6827 5.3208 5.6592
Запланированный на усиление контроллер приводит к меньшему перерегулированию для сопоставимого времени нарастания, по сравнению с одним набором усилений, настроенных в одной рабочей точке. Этот рабочий процесс полезен, когда это необходимо, чтобы настроить запланированный на усиление контроллер, использующий блок Closed-Loop PID Autotuner.
Закройте модель.
close_system(mdl,0);
Closed-Loop PID Autotuner | PID Controller | Signal Editor | Lookup Table Dynamic | Variant Subsystem, Variant Model