В этом примере показано, как использовать блоки в библиотеках 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 в блоке указывает, что предупреждение выдано, когда утверждение перестало работать, i.e., запасам по амплитуде и фазе не удовлетворяют.
Модель также включает Nichols Plot
блок из библиотеки Simulink Control Design Linear Analysis Plots, которая вычисляет ответ цикла как топливную массу, понижается во время симуляции. Generate dynamic range events
блок генерирует возрастающее ребро каждый раз, когда топливная масса является кратной 10% максимальной топливной массы. Эти возрастающие ребра инициировали линеаризацию и отображают результаты на графике Николса. График Показа в диалоговом окне Block Parameters открывает график Николса.
Signal Builder
блок в модели задает скоростной профиль для самолета. Дважды щелкните по блоку, чтобы показать менеджеру по Верификации Тулу, который отображает блоки проверки, включенные в модель. Смотрите Тесты Симуляции Построения при помощи менеджера по Верификации для получения дополнительной информации.
Чтобы проверять, удовлетворяют ли заданным запасам по амплитуде и фазе, симулируйте модель путем нажатия на 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. Для получения дополнительной информации смотрите Массивы моделей.
Можно получить отдельные системы путем индексации в values
поле .
L = LinearAircraft.values(:,:,17)
L = A = scdaircraft/ Continuous/I Filter scdaircraft/ -0.01122 0 0 Continuous/I -0.01184 0 0 Filter 0.7492 0 -0.4326 B = Velocity Con scdaircraft/ 0.3774 Continuous/I 0 Filter 0 C = scdaircraft/ Continuous/I Filter 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')