Пакет: лес
Определение изменяющихся во времени исходных блоков
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 начинается с каждой выходной точки линеаризации в модели. Из каждой выходной точки алгоритм отслеживает каждый путь сигнала в обратном направлении по блокам. Алгоритм сообщает о любом исходном блоке (блоке без входного порта), который он обнаруживает, если этот исходный блок не является постоянным или наземным блоком.
frest.findSources алгоритм отслеживает каждый путь сигнала, который может повлиять на значение сигнала в каждой выходной точке линеаризации в модели. Отслеживаемые пути включают в себя:
Сигнальные тракты внутри виртуальных и невиртуальных подсистем.
Пути сигналов внутри ссылочных моделей нормального режима. Перед использованием установите обычный режим моделирования для всех ссылочных моделей frest.findSources чтобы гарантировать, что алгоритм идентифицирует исходные блоки в ссылочных моделях.
Сигналы, направляемые через блоки «From» и «Goto» или через блоки «Data Store Read» и «Data Store Write».
Сигналы, направляемые через коммутаторы. frest.findSources алгоритм предполагает, что любой полюс коммутатора может быть активным во время оценки частотного отклика. Поэтому алгоритм следует за сигналом обратно через все входы коммутатора.
Примечание
Некоторые изменяющиеся во времени исходные блоки не могут быть найдены frest.findSources. Если внутренний сигнальный тракт блока не содержит блока без входного порта, этот блок не сообщается функцией.
Например, рассмотрим модель scdspeed_ctrlloop. Эта модель имеет одну точку вывода линеаризации, расположенную на выходе блока Sum с меткой Speed Output. ( 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и сообщает об этом блоке.

Блок «Сумма» Speed Output имеет другой вход, который алгоритм отслеживает обратно в ссылочную модель Engine Model. Engine Model содержит несколько подсистем, и алгоритм отслеживает сигнал через эти подсистемы, чтобы идентифицировать любые присутствующие изменяющиеся во времени исходные блоки.

Например, Combustion подсистема включает блок From, отмеченный delta который направляет сигнал от Spark Advance источник. Поскольку Spark Advance является постоянным исходным блоком, однако алгоритм не сообщает о наличии блока.
Алгоритм продолжает трассировку до тех пор, пока не будут изучены все возможные пути сигнала, способствующие сигналу в каждой выходной точке линеаризации.
Можно использовать Simulink Model Advisor, чтобы определить, существуют ли изменяющиеся во времени исходные блоки в пути сигнала выходных точек линейного анализа в модели. Для этого используйте функцию проверки Simulink Control Design Checks. Дополнительные сведения об использовании Model Advisor см. в разделе Проверка модели с помощью Model Advisor.