Интерфейсная спецификация Используя объекты шины

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

Откройте модель в качестве примера

Откройте и симулируйте модель sldemo_mdlref_bus в качестве примера.

Исследуйте модель

Модель содержит блок Model под названием CounterA, это ссылается на sldemo_mdlref_counter_bus, который является моделью простого счетчика.

Массив шин под названием COUNTERBUS питает данные и пределы насыщения счетчика в модель. Шины под названием COUNTERBUS каждый содержит два элемента: данные сигнализируют и вложенная шина под названием LIMITBUS. Данные используются в подсчете, и LIMITBUS содержит верхние значения и значения нижнего предела счетчика.

Блок Model имеет второй входной порт, который связывает с шиной под названием INCREMENTBUS. Эта шина содержит элементы, которые изменяют шаг и сбрасывают счетчик.

Модель использует файл с именем словаря данных sldemo_mdlref_bus.sldd это содержит Simulink.Bus объекты, которые задают элементы COUNTERBUS, LIMITBUS и INCREMENTBUS.

Просмотреть Bus объекты, откройте Редактор Шины. В Simulink® Toolstrip, на вкладке Modeling, в галерее Design, нажимают Bus Editor.

Модель использует Bus объекты задать выходные параметры следующих блоков Создателя Шины:

  • COUNTERBUSCreator1

  • COUNTERBUSCreator2

  • LIMITBUSCreator1

  • LIMITBUSCreator2

  • IncrementBusCreator

Блок Inport, названный counter_input в sldemo_mdlref_counter_bus задает Bus возразите названному COUNTERBUS. Дважды кликните блок. В диалоговом окне Block Parameters, на вкладке Signal Attributes, Тип данных установлен в Bus: COUNTERBUS.

Блок Inport, названный increment_input, так же сконфигурирован, чтобы использовать Bus возразите названному INCREMENTBUS.

Регистрируйте данные сигнала

Эти сигналы отмечены для логгирования сигнала:

  • ПРОТИВОШИНА

  • INCREMENTBUS

  • OUTERDATA

  • INNERDATA

После того, как вы симулируете модель, регистрируемые сигналы доступны в базовом рабочем пространстве в topOut переменная.

topOut = 

Simulink.SimulationData.Dataset 'topOut' with 4 elements

                         Name          BlockPath                                
                         ____________  ________________________________________ 
    1  [1x1 Signal]      COUNTERBUS    sldemo_mdlref_bus/Concatenate           
    2  [1x1 Signal]      OUTERDATA     sldemo_mdlref_bus/CounterA              
    3  [1x1 Signal]      INCREMENTBUS  sldemo_mdlref_bus/IncrementBusCreator   
    4  [1x1 Signal]      INNERDATA     ...erA|sldemo_mdlref_counter_bus/COUNTER

  - Use braces { } to access, modify, or add elements using index.

Модель использует Dataset формат для логгирования сигнала. Получить доступ к Dataset записанные данные формата для данного сигнала, используйте getElement метод:

topOut.getElement('COUNTERBUS')
ans = 

  Simulink.SimulationData.Signal
  Package: Simulink.SimulationData

  Properties:
              Name: 'COUNTERBUS'
    PropagatedName: ''
         BlockPath: [1x1 Simulink.SimulationData.BlockPath]
          PortType: 'outport'
         PortIndex: 1
            Values: [2x1 struct]

Данные о шине регистрируются как структура MATLAB® в Values поле :

topOut.getElement('COUNTERBUS').Values
ans = 

  2x1 struct array with fields:

    data
    limits

Эта структура содержит MATLAB timeseries объекты для каждой шины:

topOut.getElement('COUNTERBUS').Values(1).data
  timeseries

  Common Properties:
            Name: 'data'
            Time: [301x1 double]
        TimeInfo: tsdata.timemetadata
            Data: [301x1 int32]
        DataInfo: tsdata.datametadata

topOut.getElement('COUNTERBUS').Values(2).data
  timeseries

  Common Properties:
            Name: 'data'
            Time: [301x1 double]
        TimeInfo: tsdata.timemetadata
            Data: [301x1 int32]
        DataInfo: tsdata.datametadata

Можно также построить записанные данные с помощью plot функция:

topOut.getElement('OUTERDATA').Values.plot()

Регистрируйте сигналы модели, на которые ссылаются,

