Регистрируйте сигналы в для каждого подсистемы

Подход, который вы используете для данных логов для сигнала в Для Каждой подсистемы, зависит от того, является ли сигнал a:

  • Сигнал нешины — Журнал непосредственно в Для Каждой подсистемы

  • Шина или массив сигнала шин — Использование один из этих подходов:

    • Используйте блок Селектора Шины, чтобы выбрать сигналы, вы хотите регистрировать и отметить те сигналы для журналирования сигнала. Этот подход работает хорошо на многие модели.

    • Присоедините сигнал к блоку Outport и регистрируйте сигнал за пределами Для Каждой подсистемы. Используйте этот подход когда это необходимо, чтобы регистрировать целый сигнал шины, и тот сигнал шины включает много сигналов элемента шины.

Примечание

Вы не можете регистрировать сигналы шины непосредственно в Для Каждой подсистемы.

Вы не можете регистрировать сигнал в модели, на которую ссылаются, которая является в Для Каждой подсистемы, если любое из этих условий существует:

  • Для Каждой подсистемы находится в моделировании модели в быстром режиме Accelerator.

  • Для Каждой подсистемы самой находится в модели, на которую ссылается Блок модели в режиме Accelerator.

Данные для каждого регистрируемого сигнала в Для Каждой подсистемы сохраняются в отдельном элементе Dataset как объект Simulink.SimulationData.Signal. Формат регистрируемых данных сигнала зависит от того, как вы устанавливаете параметр конфигурации формата сигнала Набора данных:

  • Если установкой является 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, имеет набор параметра типа Выходных данных к Bus: COUNTERBUS и Выводу как невиртуальный установленный флажок шины.

Моделируйте модель и исследуйте журналирование сигнала вывод. Фокусируйтесь на одном из сигналов элемента шины, регистрируемых в Для Каждой подсистемы и на сигнале шины, регистрируемом за пределами Для Каждой подсистемы.

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}
  

Смотрите также

Блоки

Функции

Похожие темы

Была ли эта тема полезной?