Подход, который вы используете для данных логов для сигнала в Для Каждой подсистемы, зависит от того, является ли сигнал a:
Сигнал нешины — Журнал непосредственно в Для Каждой подсистемы
Шина или массив сигнала шин — Использование один из этих подходов:
Используйте блок Селектора Шины, чтобы выбрать сигналы, вы хотите регистрировать и отметить те сигналы для журналирования сигнала. Этот подход работает хорошо на многие модели.
Присоедините сигнал к блоку Outport и регистрируйте сигнал за пределами Для Каждой подсистемы. Используйте этот подход когда это необходимо, чтобы регистрировать целый сигнал шины, и тот сигнал шины включает много сигналов элемента шины.
Вы не можете регистрировать сигналы шины непосредственно в Для Каждой подсистемы.
Вы не можете регистрировать сигнал в модели, на которую ссылаются, которая является в Для Каждой подсистемы, если любое из этих условий существует:
Для Каждой подсистемы находится в симуляции модели в быстром режиме Accelerator.
Для Каждой подсистемы самой находится в модели, на которую ссылается блок Model в режиме Accelerator.
Данные для каждого регистрируемого сигнала в Для Каждой подсистемы сохранены в отдельном элементе Dataset
как объект Simulink.SimulationData.Signal
. Формат регистрируемых данных сигнала зависит от того, как вы устанавливаете параметр конфигурации Dataset signal format:
Если установкой является timeseries
, то каждый объект сигнала содержит массив
объектов MATLAB® timeseries
. Массив сохраняет данные из различного Для Каждой итерации отдельными.
Если установкой является timetable
, то каждый объект сигнала содержит массив ячеек MATLAB объекты timetable
. Размерности этого массива совпадают с количеством Для Каждого итерации. Например, если Для Каждой подсистемы имеет три итерации, то записанные данные имеют массив 3x1
объектов timetable
или timeseries
. Для вложенного Для Каждого подсистемы каждый слой вложения добавляет другую размерность в записанные данные.
Этот пример регистрирует сигнал во вложенном Для Каждой подсистемы.
Откройте модель ex_loginsideforeach_nested
.
open_system(docpath(fullfile(docroot,'toolbox','simulink',... 'examples','ex_loginsideforeach_nested.slx')))
В Редакторе Simulink® откройте блок For Each Subsystem1
, и в той подсистеме, откройте блок For Each Subsystem2
.
Моделируйте модель и исследуйте данные о регистрации сигнала на первую итерацию главной подсистемы и третью итерацию нижней подсистемы.
timeseries
2x3
следует из двух итераций в первом Для Каждого уровня и трех итераций на втором (вложенном) уровне
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]
Этот пример регистрирует два сигнала шины в Для Каждой подсистемы. Для одного сигнала шины вы используете блок Селектора Шины и затем регистрируете каждый выбранный сигнал. Для другого сигнала шины вы используете блоки Выходного порта и журнал за пределами Для Каждой подсистемы.
Откройте модель 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
, сигнал шины соединяется с блоком Outport. Выходной сигнал Для Каждой подсистемы отмечен для журналирования сигнала. Чтобы иметь сигнал шины пересекают контур подсистемы, блоку Bus Creator, который создает сигнал COUNTERBUS
, установили параметр Output data type на установленный флажок Bus: COUNTERBUS
и Output as nonvirtual bus.
Моделируйте модель и исследуйте журналирование сигнала вывод. Фокусируйтесь на одном из сигналов элемента шины, регистрируемых в Для Каждой подсистемы и на сигнале шины, регистрируемом за пределами Для Каждой подсистемы.
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}