Сконфигурируйте интерфейс данных

Embedded Coder® уменьшает усилие для конфигурирования данных и функциональных интерфейсов путем обеспечения способа задать настройки по умолчанию для категорий элементов данных и функций через модель. Применение настроек по умолчанию может сэкономить время и снизить риск представления ошибок в коде, специально для больших моделей и моделей, из которых вы генерируете код мультиэкземпляра. После применения настроек по умолчанию можно выборочно заменить настройки по умолчанию для отдельных элементов данных и функций.

Настройте интерфейс данных модели rtwdemo_roll путем конфигурирования функционального roll_control_step к:

  • Считайте входные данные из глобальных переменных, которые объявлены и заданы во внешних файлах roll_input_data.h и roll_input_data.c.

  • Запишите выходные данные в глобальные переменные, которые генератор кода объявляет в output_data.h и задает в output_data.c.

Чтобы внести эти изменения, в Командном окне MATLAB®, копируют эти внешние файлы кода в ваш текущий MATLAB рабочая папка.

copyfile(fullfile(matlabroot,'toolbox','rtw','rtwdemos','roll_input_data.c'));
copyfile(fullfile(matlabroot,'toolbox','rtw','rtwdemos','roll_input_data.h'));
copyfile(fullfile(matlabroot,'toolbox','rtw','rtwdemos','roll_heading_mode.c'));
copyfile(fullfile(matlabroot,'toolbox','rtw','rtwdemos','roll_heading_mode.h'));

Изменения конфигурации интерфейса данных, которые вы делаете, зависят от этих файлов, являющихся доступным для генерации кода и процесса сборки. Процесс сборки компилирует сгенерированный код с кодом, который находится в этих файлах.

Сконфигурируйте генерацию кода по умолчанию для данных

