frest.findSources

Пакет: frest

Идентифицируйте изменяющиеся во времени исходные блоки

Синтаксис

blocks = frest.findSources(model)
blocks = frest.findSources(model,io)

Описание

blocks = frest.findSources(model) находит все изменяющиеся во времени исходные блоки в сигнальном пути любой выходной точки линеаризации, отмеченной в Simulink® модели model.

blocks = frest.findSources(model,io) находит все изменяющиеся во времени исходные блоки в сигнальном пути любой выходной точки линеаризации, заданной в массиве точек линейного анализа io.

Входные параметры

model

Вектор символов, которая содержит имя модели Simulink, в которой вы идентифицируете изменяющиеся во времени исходные блоки для оценки частотной характеристики.

io

Массив точек ввода-вывода линеаризации.

Элементы io являются объектами ввода-вывода линеаризации, которые вы создаете с getlinio или linio. frest.findSources использует только выходные точки для определения местоположения изменяющихся во времени исходных блоков, которые могут мешать оценке частотной характеристики. Смотрите Алгоритмы для получения дополнительной информации.

Выходные аргументы

blocks

Блочные пути изменяющихся во времени исходных блоков в model который может мешать оценке частотной характеристики, возвращенной как массив Simulink.BlockPath объекты. blocks включает изменяющиеся во времени исходные блоки внутри подсистем и модели, на которые ссылаются в режиме normal mode.

Если вы предоставляете io, blocks содержит все изменяющиеся во времени исходные блоки, вносящие вклад в сигнал в выходных точках в io.

Если вы не предоставляете io, blocks содержит все изменяющиеся во времени исходные блоки, вносящие вклад в сигнал в выходных точках, отмеченных в model.

Примеры

Оцените частотную характеристику модели, имеющей изменяющиеся во времени исходные блоки. Этот пример показывает использование 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.

Введенный в R2010b