Чтобы регистрировать сигналы в модели, на которую ссылаются, выберите блок Model и нажмите Log Signals на вкладке блока Model.

Для этой модели, Регистрируя Режим установлен в Log all signals as specified in model. Все сигналы, которые регистрируются при симуляции sldemo_mdlref_counter_bus как топ-модель также регистрируются при симуляции его как модели, на которую ссылаются. Изменить логгирование для любого из этих сигналов или регистрировать подмножество сигналов:

  1. Установите режим логгирования на Override signals.

  2. В панели Иерархии модели очистите CounterA (sldemo_mdlref_counter_bus) флажок, чтобы указать, что эта модель не должна использовать Log all signals as specified in model установка.

  3. В таблице выберите сигналы регистрировать при симуляции топ-модели.

  4. Чтобы сохранить изменения, сохраните топ-модель.

Загрузка данных

Откройте модель sldemo_mdlref_counter_bus, на которую ссылаются, как топ-модель путем нажатия на Открытое Как на значок Топ-модели в левом нижнем углу блока Model.

Модель, на которую ссылаются, сконфигурирована, чтобы считать регистрируемые данные сигнала через корневые блоки Inport. Чтобы видеть эту настройку, откройте диалоговое окно Configuration Parameters. В Панели инструментов Simulink, на вкладке Modeling, нажимают Model Settings. На вкладке Data Import/Export Вход использует список, разделенный запятыми, чтобы задать записанные данные от topOut для этих двух входных портов. counter_input порт использует массив структуры timeseries, чтобы загрузить данные для COUNTERBUS, и increment_input порт использует структуру timeseries, чтобы загрузить данные для INCREMENTBUS.

  • topOut.getElement('COUNTERBUS')

  • topOut.getElement('INCREMENTBUS')

Можно сконфигурировать Поле ввода путем нажатия Входной Connect кнопки. Инструмент Root Inport Mapper открывается. В этом примере инструмент использует алгоритм отображения, чтобы настроить Поле ввода от записанных данных в базовом рабочем пространстве.

Выбрать данные, чтобы импортировать:

  1. В Корневом Картопостроителе Inport нажмите From Workspace.

  2. Выберите записанные данные topOut и нажмите ОК.

  3. В диалоговом окне, которое открывается, задайте имя файла и нажмите Save.

С данными, загруженными в инструмент Root Inport Mapper, можно определить корневой входной порт, для которого можно присвоить входные данные. Simulink совпадает с входными данными входным портам на основе одного из этих критериев: имя блока, блок path, сигнализирует об имени, порядке порта или пользовательском алгоритме. Поскольку topOut регистрируется с помощью имен сигнала из модели, лучшим выбором для критерия отображения является Имя Сигнала. Используя этот критерий, Simulink пытается совпадать с именами переменных входных данных к именам входных сигналов.

Выбирать эту опцию:

  1. В Корневой панели иерархии Картопостроителя Inport выберите набор данных topOut сценария.

  2. Кликните по переключателю Signal Name.

  3. Кликните по стреле кнопки Map to Model, затем нажмите Map All.

При отображении данных Simulink оценивает входные порты против входных данных, чтобы определить совместимость. Таблица Root Inport Mapper отражает состояние этой совместимости с зеленой галочкой, оранжевым треугольником предупреждения или красным ошибочным восклицательным знаком. В этом примере таблица показывает зеленое состояние, указывающее, что нет никакой проблемы совместимости. Можно симулировать модель с этим отображением входных данных к входным портам. Отображение также устанавливает Вход во вкладке Data Import/Export диалогового окна Параметров конфигурации к соответствующему списку, разделенному запятыми входных параметров. Чтобы применить изменения в модели, в диалоговом окне Параметров конфигурации, нажимают Apply.

Симулируйте модель с импортированными данными

Симулируйте sldemo_mdlref_counter_bus.

После симуляции, осциллографов от sldemo_mdlref_bus (OUTERDATA) и sldemo_mdlref_counter_bus (INNERDATA) покажите ту же трассировку.

Сигнал, питающий осциллограф в модели, на которую ссылаются, также регистрируется. Записанные данные доступны в рабочем пространстве MATLAB под переменной subOut. Можно проверить что данные в topOut.getElement('OUTERDATA') и subOut.getElement('INNERDATA') то же самое.

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

Похожие темы