Сконфигурируйте настройки генерации кода по умолчанию для импорта модели и выходных портов.

  1. Во вкладке C Code выберите Code Interface> Default Code Mappings.

  2. Сконфигурируйте блоки Inport на корневом уровне модели, чтобы появиться в сгенерированном коде как отдельные глобальные переменные, заданные внешним кодом. В редакторе Отображений Кода, под Inports and Outports, избранная категория Inports. Установите класс памяти по умолчанию на ImportFromFile.

    С этой установкой сгенерированный код не задает глобальные переменные, которые представляют данные об импорте. Вместо этого #include оператор включает заголовочный файл, который объявляет входные переменные. Вы задаете имя заголовочного файла с Property Inspector.

  3. В Property Inspector, свойстве HeaderFile набора к roll_input_data.h.

  4. Чтобы видеть, как extern объявления во внешнем заголовочном файле roll_input_data.h назовите входные переменные, в командном окне MATLAB, откройте roll_input_data.h расположенный в вашей текущей рабочей папке.

    extern boolean_T AP_Eng;
    extern real32_T HDG_Ref;
    extern real32_T Rate_FB;
    extern real32_T Phi;
    extern real32_T Psi;
    extern real32_T TAS;
    extern real32_T Turn_Knob;
    
  5. Сконфигурируйте генерацию кода, называющую правило для глобальных переменных. По умолчанию генератор кода называет глобальные переменные с префиксным rt. Для генератора кода, чтобы произвести код, который совпадает с объявлениями внешней переменной в roll_input_data.h, сконфигурируйте генерацию кода, называющую правило для глобальных переменных соответственно.

    1. Откройте диалоговое окно Model Configuration Parameters. В панели инструментов, на вкладке C Code, нажимают Settings.

    2. Перейдите к Code Generation> панель Identifiers.

    3. Установите параметр, Global variables к именованию управляет $N$M (удалите rt префикс). Маркерный $N представляет имя элемента данных в модели, например, имя блока Inport или Outport. Маркерный $M представляет искажающий имя текст, который генератор кода вставляет, при необходимости, чтобы избежать столкновений имени с другими глобальными переменными в коде.

    4. Примените изменение.

  6. Сконфигурируйте блоки Выходного порта на корневом уровне модели, чтобы появиться в сгенерированном коде как отдельные глобальные переменные. В редакторе Отображений Кода, на вкладке Data Defaults, для категории Outports, устанавливает Storage Class на ExportToFile.

    Сгенерированный код объявляет и задает выходные переменные в заголовке и файлах определения, которые вы задаете с Property Inspector.

  7. В Property Inspector задайте имена для сгенерированного заголовка и файлов определения. Установите свойство HeaderFile на roll_output_data.h и свойство DefinitionFile к roll_output_data.c.

  8. Сконфигурируйте генерацию кода для модели, чтобы включать внешние исходные файлы roll_input_data.c и roll_heading_mode.c. В диалоговом окне Configuration Parameters, набор Code Generation> Custom Code> Additional build information> Source files к roll_input_data.c roll_heading_mode.c. Затем нажмите Apply и OK.

  9. Сохраните модель. Регенерируйте код путем нажатия на Build.

    Ошибка компилятора указывает на ту переменную HDG_Mode не объявляется. Та переменная не объявляется в заголовочном файле roll_output_data.h, который вы объявили как заголовочный файл по умолчанию для импорта. Вы фиксируете эту ошибку в следующем разделе этого примера.

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

  10. Вы сконфигурировали блоки Inport, чтобы использовать внешний заголовочный файл, чтобы объявить и задать входные переменные. В Представлении кода подтвердите, что сгенерированный код включает этот внешний заголовочный файл путем поиска roll_input_data.h.

  11. Ищите корневой уровень имя блока Inport, HDG_Ref. При печати выберите поисковое предложение с зеленым V значок. Это поисковое предложение находит экземпляры HDG_Ref используемый в качестве переменной в сгенерированном коде. Подтвердите тот HDG_Ref задан как отдельная глобальная переменная.

  12. В модели, rtwdemo_roll, кликните по блоку Outport Ail_Cmd. Установите свой курсор на меню замещающего знака выше блока и нажмите Navigate To Code. Представление кода подсвечивает код в rtwdemo_roll.c это соответствует блоку. В коде установите свой курсор на меню замещающего знака выше выходной переменной Ail_Cmd. Диалоговое окно трассируемости отображается определения переменной и элементы модели, которые соответствуют коду. Диалоговое окно подтверждает тот Ail_Cmd задан как отдельная глобальная переменная. Кликните по коду определения, чтобы видеть определение в output_data.c.

Замените настройки по умолчанию для отдельных элементов данных

Настройки, которые вы выбираете для категории под Data Defaults, применяются к элементам в той категории через модель. Чтобы заменить настройки по умолчанию для отдельного элемента данных, используйте редактор Отображений Кода.

Когда вы сгенерированный код после конфигурирования настроек по умолчанию для импорта и выходных портов, ошибка компилятора указала на ту переменную HDG_Mode не объявляется. Можно зафиксировать ту ошибку путем переопределения настройки по умолчанию для блока Inport HDG_Mode.

  1. В редакторе Отображений Кода, на вкладке Inports, избранный источник HDG_Mode.

  2. Установите Storage Class на ImportFromFile.

  3. В Property Inspector, набор Identifier к HDG_Mode и Header File к roll_heading_mode.h.

    На основе этих настроек генератор кода импортирует объявление для внешней переменной HDG_Mode от заголовочного файла roll_heading_mode.h.

    extern boolean_T HDG_Mode;
    
  4. Сохраните модель и регенерируйте код.

    Минимизируйте окно отчета генерации кода для исследования позже в этом примере.

  5. В Представлении кода ищите roll_heading_mode.h и подтвердите, что это включено в сгенерированный код с конфигурационным файлом по умолчанию roll_input_data.h.

  6. Ищите HDG_Mode и подтвердите, что это задано как отдельная глобальная переменная.

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