Интерфейс данных модели является средними значениями, которыми модель обменивается данными (например, значения сигналов) с другим, внешними моделями или системами. Настройте интерфейс данных модели к:
Включите интегрирование сгенерированного кода с вашим собственным кодом.
Улучшите трассируемость и удобочитаемость кода.
В верхнем уровне модели Inport и блоки Outport представляют сигналы ввода и вывода модели. Чтобы настроить интерфейс данных в сгенерированном коде, сконфигурируйте эти блоки. Рано в процессе проектирования, когда модель может содержать несвязанные блоки Inport и Outport, используют этот метод, чтобы задать интерфейс прежде, чем разработать внутренний алгоритм.
Когда вы применяете классы памяти к блокам Inport и Outport, каждый блок появляется в сгенерированном коде как поле глобальной структуры или как отдельная глобальная переменная что сгенерированные ссылки алгоритма непосредственно. Если у вас есть Embedded Coder, можно использовать управление прототипом функции вместо классов памяти, чтобы передать данные в и из функции модели step
как формальные параметры. Смотрите Настраивают Сгенерированные Интерфейсы Функции C.
Откройте модель rtwdemo_basicsc
в качестве примера.
open_system('rtwdemo_basicsc')
Сконфигурируйте модель, чтобы показать сгенерированные имена блоков.
set_param('rtwdemo_basicsc','HideAutomaticNames','off')
В модели выберите View> Model Data Editor.
В Model Data Editor выберите вкладку Inports/Outports. Каждая строка в таблице представляет блок Outport или сигнал, который выходит из блока Inport.
Назовите данные сигнала, которые представляет блок Outport Out1
. Определите Имя Сигнала к output_sig
.
Для каждого из сигналов, которые выходят из блоков Inport, установите Тип данных на single
или на различный тип данных. Из-за настроек наследования типа данных, что другие блоки в образцовом использовании по умолчанию, нисходящие сигналы в остальной части модели используют то же самое или подобный тип данных.
Опционально, сконфигурируйте другие атрибуты проекта, такие как Min и Max (минимальные и максимальные значения).
Установите Представление Изменения выпадающий список на Code
.
Для блока Outport и блоков Inport, Класса памяти набора к ExportedGlobal
. Чтобы сконфигурировать блоки за один шаг, выберите строки в таблице.
Чтобы сконфигурировать блоки и сигналы, можно использовать эти команды в командной строке.
portHandles = get_param('rtwdemo_basicsc/In1','portHandles'); outPortHandle = portHandles.Outport; set_param(outPortHandle,'StorageClass','ExportedGlobal'); portHandles = get_param('rtwdemo_basicsc/In2','portHandles'); outPortHandle = portHandles.Outport; set_param(outPortHandle,'StorageClass','ExportedGlobal'); portHandles = get_param('rtwdemo_basicsc/In3','portHandles'); outPortHandle = portHandles.Outport; set_param(outPortHandle,'StorageClass','ExportedGlobal'); portHandles = get_param('rtwdemo_basicsc/In4','portHandles'); outPortHandle = portHandles.Outport; set_param(outPortHandle,'StorageClass','ExportedGlobal'); set_param('rtwdemo_basicsc/Out1','SignalName','output_sig',... 'StorageClass','ExportedGlobal')
Сгенерируйте код из модели.
rtwbuild('rtwdemo_basicsc');
### Starting build procedure for model: rtwdemo_basicsc ### Successful completion of build procedure for model: rtwdemo_basicsc
Просмотрите сгенерированный файл rtwdemo_basicsc.c
. Поскольку вы применили класс памяти ExportedGlobal
к блокам Inport и Outport, код создает отдельные глобальные переменные, которые представляют входные параметры и вывод.
file = fullfile('rtwdemo_basicsc_grt_rtw','rtwdemo_basicsc.c'); rtwdemodbtype(file,'/* Exported block signals */','real32_T output_sig;',1,1)
/* Exported block signals */ real32_T input1; /* '<Root>/In1' */ real32_T input2; /* '<Root>/In2' */ real32_T input3; /* '<Root>/In3' */ real32_T input4; /* '<Root>/In4' */ real32_T output_sig; /* '<Root>/Out1' */
Сгенерированный алгоритм в функции модели step
непосредственно ссылается на эти глобальные переменные, чтобы вычислить и сохранить значение выходного сигнала, output_sig
.
В то время как вы используете Model Data Editor, чтобы сконфигурировать интерфейс системы, рассмотрите использование интерфейсного отображения, чтобы просмотреть системные вводы и выводы (Inport и блоки Outport) на высоком уровне. Смотрите Конфигурируют Интерфейс Данных для Компонента (Simulink).
Если у вас есть Embedded Coder, можно сконфигурировать класс памяти по умолчанию для блоков Inport и блоков Выходного порта. Когда вы добавляете такие блоки в модель, они получают класс памяти, который вы задаете.
В модели, Параметры конфигурации набора> Генерация кода> Системный конечный файл к ert.tlc
.
В модели выберите Code> C/C ++ Code> Configure Model in Code Perspective.
Под блок-схемой при Отображениях Кода> Значения по умолчанию Данных, для Инпортов и строк Выходных портов, устанавливают Класс памяти на ExportedGlobal
.
Под блок-схемой откройте Model Data Editor путем нажатия на вкладку Model Data Editor.
Используйте Model Data Editor, чтобы установить класс памяти блоков Inport и Outport к Auto
. С этой установкой блоки получают классы памяти по умолчанию, которые вы задали в Отображениях Кода> Значения по умолчанию Данных.
С Auto
глобальные переменные, которые соответствуют блокам Inport и Outport, подчиняются правилу именования, которое вы задаете в образцовых параметрах конфигурации. По умолчанию правило именования добавляет имя модели к имени каждой переменной. Чтобы удалить имя модели, измените значение Параметров конфигурации> Генерация кода> Символы> Глобальные переменные от $R$N$M
до $N$M
. Маркерный $R
представляет имя модели.
Также, чтобы сконфигурировать значения по умолчанию данных и параметр конфигурации, в командной строке, используют эти команды:
set_param('rtwdemo_basicsc','SystemTargetFile','ert.tlc') coder.mapping.create('rtwdemo_basicsc') coder.mapping.defaults.set('rtwdemo_basicsc','Inports',... 'StorageClass','ExportedGlobal') coder.mapping.defaults.set('rtwdemo_basicsc','Outports',... 'StorageClass','ExportedGlobal') portHandles = get_param('rtwdemo_basicsc/In1','portHandles'); outPortHandle = portHandles.Outport; set_param(outPortHandle,'StorageClass','Auto'); portHandles = get_param('rtwdemo_basicsc/In2','portHandles'); outPortHandle = portHandles.Outport; set_param(outPortHandle,'StorageClass','Auto'); portHandles = get_param('rtwdemo_basicsc/In3','portHandles'); outPortHandle = portHandles.Outport; set_param(outPortHandle,'StorageClass','Auto'); portHandles = get_param('rtwdemo_basicsc/In4','portHandles'); outPortHandle = portHandles.Outport; set_param(outPortHandle,'StorageClass','Auto'); set_param('rtwdemo_basicsc/Out1','SignalName','output_sig',... 'StorageClass','Auto') set_param('rtwdemo_basicsc','CustomSymbolStrGlobalVar','$N$M')
Можно направить один сигнал к нескольким блокам Выходного порта и применить различный класс памяти к каждому Выходному порту. Например, используйте этот метод, чтобы отправить данные сигнала в пользовательскую функцию (такие как драйвер устройства) и к глобальной переменной, которую может использовать ваш пользовательский алгоритмический код:
Ответвление целевая сигнальная линия к каждому блоку Outport.
Для более эффективного кода, набор класс памяти целевой сигнальной линии к Auto
(значение по умолчанию). Оптимизация может затем устранить сигнальную линию из сгенерированного кода.
Используйте Model Data Editor, чтобы применить пользовательский класс памяти GetSet
к одному блоку Outport и ExportToFile
к другому блоку Outport. Примените имя сигнала к каждому блоку.
open_system('ex_route_sig')
Вы не можете применить класс памяти к блоку Outport, если вход к блоку имеет переменный размер. Вместо этого примените класс памяти к сигнальной линии.