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