Пакет: frest
Идентифицируйте изменяющиеся во времени исходные блоки
blocks = frest.findSources(model)
blocks = frest.findSources(model,io)
находит все изменяющиеся во времени исходные блоки в сигнальном пути любой выходной точки линеаризации, отмеченной в Simulink® модели blocks
= frest.findSources(model
)model
.
находит все изменяющиеся во времени исходные блоки в сигнальном пути любой выходной точки линеаризации, заданной в массиве точек линейного анализа blocks
= frest.findSources(model
,io
)io
.
|
Вектор символов, которая содержит имя модели Simulink, в которой вы идентифицируете изменяющиеся во времени исходные блоки для оценки частотной характеристики. |
|
Массив точек ввода-вывода линеаризации. Элементы |
|
Блочные пути изменяющихся во времени исходных блоков в Если вы предоставляете Если вы не предоставляете |
Оцените частотную характеристику модели, имеющей изменяющиеся во времени исходные блоки. Этот пример показывает использование frest.findSources
идентифицировать изменяющиеся во времени исходные блоки, которые мешают оценке частотной характеристики. Вы также можете увидеть использование BlocksToHoldConstant
опция frestimateOptions
отключить изменяющиеся во времени исходные блоки в оценке.
Загрузите модель scdspeed_ctrlloop
.
mdl = 'scdspeed_ctrlloop'; open_system(mdl) % Convert referenced model to normal mode for accuracy set_param('scdspeed_ctrlloop/Engine Model',... 'SimulationMode','Normal');
Во-первых, посмотрите эффекты изменяющихся во времени исходных блоков на оценку частотной характеристики. Для этого выполните оценку, не отключая изменяющиеся во времени исходные блоки.
В этом примере точки ввода-вывода линеаризации уже определены в модели. Используйте getlinio
команда для получения точек ввода-вывода для frestimate
.
io = getlinio(mdl)
Задайте сигнал синестрейма и вычислите расчетную частотную характеристику sysest
.
in = frest.Sinestream('Frequency',logspace(1,2,10),... 'NumPeriods',30,'SettlingPeriods',25); [sysest,simout] = frestimate(mdl,io,in);
Выполните точную линеаризацию и сравните с расчетной характеристикой.
sys = linearize(mdl,io); bodemag(sys,sysest,'r*')
Оценочная частотная характеристика не совпадает с точной линеаризацией. Несоответствие происходит, потому что изменяющиеся во времени исходные блоки в модели препятствуют достижению ответом устойчивого состояния.
Найдите изменяющиеся во времени блоки, используя frest.findSources
.
srcblks = frest.findSources(mdl);
srcblks
является массивом блочных путей, соответствующих изменяющимся во времени исходным блокам в модели. Чтобы изучить результат, индексируйте в массив.
Для примера введите
srcblks(2)
возвращает результат
ans = Simulink.BlockPath Package: Simulink Block Path: 'scdspeed_ctrlloop/Engine Model' 'scdspeed_plantref/Drag Torque/Step1'
Теперь можно оценить частотную характеристику без вклада изменяющихся во времени исходных блоков. Для этого установите BlocksToHoldConstant
опция frestimateOptions
равно srcblks
, и запустите оценку.
opts = frestimateOptions opts.BlocksToHoldConstant = srcblks % Run frestimate again with blocks disabled [sysest2,simout2] = frestimate(mdl,io,in,opts);
Оценка частотной характеристики теперь обеспечивает хорошее соответствие с точным результатом линеаризации.
bodemag(sys,sysest2,'r*')
Использовать frest.findSources
идентифицировать изменяющиеся во времени исходные блоки, которые могут мешать оценке частотной характеристики. Чтобы отключить такие блоки для оценки частотной характеристики, установите BlocksToHoldConstant
опция frestimateOptions
равно blocks
или подмножество blocks
. Затем оцените частотную характеристику, используя frestimate
.
Иногда, model
включает в себя ссылку на модели, содержащую исходные блоки в сигнальном пути выходной точки линеаризации. В таких случаях установите ссылку на модели в нормальный режим симуляции, чтобы убедиться, что frest.findSources
определяет их местоположение. Используйте set_param
команда для установки SimulationMode
любых ссылок на модели Normal
перед запуском frest.FindSources
.
Чтобы найти изменяющиеся во времени исходные блоки, которые могут мешать оценке частотной характеристики, frest.findSources
начинается с каждой выходной точки линеаризации в модели. От каждой выходной точки алгоритм прослеживает каждый путь сигнала назад блок за блоком. Алгоритм сообщает о любом исходном блоке (блоке без входного порта), который он обнаруживает, если этот исходный блок не является Constant или Ground блоком.
frest.findSources
алгоритм прослеживает каждый путь сигнала, который может повлиять на значение сигналов в каждой выходной точке линеаризации в модели. Трассированные пути включают:
Сигнальные пути внутри виртуальной и невиртуальной подсистем.
Сигнальные пути внутри моделей, на которые ссылаются в режиме normal mode. Установите все модели-ссылки в нормальный режим симуляции перед использованием frest.findSources
чтобы убедиться, что алгоритм идентифицирует исходные блоки в ссылочных моделях.
Сигналы, маршрутизируемые через From и Goto блоки или через Data Store Read и Data Store Write блоки.
Сигналы, маршрутизируемые через переключатели. frest.findSources
алгоритм принимает, что любой полюс переключателя может быть активным во время оценки частотной характеристики. Поэтому алгоритм следует сигналу назад через все входы переключателя.
Примечание
Некоторые изменяющиеся во времени исходные блоки могут не быть найдены frest.findSources
. Если внутренний путь сигнала блока не содержит блок без входного порта, этот блок не сообщается функцией.
Для примера рассмотрим модель scdspeed_ctrlloop
. Эта модель имеет одну выходную точку линеаризации, расположенную на выходе маркированного Sum блока Speed Output
. (The frest.findSources
алгоритм игнорирует входные точки линеаризации.) Перед запуском frest.findSources
, преобразуйте ссылку на модель в нормальный режим симуляции:
set_param('scdspeed_ctrlloop/Engine Model',... 'SimulationMode','Normal');
Теперь можно запускать frest.findSources
идентифицировать изменяющиеся во времени исходные блоки с помощью выходной точки линеаризации, заданной в модели.
srcblks = frest.findSources('scdspeed_ctrlloop');
Алгоритм начинается в выходной точке и прослеживается назад через блок Sum Speed Output
. Один вход в Speed Output
является подсистемой External Disturbance
. Алгоритм входит в подсистему, находит маркированный исходный блок Step Disturbance
и сообщает об этом блоке.
Блок Sum Speed Output
имеет другой вход, который алгоритм трассирует назад в ссылку на модель Engine Model
. Engine Model
содержит несколько подсистем, и алгоритм отслеживает сигнал через эти подсистемы, чтобы идентифицировать любые имеющиеся изменяющиеся во времени исходные блоки.
Для примера, Combustion
подсистема включает From блок, отмеченный delta
который маршрутизирует сигнал от Spark Advance
источник. Потому что Spark Advance
является постоянным исходным блоком, однако алгоритм не сообщает о наличии блока.
Алгоритм продолжает трассировку до тех пор, пока не будут исследованы все возможные пути сигнала, вносящие вклад в сигнал в каждой выходной точке линеаризации.
Можно использовать Simulink Model Advisor, чтобы определить, существуют ли изменяющиеся во времени исходные блоки в сигнальном пути выходных точек линейного анализа в вашей модели. Для этого используйте проверку Model Advisor Simulink Control Design Checks. Для получения дополнительной информации об использовании Model Advisor, смотрите Проверить модель Используя Model Advisor.