В этом примере показано, как распространить сигналы шины в модели, на которые ссылаются. Это также показывает, как можно симулировать модели, на которые ссылаются, независимо с помощью регистрируемых данных сигнала от родительской модели. (Для краткого введения в Модель - ссылку смотрите Компонентно-ориентированное Моделирование с Моделью - ссылкой. См. документацию Simulink® для получения дополнительной информации о конфигурировании сигналов для регистрации данных.)
Откройте модель в качестве примера
Во время этого примера Simulink и Simulink® Coder™ могут сгенерировать код в папке генерации кода, созданной в текущей рабочей директории. Если вы не хотите к (или не может) генерировать файлы в этой директории, необходимо изменить рабочую директорию в подходящую директорию. Simulink Coder требуется, чтобы генерировать код, который будет развернут в автономных приложениях.
Эта модель, sldemo_mdlref_bus
содержит блок Model, CounterA, это ссылается на sldemo_mdlref_counter_bus
, модель простого счетчика. Сигнал шины под названием COUNTERBUS питает данные и пределы насыщения счетчика в модель. COUNTERBUS содержит два сигнала: данные и LIMITBUS. Сигнал данных используется в подсчете, и LIMITBUS содержит верхние значения и значения нижнего предела счетчика. Следующее показывает структуру COUNTERBUS:
* COUNTERBUS (bus signal) * data * LIMITBUS (bus signal) * upper_saturation_limit * lower_saturation_limit
CounterA блока Model содержит второй входной порт, который питает сигнал шины типа INCREMENTBUS. Этот сигнал используется, чтобы изменить шаг и сбросить счетчик. Следующее показывает структуру INCREMENTBUS:
* INCREMENTBUS (bus signal) * increment * reset
Пример также включает файл с именем словаря данных sldemo_mdlref_bus.sldd
это содержит объекты шины, которые задают элементы COUNTERBUS, LIMITBUS и INCREMENTBUS.
Примечание: можно просмотреть эти объекты шины в Model Explorer путем открытия словаря данных от вкладки Data в диалоговой панели и выбора ее Данных проектирования в панели Иерархии модели. Чтобы просмотреть эти объекты шины в Редакторе Шины, выберите одного из них в Model Explorer и нажмите Launch Bus Editor в диалоговой панели. Модель использует эти, шина возражает, чтобы задать выходные параметры следующих блоков Создателя Шины:
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()
Чтобы регистрировать сигналы в модели, на которую ссылаются, выберите блок Model и нажмите Log Signals на вкладке блока Model.
Обратите внимание на то, что для этой модели, режим Log логгирования все сигналы, как задано в модели выбран. Это означает, что все сигналы, которые регистрируются при симуляции sldemo_mdlref_counter_bus
автономный регистрируются при симуляции топ-модели. Изменить логгирование для любого из этих сигналов или регистрировать подмножество сигналов:
Установите режим логгирования "Заменять сигналы".
Снимите флажок с блоком Model верхнего уровня на левом представлении иерархии, чтобы указать, что эта модель не должна использовать "Журнал все сигналы, как задано в модели".
Используйте список на правой стороне, чтобы задать который сигналы регистрировать при симуляции топ-модели.
Чтобы сохранить эти изменения, сохраните топ-модель.
Откройте модель, на которую ссылаются, 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 кнопки. Это действие открывает инструмент Root Inport Mapper. В этом примере этот инструмент использует алгоритм отображения, чтобы настроить Поле ввода от записанных данных в базовом рабочем пространстве.
Выбрать данные, чтобы импортировать:
Нажмите From Workspace button в Корневой панели инструментов Картопостроителя Inport.
Выберите записанные данные topOut
и кликните по кнопке OK.
Теперь, когда данные загружаются в инструмент Root Inport Mapper, можно определить корневой входной порт, для которого можно присвоить входные данные. Simulink совпадает с входными данными входным портам на основе одного из пяти критериев (имя блока, блок path, имя сигнала или пользовательский алгоритм). Начиная с topOut
регистрировался с помощью имен сигнала из модели, лучшего выбора для отображения, критерии являются Именем Сигнала. Используя это критерии, Simulink пытается совпадать с именами переменных входных данных к именам входных сигналов.
Выбирать эту опцию:
В Корневой панели иерархии Картопостроителя Inport выберите набор данных topOut
сценария.
Кликните по переключателю Signal Name.
От выпадающего списка кнопки 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 под переменной subOut
. Можно проверить что данные в topOut.getElement('OUTERDATA')
и subOut.getElement('INNERDATA')
то же самое.
Создайте исполняемый файл и смотрите код для sldemo_mdlref_bus
.