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

Этот пример показывает, как использовать интерфейс slLinearizer, чтобы обработать в пакетном режиме, линеаризуют модель Simulink. Вы отличаетесь значения параметра модели и получаете, несколько открываются - и передаточные функции с обратной связью из модели.

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

Каскадная модель цикла

Модель scdcascade содержит пару каскадных циклов управления с обратной связью. Каждый цикл включает контроллер PI. Модели объекта управления, G1 (внешний цикл) и G2 (внутренний цикл), являются моделями LTI.

Используйте интерфейс slLinearizer, чтобы первоначально анализировать динамику внутреннего цикла. Затем анализируйте динамику внешнего цикла.

mdl = 'scdcascade';
open_system(mdl);

Создайте интерфейс slLinearizer для scdcascade

sllin = slLinearizer(mdl)
 
slLinearizer linearization interface for "scdcascade":

No analysis points. Use the addPoint command to add new points.
No permanent openings. Use the addOpening command to add new permanent openings.
Properties with dot notation get/set access:
      Parameters         : [] 
      OperatingPoints    : [] (model initial condition will be used.)
      BlockSubstitutions : []
      Options            : [1x1 linearize.LinearizeOptions]

Отличайтесь контроллер внутреннего цикла усиления

Для анализа внутреннего цикла отличайтесь усиления контроллера PI внутреннего цикла блок, C2. Отличайтесь пропорциональное усиление (Kp2) и интегральное усиление (Ki2) в 15%-й области значений.

Kp2_range = linspace(Kp2*0.85,Kp2*1.15,6);
Ki2_range = linspace(Ki2*0.85,Ki2*1.15,4);
[Kp2_grid, Ki2_grid] = ndgrid(Kp2_range,Ki2_range);

params(1).Name = 'Kp2';
params(1).Value = Kp2_grid;
params(2).Name = 'Ki2';
params(2).Value = Ki2_grid;

sllin.Parameters = params;

Kp2_range и Ki2_range задают демонстрационные значения для параметров Ki2 и Kp2. Чтобы получить передаточную функцию для каждой комбинации Kp2 и Ki2, вы используете ndgrid и создаете 6x4 сетка параметра с массивами сетки Kp2_grid и Ki2_grid. Вы конфигурируете свойство Parameters sllin со структурой params. Эта структура задает параметры, которые будут отличаться и их массивы сетки.

Анализируйте полную передаточную функцию с обратной связью для внутреннего цикла

Полная передаточная функция с обратной связью для внутреннего цикла, с открытым внешним циклом, равна передаточной функции от u1 до y2. Чтобы устранить эффекты внешнего цикла, повредите цикл в e1, y1m или y1. В данном примере повредите цикл в e1.

Добавьте u1 и y2, когда анализ указывает, и e1 как постоянное открытие sllin.

addPoint(sllin,{'y2','u1'});
addOpening(sllin,'e1');

Получите передаточную функцию от u1 до y2.

r2yi = getIOTransfer(sllin,'u1','y2');

r2yi, 6x4 массив модели ss, содержит передаточную функцию для каждой заданной комбинации параметра. Программное обеспечение использует образцовые начальные условия в качестве рабочей точки линеаризации.

Поскольку e1 является постоянным открытием sllin, r2yi не включает эффекты внешнего цикла.

Постройте переходной процесс для r2yi.

stepplot(r2yi);

Переходной процесс для всех моделей отличается по 10%-й области значений. Время установления для большинства моделей составляет меньше чем 1,5 секунды.

Анализируйте передаточную функцию внутреннего цикла на объекте Вывод

Получите передаточную функцию внутреннего цикла в y2 с внешним циклом, открытым в e1.

Li = getLoopTransfer(sllin,'y2',-1);

Поскольку программное обеспечение принимает позитивные отклики по умолчанию, и scdcascade использует отрицательную обратную связь, вы задаете знак обратной связи с помощью третьего входного параметра. Теперь, Li = -G2C2.

Постройте предвещать ответ для Li.

bodeplot(Li);

График значения для всех моделей отличается по области значений на 3 дБ. График фазы показывает большую часть изменения, приблизительно 20 градусов, в [1 10] rad/s интервал.

Отличайтесь контроллер внешнего цикла усиления

Для анализа внешнего цикла отличайтесь усиления контроллера PI внешнего цикла блок, C1. Отличайтесь пропорциональное усиление (Kp1) и интегральное усиление (Ki1) в 20%-й области значений.

Kp1_range = linspace(Kp1*0.8,Kp1*1.2,6);
Ki1_range = linspace(Ki1*0.8,Ki1*1.2,4);
[Kp1_grid, Ki1_grid] = ndgrid(Kp1_range,Ki1_range);

params(1).Name = 'Kp1';
params(1).Value = Kp1_grid;
params(2).Name = 'Ki1';
params(2).Value = Ki1_grid;

sllin.Parameters = params;

Подобно рабочему процессу для конфигурирования сетки параметра для анализа внутреннего цикла вы создаете структуру, params, который задает 6x4 сетка параметра. Вы реконфигурировали sllin.Parameters, чтобы использовать новую сетку параметра. sllin теперь использует значения по умолчанию для Ki2 и Kp2.

Анализируйте передаточную функцию с обратной связью от ссылки до объекта Вывод

Удалите e1 из списка постоянных открытий для sllin перед продолжением анализа внешнего цикла.

removeOpening(sllin,'e1');

Чтобы получить передаточную функцию с обратной связью из ссылочного сигнала, r, к объекту, вывод, y1m, добавляет r и y1m, когда анализ указывает на sllin.

addPoint(sllin,{'r','y1m'});

Получите передаточную функцию от r до y1m.

r2yo = getIOTransfer(sllin,'r','y1m');

Постройте переходной процесс для r2yo.

stepplot(r2yo);

Переходной процесс в underdamped для всех моделей.

Анализируйте чувствительность внешнего цикла на объекте Вывод

Чтобы получить чувствительность внешнего цикла на объекте вывод, используйте y1 в качестве аналитической точки. Добавьте y1 как аналитическую точку к sllin.

addPoint(sllin,'y1');

Получите чувствительность внешнего цикла в y1.

So = getSensitivity(sllin,'y1');

Постройте переходной процесс So.

stepplot(So);

Этот график показывает, что требуется приблизительно 15 секунд, чтобы отклонить воздействие шага на объекте вывод, y1.

Закройте модель Simulink

bdclose(mdl);