Проверка характеристик частотного диапазона самолета

Этот пример показывает, как использовать блоки в библиотеках Linear Analysis Plots и Model Verification Simulink Control Design. Программное обеспечение Simulink Control Design обеспечивает блоки, которые можно добавить в модели Simulink, чтобы проверять, что линейный ответ модели удовлетворяет характеристики частотного диапазона во время симуляции. В этом примере проверяются запасы по амплитуде и фазе скоростного цикла управления самолета, когда топливная загрузка изменяется.

Модель самолета

Откройте модель Simulink самолета:

open_system('scdaircraft')

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

Проверка запасов по амплитуде и фазе цикла

Модель самолета содержит блок Check Gain and Phase Margins от библиотеки Simulink Control Design Model Verification. Этот блок вычисляет линеаризацию цикла, замеченного блоком Velocity Controller каждые 30 минут моделируемого времени.

Блок вычисляет запасы по амплитуде и фазе цикла и проверяет что:

  • Поле усиления больше, чем 30 дБ

  • Поле фазы больше, чем 60 градусов

При вычислении полей должен быть задан знак обратной связи цикла. Чтобы определить знак обратной связи, проверяйте, включает ли путь, заданный iOS, суммирование обратной связи:

  • Если путь включает блок суммирования, используйте позитивные отклики.

  • Если путь не включает блок суммирования, используйте обратную связь, заданную блоком суммирования.

Линеаризация iOS, заданная в блоке Check Gain and Phase Margins, включает блок суммирования с отрицательной обратной связью. Поэтому знак обратной связи, используемый, чтобы вычислить запасы по амплитуде и фазе, должен быть положительным.

Блок показывает вычисленные запасы по амплитуде и фазе в табличном формате. Нажатие кнопки Show Plot открывает табличное отображение.

Вкладка Assertion в блоке указывает, что предупреждение выдано, когда утверждение перестало работать, т.е. запасы по амплитуде и фазе не удовлетворены.

Модель также включает блок Nichols Plot от библиотеки Simulink Control Design Linear Analysis Plots, которая вычисляет ответ цикла, когда топливная масса понижается во время симуляции. Блок Generate dynamic range events генерирует возрастающее ребро каждый раз, когда топливная масса является кратной 10% максимальной топливной массы. Эти возрастающие ребра инициировали линеаризацию и отображают результаты на графике Николса. График Показа в диалоговом окне Block Parameters открывает график Николса.

Блок Signal Builder в модели задает скоростной профиль для самолета. Дважды щелкните по блоку, чтобы показать менеджеру по Верификации Тулу, который отображает блоки проверки, включенные в модель. Смотрите Тесты Симуляции Построения при помощи менеджера по Верификации (Simulink) для получения дополнительной информации.

Чтобы проверять, удовлетворены ли заданные запасы по амплитуде и фазе, моделируйте модель путем нажатия кнопки Start simulation в окне блока Signal Builder или модели Simulink.

sim('scdaircraft');
Warning: Assertion detected in 'scdaircraft/Check Gain and Phase Margins' at
time 27020.4 

Табличное отображение показывает:

  • Времена, когда цикл управления линеаризуется.

  • Вычисленные запасы по амплитуде и фазе.

Поля, которые нарушают заданные границы, отображают красным. Связанное поле фазы нарушено к концу симуляции, когда топливная масса и скорость самолета понизились. График Николса показывает маленькие изменения ответа цикла как топливная загрузка и изменение самолета скорости.

Таблица показывает, что линеаризация не вычисляется в точно каждые 30 min, но при маленьких изменениях 30 min. Это вызвано тем, что обнаружение пересечения нулем для блока не включено. Включение пересечения нулем для блока гарантирует, что линеаризация вычисляется точно в 30 интервалах min, но может увеличить время, которое симуляция занимает, чтобы запуститься.

Можно выбрать опцию обнаружения пересечения нулем Enable в диалоговом окне Block Parameters или использовать API командной строки блока, чтобы включить обнаружение пересечения нулем:

set_param('scdaircraft/Check Gain and Phase Margins','ZeroCross','on')
sim('scdaircraft');
Warning: Assertion detected in 'scdaircraft/Check Gain and Phase Margins' at
time 27000 

Журналирование линейных систем

Вкладка Logging в блоке Check Gain and Phase Margins указывает, что вычисленные линейные системы сохранены в переменную рабочей области.

В линейные системы входят структура с полями time и values.

LinearAircraft
LinearAircraft = 

  struct with fields:

              time: [17x1 double]
            values: [1x1x17x1 ss]
         blockName: 'scdaircraft/Check Gain and Phase Margins'
    assertionValue: [17x1 logical]

Поле values хранит линейные системы как массив систем пространства состояний LTI (см. Массивы Моделей LTI) в документации Control System Toolbox для получения дополнительной информации).

Можно получить отдельные системы путем индексации в поле values.

L = LinearAircraft.values(:,:,17)
L =
 
  A = 
                 scdaircraft/  scdaircraft/  scdaircraft/
   scdaircraft/      -0.01122             0             0
   scdaircraft/      -0.01184             0             0
   scdaircraft/        0.7492             0       -0.4326
 
  B = 
                 Velocity Con
   scdaircraft/        0.3774
   scdaircraft/             0
   scdaircraft/             0
 
  C = 
                 scdaircraft/  scdaircraft/  scdaircraft/
   Velocity Con    -1.998e-15             1       -0.4326
 
  D = 
                 Velocity Con
   Velocity Con             0
 
Continuous-time state-space model.

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

bdclose('scdaircraft')
clear('LinearAircraft','L')

Похожие темы