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

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

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

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

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

Когда вы применяете классы памяти к блокам Inport и Outport, каждый блок появляется в сгенерированном коде как поле глобальной структуры или как отдельная глобальная переменная что сгенерированные ссылки алгоритма непосредственно. Если у вас есть Embedded Coder, можно использовать управление прототипом функции вместо классов памяти, чтобы передать данные в и из модели step функционируйте как формальные параметры. Смотрите Настраивают Сгенерированные Интерфейсы Функции C.

Интерфейс данных проектирования

Откройте модель rtwdemo_basicsc в качестве примера.

open_system('rtwdemo_basicsc')

Сконфигурируйте модель, чтобы показать сгенерированные имена блоков.

set_param('rtwdemo_basicsc','HideAutomaticNames','off')

На вкладке Modeling нажмите 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: rtwdemo_basicsc
### Successful completion of build procedure for: 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)

Если у вас есть Embedded Coder, можно сконфигурировать класс памяти по умолчанию для блоков Inport и блоков Выходного порта. Когда вы добавляете такие блоки в модель, они получают класс памяти, который вы задаете.

В модели, Параметры конфигурации набора> Генерация кода> Системный конечный файл к ert.tlc.

В галерее Apps нажмите Embedded Coder.

Под блок-схемой при Отображениях Кода> Значения по умолчанию Данных, для Инпортов и строк Выходных портов, устанавливают Класс памяти на 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')

Направьте данные сигнала к нескольким Выходным параметрам

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

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

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

  3. Используйте Model Data Editor, чтобы применить класс памяти GetSet с одним блоком Outport и ExportToFile с другим блоком Outport. Примените имя сигнала к каждому блоку.

open_system('ex_route_sig')

Ограничения

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

Похожие темы