Основанные на событии подсистемы (триггируемые подсистемы) и другие основанные на событии модели требуют специальной обработки во время линеаризации.
Выполнение триггируемой подсистемы зависит от предыдущих событий сигнала, таких как нулевые пересечения. Однако, потому что линеаризация происходит в определенный момент вовремя, триггерный случай никогда не происходит.
Примером основанной на событии подсистемы является механизм внутреннего сгорания (IC). Когда поршень механизма приближается к верхней части рабочего хода, искра вызывает сгорание. Синхронизация искры для сгорания зависит от скорости и положения коленчатого вала механизма.
В scdspeed
модель, триггируемые подсистемы генерируют события, когда поршни достигают обоих верх и низ рабочего хода. Линеаризация в присутствии таких триггируемых подсистем не значима.
Можно получить значимую линеаризацию триггируемых подсистем, все еще сохраняя поведение симуляции, путем переделки основанной на событии динамики как одного из следующего:
Смешанная средняя модель, которая аппроксимирует основанное на событии поведение в зависимости от времени.
Подсистема вызова периодической функции, с Нормальным режимом симуляции.
В случае подсистем вызова периодической функции подсистема линеаризует к выборке, при которой периодически выполняется подсистема.
Во многих приложениях управления контроллер реализован как дискретный контроллер, но выполнение контроллера управляется внешним планировщиком. Можно использовать такие линеаризовавшие модели объекта управления, когда подсистемой контроллера является периодическая Подсистема вызова функций.
Если переделка основанной на событии динамики не приводит к хорошим результатам линеаризации, пробует оценку частотной характеристики. См., что Оценочная Частотная характеристика Использует Model Linearizer.
Примечание
Если триггируемая подсистема будет отключена в текущих условиях работы и будет иметь по крайней мере одну прямую пару ввода-вывода передачи, то подсистема повредит путь к линеаризации во время линеаризации. В таком случае задайте замену блока или гарантируйте, что подсистема не имеет пары ввода-вывода передачи.
В этом примере показано, как использовать аппроксимирование кривыми, чтобы аппроксимировать основанную на событии динамику механизма.
scdspeed
модель линеаризует, чтобы обнулить потому что scdspeed/Throttle & Manifold/Intake Manifold
триггируемая подсистема события.
Можно аппроксимировать основанную на событии динамику scdspeed/Throttle & Manifold/Intake Manifold
подсистема путем добавления блока Convert to mass charge в подсистеме.
Блок Convert to mass charge аппроксимирует отношение между Воздушным Зарядом, Разнообразным Давлением и Скоростью вращения двигателя как квадратичный полином.
Если результаты измерений для внутренних сигналов не доступны, используйте данные моделирования из исходной модели, чтобы вычислить неизвестные параметры p1, p2, p3, p4, и p5 с помощью метода выравнивания методом наименьших квадратов.
Когда у вас есть результаты измерений для внутренних сигналов, можно использовать Simulink® Программное обеспечение Design Optimization™, чтобы вычислить неизвестные параметры. Смотрите Оценку Параметра модели Скорости вращения двигателя (Simulink Design Optimization), чтобы узнать больше о вычислении параметров модели, линеаризации этой аппроксимированной модели и разработке обратной связи, которой управляют для линейной модели.
Следующая фигура сравнивает симуляции исходной основанной на событии модели и аппроксимированной модели. Каждый из импульсов соответствует ступенчатому изменению в скорости вращения двигателя. Размер ступенчатого изменения между 1 500 и 5500. Таким образом можно использовать аппроксимированную модель, чтобы точно симулировать и линеаризовать механизм между 1 500 об/мин и 5 500 об/мин.
В этом примере показано, как использовать подсистемы вызова периодической функции, чтобы аппроксимировать основанную на событии динамику для линеаризации.
Откройте модель Simulink.
mdl = 'scdPeriodicFcnCall';
open_system(mdl)
Линеаризуйте модель в рабочей точке модели.
io = getlinio(mdl); linsys = linearize(mdl,io)
linsys = D = Desired Wat Water-Tank S 0 Static gain.
Линеаризация является нулем, потому что подсистема не является вызовом периодической функции.
Откройте блок Externally Scheduled Controller, который является блоком Function-Call Subsystem.
Откройте функциональный блок и сконфигурируйте его.
Установите параметр типа Шага расчета на periodic
.
Установите параметр Шага расчета на 0.01
, который является шагом расчета контроллера.
В качестве альтернативы можно сконфигурировать функциональный блок программно с помощью следующего кода.
block = 'scdPeriodicFcnCall/Externally Scheduled Controller/function'; set_param(block,'SampleTimeType','periodic') set_param(block,'SampleTime','0.01')
Линеаризуйте модель.
linsys2 = linearize(mdl,io); bode(linsys2)
Линеаризация больше не является нулем.