Интерфейс данных модели является средством, с помощью которого модель обменивается данными (для примера, значений сигналов) с другими, внешними моделями или системами. Настройте интерфейс данных модели так:
Включите интегрирование сгенерированного кода с собственным кодом.
Улучшите трассируемость и читаемость кода.
На верхнем уровне модели блоки Inport и Outport представляют входные и выходные сигналы модели. Чтобы настроить интерфейс данных в сгенерированном коде, сконфигурируйте эти блоки. В начале процесса проекта, когда модель может содержать несвязанные блоки Inport и Outport, используйте этот метод, чтобы задать интерфейс перед разработкой внутреннего алгоритма.
Когда вы применяете классы памяти к блокам Inport и Outport, каждый блок появляется в сгенерированном коде как поле глобальной структуры или как отдельная глобальная переменная, на которую непосредственно ссылается сгенерированный алгоритм. Если у вас есть Embedded Coder, можно использовать управление прототипом функции вместо классов памяти для передачи данных в модель и из нее step
функционирует как формальные параметры. Для получения дополнительной информации смотрите Configure C Code Generation for Model Entry-Point Functions (Embedded Coder).
Откройте пример модели rtwdemo_configrpinterface
.
open_system('rtwdemo_configrpinterface')
Сконфигурируйте модель, чтобы показать сгенерированные имена блоков.
set_param('rtwdemo_configrpinterface','HideAutomaticNames','off')
На вкладке Моделирование (Modeling) щелкните Редактор данных модели (Model Data Editor).
В Model Data Editor выберите вкладку Inports/Outports. Каждая строка в таблице представляет блок Outport или сигнал, который выходит из блока Inport.
Для каждого из сигналов, которые выходят из блоков Inport, установите Тип данных single
или к различным типам данных. Из-за настроек наследования типа данных, которые по умолчанию используют другие блоки в модели, нисходящие сигналы в остальной части модели используют тот же или аналогичный тип данных.
Опционально настройте другие атрибуты проекта, такие как Min и Max (минимальное и максимальное значения).
Можно настроить класс памяти по умолчанию для блоков Inport и блоков Outport, затем выбрать блоки, которые должны использовать указанные по умолчанию.
Откройте приложение Simulink Coder.
На вкладке Кода С выберите Код Интерфейс > По умолчанию Код Отображений.
В редакторе Отображения в разделе Inports и Outports установите класс памяти по умолчанию для Inports и Outports равным ExportedGlobal
.
Затем на вкладке Inports выберите элементы данных, которые должны использовать класс памяти по умолчанию. Нажмите Ctrl и щелкните по каждому входному порту.
Для выбранных входных портов установите класс памяти равным Model default: ExportedGlobal
.
Точно так же на вкладке Outports установите класс памяти для outport равным Model default: ExportedGlobal
.
Кроме того, чтобы сконфигурировать значения по умолчанию данных в командной строке, используйте следующие команды:
cm = coder.mapping.api.get('rtwdemo_configrpinterface'); setDataDefault(cm,'Inports','StorageClass','ExportedGlobal'); setDataDefault(cm,'Outports','StorageClass','ExportedGlobal'); setInport(cm,'In1','StorageClass','Model default'); setInport(cm,'In2','StorageClass','Model default'); setInport(cm,'In3','StorageClass','Model default'); setInport(cm,'In4','StorageClass','Model default'); setOutport(cm,'Out1','StorageClass','Model default','Identifier','output_sig');
Сгенерируйте код из модели.
slbuild('rtwdemo_configrpinterface');
### Starting build procedure for: rtwdemo_configrpinterface ### Successful completion of code generation for: rtwdemo_configrpinterface Build Summary Top model targets built: Model Action Rebuild Reason ============================================================================================= rtwdemo_configrpinterface Code generated Code generation information file does not exist. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 6.6796s
Просмотрите сгенерированный файл rtwdemo_configrpinterface.c
. Поскольку вы применили класс памяти ExportedGlobal
в блоки Inport и Outport код создает отдельные глобальные переменные, которые представляют входы и выход.
file = fullfile('rtwdemo_configrpinterface_grt_rtw','rtwdemo_configrpinterface.c'); rtwdemodbtype(file,'/* Data with Exported storage */','real_T output_sig;',1,1)
/* Data with Exported storage */ real_T input1; /* '<Root>/In1' */ real_T input2; /* '<Root>/In2' */ real_T input3; /* '<Root>/In3' */ real_T input4; /* '<Root>/In4' */ real_T output_sig; /* '<Root>/Out1' */
Сгенерированный алгоритм в модели step
функция непосредственно ссылается на эти глобальные переменные, чтобы вычислить и сохранить выход значения сигналов, output_sig
.
После настройки классов памяти по умолчанию для Inports и Outports можно переопределить это значение по умолчанию и задать класс памяти для некоторых элементов данных по отдельности. Для примера можно маршрутизировать один сигнал к нескольким блокам Outport и применить другой класс памяти к каждому Outport. Например, используйте этот метод, чтобы отправить данные сигнала в пользовательскую функцию (такую как драйвер устройства) и в глобальную переменную, которую может использовать ваш пользовательский алгоритмический код:
Соедините целевую сигнальную линию с каждым блоком Outport.
Для более эффективного кода оставьте класс памяти целевой сигнальной линии сконфигурированным так, чтобы Auto
(значение по умолчанию). Оптимизация может затем исключить сигнальную линию из сгенерированного кода.
В редакторе Отображения на вкладке Outports примените класс памяти GetSet
к одному блоку Outport и ExportToFile
к другому блоку Outport.
В Property Inspector настройте свойства, сопоставленные с каждым примененным классом памяти.
open_system('ex_route_sig')
Вы не можете применить класс памяти к блоку Outport, если вход в блок имеет размер переменной. Вместо этого примените класс памяти к сигнальной линии.