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

Подход, который вы используете для регистрации данных для сигнала в подсистеме 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}
  

См. также

Блоки

Функции

Похожие темы