Интерфейс данных модели является средними значениями, которыми модель обменивается данными (например, значения сигналов) с другим, внешними моделями или системами. Настройте интерфейс данных модели к:
Включите интегрирование сгенерированного кода с вашим собственным кодом.
Улучшите трассируемость и удобочитаемость кода.
В верхнем уровне модели Inport и блоки Outport представляют сигналы ввода и вывода модели. Чтобы настроить интерфейс данных в сгенерированном коде, сконфигурируйте эти блоки. Рано в процессе проектирования, когда модель может содержать несвязанные блоки Inport и Outport, используют этот метод, чтобы задать интерфейс прежде, чем разработать внутренний алгоритм.
Когда вы применяете классы памяти к блокам Inport и Outport, каждый блок появляется в сгенерированном коде как поле глобальной структуры или как отдельная глобальная переменная что сгенерированные ссылки алгоритма непосредственно. Если у вас есть Embedded Coder, можно использовать управление прототипом функции вместо классов памяти, чтобы передать данные в и из модели step
функционируйте как формальные параметры. Для получения дополнительной информации смотрите, Конфигурируют генерацию кода C для Функций Точки входа Модели.
Откройте модель 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 блоков, и блоки Выходного порта затем выбирают блоки, которые должны использовать заданное значение по умолчанию.
Откройте приложение Simulink Coder.
Во вкладке C Code выберите Code Interface> Default Code Mappings.
В редакторе Отображений Кода, под Inports и Outports, устанавливает класс памяти по умолчанию и для Inports и для Outports к ExportedGlobal
.
Затем на вкладке Inports, выберите элементы данных, которые должны использовать класс памяти по умолчанию. Нажмите Ctrl и кликните по каждому импорту.
Для выбранного импорта, набор класс памяти к Model default: ExportedGlobal
.
Точно так же на вкладке Outports, набор класс памяти для выходного порта к 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 8.7568s
Просмотрите сгенерированный файл 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.
Для более эффективного кода оставьте класс памяти целевой сигнальной линии сконфигурированным к Auto
(значение по умолчанию). Оптимизация может затем устранить сигнальную линию из сгенерированного кода.
В редакторе Отображений Кода, на вкладке Outports, применяют класс памяти GetSet
с одним блоком Outport и ExportToFile
с другим блоком Outport.
В Property Inspector сконфигурируйте свойства, сопоставленные с каждым прикладным классом памяти.
open_system('ex_route_sig')
Вы не можете применить класс памяти к блоку Outport, если вход с блоком имеет переменный размер. Вместо этого примените класс памяти к сигнальной линии.