Подход, который вы используете для регистрации данных для сигнала в подсистеме For Each, зависит от того, является ли сигнал:
Nonbus сигнал - Журнал непосредственно в Для каждой подсистемы
Сигнал шины или массива шин - Используйте один из следующих подходов:
Используйте блок Bus Selector, чтобы выбрать сигналы, которые вы хотите записать и отметить эти сигналы для логгирования сигналов. Этот подход хорошо работает для многих моделей.
Присоедините сигнал к блоку Outport и логгируйте сигнал вне подсистемы For Each. Используйте этот подход, когда вы хотите записать сигнал всей шины, и этот сигнал шины включает много сигналов элемента шины.
Примечание
Вы не можете регистрировать сигналы шины непосредственно в подсистеме For Each.
Вы не можете зарегистрировать сигнал внутри ссылочной модели, который находится внутри подсистемы For Each, если существует одно из следующих условий:
Подсистема For Each находится в модели симуляции в быстром режиме Accelerator.
Сама подсистема For Each находится в модели, на которую ссылается блок Model в режиме Accelerator.
Данные для каждого зарегистрированного сигнала в подсистеме For Each сохраняются в отдельном Dataset
элемент как Simulink.SimulationData.Signal
объект. Формат данных записанного сигнала зависит от того, как вы устанавливаете параметр конфигурации Dataset signal format:
Если параметр timeseries
, затем каждый объект сигнала содержит массив MATLAB®
timeseries
объекты. Массив сохраняет данные из разных Для каждой итерации отдельно.
Если параметр timetable
затем каждый объект сигнала содержит массив ячеек MATLAB timetable
объекты. Размерности этого массива совпадают с количеством итераций For Each. Для примера, если подсистема For Each имеет три итерации, то записанные данные имеют 3x1
массив timeseries
или timetable
объекты. Для вложенных Для каждой подсистемы каждый слой вложения добавляет другую размерность к записанным данным.
Этот пример регистрирует сигнал во вложенной подсистеме For Each.
Откройте ex_loginsideforeach_nested
модель.
open_system(docpath(fullfile(docroot,'toolbox','simulink',... 'examples','ex_loginsideforeach_nested.slx')))
В Simulink® Редактор, откройте For Each Subsystem1
блокируйте, и внутри этой подсистемы откройте For Each Subsystem2
блок.
Симулируйте модель и исследуйте данные логгирования сигналов для первой итерации верхней подсистемы и третьей итерации нижней подсистемы. The 2x3
timeseries
результаты двух итераций на первом уровне For Each и трех итераций на втором (вложенном) уровне
sim('ex_loginsideforeach_nested'); logsout.get('nestedDelay')
ans = Simulink.SimulationData.Signal Package: Simulink.SimulationData Properties: struct with fields: Name: 'nestedDelay' PropagatedName: '' BlockPath: [1×1 Simulink.SimulationData.BlockPath] PortType: 'outport' PortIndex: 1 Values: [2×3 timeseries]
Верните значения nestedDelay
объект.
logsout.get('nestedDelay').Values(1,3)
timeseries Common Properties: Name: 'nestedDelay' Time: [5x1 double] TimeInfo: [1x1 tsdata.timemetadata] Data: [1x1x5 double] DataInfo: [1x1 tsdata.datametadata]
Этот пример регистрирует сигнал двух шин в подсистеме For Each. Для одного сигнала шины вы используете блок Bus Selector и затем регистрируете каждый выбранный сигнал. Для другого сигнала шины вы используете блоки Outport и регистрируетесь вне подсистемы For Each.
Откройте ex_for_each_log_bus
модель.
open_system(docpath(fullfile(docroot,'toolbox','simulink',... 'examples','ex_for_each_log_bus.slx')))
В редакторе Simulink откройте For Each Subsystem
блок.
Для регистрации сигналов в limits
сигнал шины, сигнал разветвляется на блок Bus Selector, и каждый из сигналов элемента шины помечается для логгирования сигнала.
Чтобы выполнить логгирование всей COUNTERBUS
сигнал, сигнал шины соединяется с блоком Outport. Выходной сигнал от подсистемы For Each отмечен для логгирования сигналов. Чтобы сигнал шины пересек контур подсистемы, Bus Creator блок, который создает COUNTERBUS
сигнал имеет Output data type набора параметров, чтобы Bus: COUNTERBUS
и Output as nonvirtual bus флажок.
Симулируйте модель и исследуйте выход логгирования сигнала. Особое внимание на одном из сигналов элемента шины, регистрируемых в подсистеме For Each, и на сигнале шины, регистрируемом вне подсистемы For Each.
sim('ex_for_each_log_bus');
logsout
Simulink.SimulationData.Dataset 'logsout' with 3 elements Name BlockPath ________________________ ________________________________________ 1 [1x1 Signal] OutsideForEach ex_for_each_log_bus/For Each Subsystem 2 [1x1 Signal] <lower_saturation_limit> ...g_bus/For Each Subsystem/Bus Selector 3 [1x1 Signal] <upper_saturation_limit> ...g_bus/For Each Subsystem/Bus Selector - Use braces { } to access, modify, or add elements using index.
Верните значения lower_saturation_limit
объект.
logsout{2}.Values
3×1 timeseries array with properties: Events Name UserData Data DataInfo Time TimeInfo Quality QualityInfo IsTimeFirst TreatNaNasMissing Length
Верните значения OutsideForEach
объект.
logsout{1}.Values
ans = 3×1 struct array with fields: data limits
Если на Dataset
формат сигнала timetable
, затем выводится массив ячеек timetable
объекты. Для примера:
out = sim('ex_for_each_log_bus','DatasetSignalFormat','timetable'); out.logsout{2}.Values
ans = 3x1 cell array {11x1 timetable} {11x1 timetable} {11x1 timetable}