Проектируйте интерфейс данных путем настройки блоков Inport и Outport

Интерфейс данных модели является средством, с помощью которого модель обменивается данными (для примера, значений сигналов) с другими, внешними моделями или системами. Настройте интерфейс данных модели так:

  • Включите интегрирование сгенерированного кода с собственным кодом.

  • Улучшите трассируемость и читаемость кода.

На верхнем уровне модели блоки 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, затем выбрать блоки, которые должны использовать указанные по умолчанию.

  1. Откройте приложение Simulink Coder.

  2. На вкладке Кода С выберите Код Интерфейс > По умолчанию Код Отображений.

  3. В редакторе Отображения в разделе Inports и Outports установите класс памяти по умолчанию для Inports и Outports равным ExportedGlobal.

  4. Затем на вкладке Inports выберите элементы данных, которые должны использовать класс памяти по умолчанию. Нажмите Ctrl и щелкните по каждому входному порту.

  5. Для выбранных входных портов установите класс памяти равным Model default: ExportedGlobal.

  6. Точно так же на вкладке 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. Например, используйте этот метод, чтобы отправить данные сигнала в пользовательскую функцию (такую как драйвер устройства) и в глобальную переменную, которую может использовать ваш пользовательский алгоритмический код:

  1. Соедините целевую сигнальную линию с каждым блоком Outport.

  2. Для более эффективного кода оставьте класс памяти целевой сигнальной линии сконфигурированным так, чтобы Auto (значение по умолчанию). Оптимизация может затем исключить сигнальную линию из сгенерированного кода.

  3. В редакторе Отображения на вкладке Outports примените класс памяти GetSet к одному блоку Outport и ExportToFile к другому блоку Outport.

  4. В Property Inspector настройте свойства, сопоставленные с каждым примененным классом памяти.

open_system('ex_route_sig')

Ограничения

Вы не можете применить класс памяти к блоку Outport, если вход в блок имеет размер переменной. Вместо этого примените класс памяти к сигнальной линии.

Похожие темы

См. также

|