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

Этот пример показывает, как распространить сигналы шины в модели, на которые ссылаются. Это также показывает, как можно моделировать модели, на которые ссылаются, независимо с помощью регистрируемых данных сигнала от родительской модели. (Для краткого введения в Модель - ссылку смотрите Компонентно-ориентированное Моделирование с Моделью - ссылкой. См. документацию Simulink® для получения дополнительной информации о конфигурировании сигналов для регистрации данных.)

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

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

Требования в качестве примера

Во время этого примера Simulink и Simulink® Coder™ могут сгенерировать код в папке генерации кода, созданной в текущей рабочей директории. Если вы не хотите к (или не может) генерировать файлы в этой директории, необходимо изменить рабочую директорию на подходящую директорию. Simulink Coder требуется, чтобы генерировать код, который будет развернут в автономных приложениях.

Описание Setup сигнала шины для примера

Эта модель, sldemo_mdlref_bus содержит Блок модели, CounterA, что ссылки sldemo_mdlref_counter_bus, модель простого счетчика. Сигнал шины под названием COUNTERBUS подает данные и пределы насыщенности счетчика в модель. COUNTERBUS содержит два сигнала: данные и LIMITBUS. Сигнал данных используется в подсчете, и LIMITBUS содержит верхние значения и значения нижнего предела счетчика. Следующее показывает структуру COUNTERBUS:

  * COUNTERBUS (bus signal)
             * data
             * LIMITBUS (bus signal)
                      * upper_saturation_limit
                      * lower_saturation_limit

CounterA Блока модели содержит второй входной порт, который подает сигнал шины типа INCREMENTBUS. Этот сигнал используется, чтобы изменить инкремент и сбросить счетчик. Следующее показывает структуру INCREMENTBUS:

  * INCREMENTBUS (bus signal)
               * increment
               * reset

Пример также включает MAT-файл под названием sldemo_mdlref_counter_bus.mat, который создает объекты шины, которые задают элементы COUNTERBUS, LIMITBUS и INCREMENTBUS. Функция предварительной нагрузки sldemo_mdlref_bus загружает этот MAT-файл, когда модель загружается, заставляя объекты шины быть созданной в рабочей области MATLAB®.

Примечание: Можно просмотреть эти объекты путем выбора Base Workspace в Образцовом Проводнике. Можно также просмотреть структуры шины в Редакторе Шины, который можно открыть путем ввода buseditor в подсказке команды MATLAB. Модель использует эти, шина возражает, чтобы задать выходные параметры следующих блоков Создателя Шины:

  • COUNTERBUSCreator1

  • COUNTERBUSCreator2

  • LIMITBUSCreator1

  • LIMITBUSCreator2

  • IncrementBusCreator

counter_input Inport образцового sldemo_mdlref_counter_bus, на который ссылаются, задает объект шины COUNTERBUS в своем поле Типа данных на вкладке Signal Attributes. increment_input Inport так же сконфигурирован, чтобы использовать объект INCREMENTBUS шины.

Журналирование данных сигнала

Теперь можно моделировать sldemo_mdlref_bus, чтобы видеть вывод в окне scope.

Обратите внимание на то, что следующие сигналы были отмечены для журналирования сигнала:

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

  • 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 для журналирования сигнала. К записанным данным формата Набора данных доступа для данного сигнала используйте getElement метод:

   >> topOut.getElement('COUNTERBUS')
  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
  2x1 struct array with fields:

    data
    limits

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

   >> topOut.getElement('COUNTERBUS').Values(1).data
and
   >> topOut.getElement('COUNTERBUS').Values(2).data
  timeseries

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

  timeseries

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

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

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

Журналирование сигналов модели - ссылки

При моделировании топ-модели sldemo_mdlref_bus можно выбрать сигналы в эталонной модели sldemo_mdlref_counter_bus, чтобы регистрировать использование Селектора Журналирования Сигнала. Щелкните правой кнопкой по Блоку модели CounterA по топ-модели и выберите Signals & Ports> Log Model Reference Signals..., чтобы выбрать который сигналы из модели, на которую ссылаются, регистрировать.

Обратите внимание на то, что для этой модели, режим Log журналирования все сигналы, как задано в модели выбран. Это означает, что все сигналы, которые регистрируются при моделировании автономного sldemo_mdlref_counter_bus, регистрируются при моделировании топ-модели. Изменить журналирование для любого из этих сигналов или регистрировать подмножество сигналов:

  • Установите режим журналирования "Заменять сигналы".

  • Снимите флажок с блоком модели верхнего уровня на левом представлении иерархии, чтобы указать, что эта модель не должна использовать "журнал, как задано в модели".

  • Используйте список на правой стороне, чтобы задать который сигналы регистрировать при моделировании топ-модели.

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

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

Откройте модель, на которую ссылаются, sldemo_mdlref_counter_bus.

Образцовый sldemo_mdlref_counter_bus, на который ссылаются, был сконфигурирован, чтобы считать регистрируемые данные сигнала через корневые блоки Inport. Вы видите, как это сделано путем открытия диалогового окна Параметров конфигурации модели, на которую ссылаются, и выбора вкладки Data Import/Export. Поле ввода сконфигурировано, чтобы считать записанные данные из topOut для обоих входных портов. Список, разделенный запятыми задает значения для этих 2 входных портов. Порт increment_input использует структуру timeseries, чтобы загрузить данные для INCREMENTBUS, и порт counter_input использует массив структуры timeseries, чтобы загрузить данные для COUNTERBUS.

  • topOut.getElement('COUNTERBUS')

  • topOut.getElement('INCREMENTBUS')

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

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

  1. Нажмите From Workspace button в Корневой панели инструментов Картопостроителя Inport.

  2. Выберите записанные данные topOut и кликните по кнопке OK.

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

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

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

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

  3. От выпадающей кнопки Map to Model нажмите Map All.

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

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

Генерация кода для автономных приложений (требует Simulink Coder),

Создайте исполняемый файл и осмотрите код для sldemo_mdlref_bus.

Выход

Закройте sldemo_mdlref_counter_bus и sldemo_mdlref_bus.

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