Подход, используемый для регистрации данных для сигнала в подсистеме For Each, зависит от того, является ли сигнал:
Сигнал без шины - регистрация непосредственно в подсистеме для каждой
Сигнал шины или матрицы шин - используйте один из следующих подходов:
Используйте блок выбора шины для выбора сигналов, которые требуется записать в журнал, и отметьте эти сигналы для регистрации в журнале. Этот подход хорошо работает для многих моделей.
Подключите сигнал к блоку Outport и запишите сигнал вне подсистемы For Each. Этот подход используется при необходимости регистрации всего сигнала шины, и этот сигнал шины включает в себя множество сигналов элементов шины.
Примечание
Регистрация сигналов шины непосредственно в подсистеме For Each невозможна.
Невозможно зарегистрировать сигнал в ссылочной модели, которая находится в подсистеме Для каждого (For Each), если существует одно из следующих условий:
Подсистема For Each находится в модели, моделируемой в режиме быстрого ускорения.
Сама подсистема Для каждого находится в модели, на которую ссылается блок модели в режиме ускорения.
Данные для каждого зарегистрированного сигнала в подсистеме For Each сохраняются в отдельной Dataset элемент как Simulink.SimulationData.Signal объект. Формат регистрируемых данных сигнала зависит от способа установки параметра конфигурации формата сигнала набора данных:
Если параметр имеет значение timeseries, то каждый сигнальный объект содержит массив MATLAB
®timeseries объекты. Массив отделяет данные от различных итераций Для каждой итерации (For Each Iteration).
Если параметр имеет значение timetable, то каждый сигнальный объект содержит массив ячеек MATLAB timetable объекты. Размеры этого массива соответствуют числу итераций Для каждой (For Each iterations). Например, если подсистема Для каждого имеет три итерации, то записанные данные имеют 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 блок.

Моделирование модели и анализ данных регистрации сигналов для первой итерации верхней подсистемы и третьей итерации нижней подсистемы. 2x3
timeseries результаты двух итераций на первом уровне Для каждого (For Each level) и трех итераций на втором (вложенном) уровне
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. Для одного сигнала шины используется блок выбора шины, а затем регистрируется каждый выбранный сигнал. Для другого сигнала шины используются блоки 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 сигнал шины, сигнал разветвляется на блок выбора шины, и каждый из сигналов элемента шины помечается для регистрации сигнала.
Регистрация всего COUNTERBUS сигнал, сигнал шины подключается к выходному блоку. Выходной сигнал из подсистемы For Each помечается для регистрации сигнала. Чтобы сигнал шины пересекал границу подсистемы, блок Bus Creator создает COUNTERBUS параметр Output data type имеет значение Bus: COUNTERBUS и флажок Вывести как невиртуальную шину (Output as nonvirtual bus).
Смоделировать модель и проверить выходной сигнал регистрации сигнала. Сосредоточьтесь на одном из сигналов элементов шины, зарегистрированных в подсистеме For Each, и на сигнале шины, зарегистрированном вне подсистемы For Each.
sim('ex_for_each_log_bus');
logsoutSimulink.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}.Values3×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}