Ассоциируйте элементы модели с определениями кода
Редактор Отображения является графическим интерфейсом, где можно сконфигурировать элементы данных и функции точки входа в модели, за исключением ссылочных моделей, для генерации кода. Каждая модель в иерархии модели-ссылки имеет свои собственные отображения кода. Связать каждую категорию элемента данных моделей с определенным классом памяти и каждую категорию функции точки входа модели с определенным шаблоном индивидуальной настройки функции в модели. Затем переопределите эти настройки, при необходимости, для конкретных элементов данных и функций.
Класс памяти определяет такие свойства, как внешний вид и местоположение, которые генератор кода использует при создании кода для связанных данных. Шаблоны индивидуальной настройки функции определяют, как генератор кода создает код для связанных функций. Если вы оставляете класс памяти или шаблон индивидуальной настройки функции установленным на Default
можно сконфигурировать раздел памяти для этих данных или категории функций.
Чтобы сконфигурировать элементы данных и функции для генерации кода, используйте таблицы в Отображения Code отображения editor:
Data Defaults
Function Defaults
Functions
Inports
Outports
Parameters
Data Stores
Signals/States
При выборе строки в активной таблице в Code разделе Property Inspector отображаются параметры свойства класса памяти или шаблона индивидуальной настройки функции для выбранного элемента данных или функции.
Прежде чем вы сможете сконфигурировать сигнал для генерации кода, добавьте сигнал к отображениям кода модели. Добавьте и удалите сигналы из отображений кода путем паузы на эллипсисе, который появляется выше или ниже сигнальной линии, чтобы открыть панель действий. Нажмите кнопку Add Signal или Remove Signal. Эти кнопки также доступны в редакторе Отображения на вкладке Signals/States.
Выполните одно из следующих действий:
Откройте Embedded Coder® Приложение. На вкладке C Code выберите Code Interface > Default Code Mappings или Code Interface > Individual Element Code Mappings.
Откройте приложение Embedded Coder на вкладке C Code, в левом нижнем углу Simulink® В окне Editor щелкните вкладку Code Mappings - C.
В холсте модели окна Редактор щелкните элемент управления перспективой в правом нижнем углу и выберите Code. Затем перейдите на вкладку Code Mappings - C.
Сконфигурируйте генерацию кода для корневых Inport и блоков Outport на протяжении всей модели. Применение строений по умолчанию может сэкономить время, особенно для крупномасштабных моделей, которые используют значительный объем данных. После применения отображений по умолчанию можно настроить преобразования для отдельных элементов данных.
Скопируйте файлы внешнего кода в папку с возможностью записи.
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'));
Откройте rtwdemo_roll
модели. Сохраните копию модели в папке, где вы скопировали файлы внешнего кода.
Откройте приложение Embedded Coder.
Сконфигурируйте генератор кода так:
Используйте файлы заголовков roll_input_data.h
объявить переменные, представляющие блоки Inport модели.
Представьте переменные для блоков Outport модели как отдельные глобальные переменные.
Задайте выходные переменные в roll_output_data.c
и объявить их в roll_output_data.h
.
Сконфигурируйте имена, которые генератор кода использует для переменных, которые он производит в коде для блоков Inport.
На вкладке C Code выберите Code Interface > Default Code Mappings.
На вкладке Data Defaults, под Inports and Outports, выберите строку для Inports. Затем установите класс памяти равным ImportFromFile
.
В Property Inspector установите Header File равным roll_input_data.h
.
Установите класс памяти для категории Outports элемента модели на ExportToFile
.
Установите Header File значение roll_output_data.h
и Definition File к roll_output_data.c
.
В редакторе Отображения перейдите на вкладку Inports. Класс памяти для каждого входного порта установлен на Auto
, что означает, что генератор кода может исключить или изменить представление соответствующего кода в целях оптимизации. Если оптимизация невозможна, генератор кода применяет строение по умолчанию для inports.
Заставьте генератор кода использовать строение по умолчанию для inports, класса памяти ImportFromFile
с внешним файлом заголовка roll_input_data.h
. Нажмите клавишу Ctrl и выберите входные порты. Для одного из выбранных входных портов установите класс памяти равным Model default: ImportFromFile
. Редактор обновляет настройку класса памяти для выбранных входных портов.
Переопределите исходное расположение по умолчанию для переменной inport HDG_Mode
. Эта переменная объявлена во внешнем файле roll_heading_mode.h
.
В редакторе Отображения перейдите на вкладку Inports.
Выберите HDG_Mode
строка.
Установите Storage Class значение ImportFromFile
.
В Property Inspector в разделе Code установите Header File равным roll_heading_mode.h
.
Сконфигурируйте генератор кода, чтобы получить имена переменных в коде для блоков Inport, которые совпадают с именами переменных во внешних файлах roll_input_data.h
и roll_heading_mode.h
. На вкладке Inports выберите каждый Inport блок и в Property Inspector установите Identifier на имя блока. Если для класса памяти задано значение, отличное от Auto
необходимо задать значение для свойства Identifier класса памяти.
Включите внешние исходные файлы roll_input_data.c
и roll_heading_mode.c
в процессе генерации кода и сборки. Установите параметр конфигурации модели Source files равным roll_input_data.c roll_heading_mode.c
.
Сохраните модель.
Сгенерируйте код и проверьте, что код, сгенерированный для блоков Inport и Output, появляется, как вы ожидаете.
rtwdemo_roll.h
включает эти заголовочные файлы, сопоставленные с классами памяти:
#include "roll_output_data.h" #include "roll_input_data.h" #include "roll_heading_mode.h"
roll_heading_mode.c
включает roll_heading_mode.h
и задает переменную HDG_Mode
.
#include "roll_heading_mode.h" boolean_T HDG_Mode;
roll_input_data.c
задает переменные, объявленные в roll_input_data.h
.
#include "roll_input_data.h" boolean_T AP_Eng; real32_T HDG_Ref; real32_T Rate_FB; real32_T Phi; real32_T Psi; real32_T TAS; real32_T Turn_Knob;
roll_output_data.c
включает это определение экспортированных данных:
real32_T Ail_Cmd;
roll_output_data.h
включает это экспортированное объявление данных:
extern real32_T Ail_Cmd;
По умолчанию генератор кода использует правило именования идентификаторов $R$N
для присвоения имени функциям точки входа. $R
- имя корневой модели. $N
- имя функции, например initialize
, step
, и terminate
. Чтобы интегрировать сгенерированный код с существующим внешним кодом или соответствовать стандартам именования или руководствам, можно настроить правило именования по умолчанию. В этом примере показано, как добавить текстовую строку myproj_
как префикс к $R$
. Корректировка правила именования по умолчанию может сэкономить время, особенно для многоскоростных моделей, для которых генератор кода производит уникальную step
функция для каждой скорости.
Откройте rtwdemo_multirate_multitasking
модели. Сохраните копию в папку с возможностью записи.
Откройте приложение Embedded Coder. Откроется вкладка C Code, которая включает редактор Code Mappings.
Создайте шаблон индивидуальной настройки функции, который задает правило именования myproj_$R$N
.
Откройте словарь Embedded Coder. На вкладке C Code выберите Code Interface > Embedded Coder Dictionary.
Перейдите на вкладку Function Customization Templates.
Нажмите Add.
В Name столбце новой строки таблицы назовите новый шаблон myproj_FunctionTemplate
.
В Function Name столбце введите правило именования myproj_$R$N
.
Закройте словарь Embedded Coder.
На вкладке C Code выберите Code Interface > Default Code Mappings.
Перейдите на вкладку Function Defaults.
Для категорий Initialize/Terminate и Execution функций измените шаблон индивидуальной настройки функции по умолчанию с Default
на myproj_FunctionTemplate
.
Сохраните модель.
Сгенерируйте код и проверьте имена функции точки входа.
void myproj_rtwdemo_multirate_multitasking_step0(void) /* Sample time: [1.0s, 0.0s] */ { (rtM->Timing.RateInteraction.TID0_1)++; if ((rtM->Timing.RateInteraction.TID0_1) > 1) { rtM->Timing.RateInteraction.TID0_1 = 0; } if (rtM->Timing.RateInteraction.TID0_1 == 1) { rtDW.RateTransition = rtDW.RateTransition_Buffer0; } rtY.Out2 = 2.0 * rtDW.RateTransition + rtU.In1_1s; rtY.Out1 = (3.0 * rtDW.RateTransition + rtU.In1_1s) * 5.0 + rtY.Out2; } /* Model step function for TID1 */ void myproj_rtwdemo_multirate_multitasking_step1(void) /* Sample time: [2.0s, 0.0s] */ { rtDW.RateTransition_Buffer0 = rtDW.Integrator_DSTATE; rtDW.Integrator_DSTATE += 2.0 * rtU.In2_2s; } void myproj_rtwdemo_multirate_multitasking_initialize(void) { /* (no initialization code required) */ } void myproj_rtwdemo_multirate_multitasking_terminate(void) { /* (no terminate code required) */ }
Для вашей модели можно настроить имена большинства функций точки входа и аргументы функций выполнения, таких как функции шага и функции Simulink. В этом примере показано, как настроить функции точки входа для модели rtwdemo_roll
.
Скопируйте файлы внешнего кода в папку с возможностью записи.
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'));
Откройте rtwdemo_roll
модели. Сохраните копию модели в папке, где вы скопировали файлы внешнего кода.
Откройте Embedded Coder приложения. Откроется вкладка C Code, которая включает в себя редактор Кода Отображений.
На вкладке C Code выберите Code Interface > Individual Element Code Mappings.
Перейдите на вкладку Functions.
Настройте имя функции step (execution). В столбце Function Name введите имя roll_run
.
Настройка аргументов step
функция. Откройте диалоговое окно строения для step
щелкните гиперссылку прототипа в столбце Function Preview.
Выберите Configure arguments for Step function prototype.
Чтобы открыть таблицу, в которой отображаются строения по умолчанию для аргументов, нажмите Get Default.
Настройте аргументы:
В раскрывающемся списке C return argument выберите Ail_Cmd
.
Для каждого порта в поле C Identifier Name удалите arg_
префикс из их имен по умолчанию.
Для HDG_Mode
Inport, из выпадающего списка C Type Qualifier, выберите Pointer
. В C Identifier Name поле смените имя на HDG_Mode_Ptr
Щелкните Apply и проверьте, что прототип функции отражает изменения.
Проверьте изменения нажатием кнопки Validate.
Нажмите OK.
Сгенерируйте код.
Проверьте обновления в сгенерированном файле C rtwdemo_roll.c
. Как найти обновленную step
функция (roll_run
), используйте поле Search.
Выберите step
функция для проверки его прототипа.
real32_T roll_run(real32_T Phi, real32_T Psi, real32_T Rate_FB, real32_T TAS, boolean_T AP_Eng, boolean_T *HDG_Mode_Ptr, real32_T HDG_Ref, real32_T Turn_Knob)
Model Element Category
- Категория элементов данных моделейНазывает категорию элементов данных моделей Simulink. Класс памяти, заданный для категории, применяется к элементам этой категории на протяжении всей модели.
Категория элемента модели | Описание |
---|---|
Inports | Входные порты корневого уровня модели, такие как блоки Inport и In Bus Element. |
Вспомогательные порты | Выходные порты корневого уровня модели, такие как блоки Outport и Out Bus Element. |
Сигналы, состояния и внутренние данные | Элементы данных, которые являются внутренними для модели, такие как выходные сигналы блоков, дискретные состояния блока, хранилища данных и сигналы пересечения нулем. |
Общие локальные хранилища данных | Data Store Memory блоки, которые имеют параметры блоков Share across model instances установленные. Эти хранилища данных доступны только в модели, где они определены. Значение хранилища данных разделяется между образцами модели. |
Глобальные данные | Данные хранятся, которые заданы сигнальным объектом в базовом рабочем пространстве или в словаре данных. Эти хранилища данных могут использоваться несколькими моделями в приложении. Чтобы просмотреть и сконфигурировать эти хранилища данных в редакторе Отображения, нажмите Refresh ссылка справа от имени категории. При нажатии на эту ссылку обновляется диаграмма модели. |
Аргументы параметра модели | Параметры в рабочем пространстве модели, которые вы конфигурируете как аргументы модели. Эти параметры доступны в блоке модели, чтобы позволить каждому образцу модели предоставить свое собственное значение. Чтобы задать параметр в качестве аргумента модели, установите флажок Model Data Editor Parameters > Argument >. |
Параметры модели | Параметры, которые заданы в модели, такие как параметры в рабочем пространстве модели. Исключает аргументы модели. |
Внешние параметры | Параметры, которые вы определяете как объекты в базовом рабочем пространстве или в словаре данных. Эти параметры могут использоваться несколькими моделями в приложении. Чтобы просмотреть и сконфигурировать эти параметры в редакторе Отображения, нажмите Refresh ссылка справа от имени категории. При нажатии на эту ссылку обновляется диаграмма модели. |
Константы | Выход блока с постоянными значениями и параметры, которые не могли быть встроены. Эти значения хранятся в переменных по одной из следующих причин.
|
Редактор Отображения представляет допустимые опции класса памяти для данной категории. Опции могут включать:
Неопределенный класс памяти (Default
). Генератор кода помещает код для категории элементов данных в стандартные структуры, такие как B_
, ExtY_
, ExtU_
, DW_
, и P_
. См. раздел Структуры данных в сгенерированном коде.
Соответствующие предопределенные классы памяти, такие как ExportedGlobal
.
Соответствующие классы памяти в доступном пакете, например ImportFromFile
.
Класс памяти, заданный в словаре Embedded Coder.
Storage Class
- Определение кода для элементов данных моделейОпределение (спецификация), которое генератор кода использует для определения свойств, таких как внешний вид и местоположение, для кода, который он производит для элементов данных моделей. Смотрите раздел «Выбор класса памяти для управления представлением данных в сгенерированном коде».
Model Function Category
- Категория функций моделиНазывает категорию функций модели Simulink. Шаблон индивидуальной настройки функции, заданный для категории, применяется к функциям этой категории на протяжении всей модели.
Категория функции модели | Описание |
---|---|
Инициализация/завершение | Функции точки входа для инициализации и завершения |
Выполнение | Функции точки входа для инициирования выполнения и сброса |
Общая утилита | Общие служебные функции |
Function Customization Template
- Определение кода для функцийОпределение (спецификация), которое генератор кода использует для определения свойств, таких как внешний вид и местоположение, для кода, который он производит для функций модели. По умолчанию шаблоны недоступны. Может потребоваться определить шаблон индивидуальной настройки функции в словаре Embedded Coder.
Source
- Тип функции точки входаОпределяет тип функции точки входа. Для моделей, основанных на скорости, это свойство предоставляет частоту дискретизации step
функций.
Function Customization Template
- Определение кода для функцииОпределение (спецификация), которое генератор кода использует для определения свойств, таких как внешний вид и местоположение, для кода, который он производит для функции модели.
Function Name
- Имя функцииНазовите, что генератор кода дает функцию модели.
Function Preview
- Предварительный просмотр прототипа функцииПредварительный просмотр прототипа функции точки входа. Чтобы проверить прототип, проверьте предварительный просмотр прототипа. Чтобы открыть диалоговое окно, в котором можно настроить прототип, щелкните гиперссылку предварительного просмотра. Дополнительные сведения см. в разделе Настройка параметров по умолчанию для функций.
Source
- Имя блока Inport корневого уровня или элемента шиныОпределяет корневой блок Inport или элемент блока In Bus Element (для примера, InBus1.signal1
) в модели. Если элемент разрешается к объекту данных, редактор Отображения отображает значок resolve-to-signal-object справа от имени источника и разрешает строение на основе того, является ли параметр класса памяти для элемента Auto
. Если класс памяти Auto
элемент данных принимает строение кода, которую задает объект данных. Редактор меняет текст отображения в столбце Storage Class на From signal object:
далее указывается имя класса памяти объекта данных. Если класс памяти не Auto
элемент данных принимает строение, заданную в редакторе Отображения.
Storage Class
- Определение кода для корневого входного портаОпределение, которое генератор кода использует для определения свойств, таких как внешний вид и местоположение, для кода, который он генерирует для корневого входного порта. Смотрите раздел «Выбор класса памяти для управления представлением данных в сгенерированном коде».
Source
- Имя корневого блока Outport или элемента шиныОпределяет блок Outport корневого уровня или элемент блока Out Bus Element (для примера OutBus1.signal1
) в модели. Если элемент разрешается к объекту данных, редактор Отображения отображает значок resolve-to-signal-object справа от имени источника и разрешает строение на основе того, является ли параметр класса памяти для элемента Auto
. Если класс памяти Auto
элемент данных принимает строение кода, которую задает объект данных. Редактор меняет текст отображения в столбце Storage Class на From signal object:
далее указывается имя класса памяти объекта данных. Если класс памяти не Auto
элемент данных принимает строение, заданную в редакторе Отображения.
Storage Class
- Определение кода для root outportОпределение, которое генератор кода использует для определения свойств, таких как внешний вид и местоположение, для кода, который он генерирует для корневого выхода. Смотрите раздел «Выбор класса памяти для управления представлением данных в сгенерированном коде».
Source
- Имя аргумента параметра модели, параметра модели или внешнего параметраОпределяет параметр в модели. Если элемент разрешается к объекту данных, редактор Отображения отображает значок resolve-to-parameter-object справа от имени источника и разрешает строение на основе того, является ли параметр класса памяти для элемента Auto
. Если класс памяти Auto
элемент данных принимает строение кода, которую задает объект данных. Редактор меняет текст отображения в столбце Storage Class на From parameter object:
далее указывается имя класса памяти объекта данных. Если класс памяти не Auto
элемент данных принимает строение, заданную в отображениях кода.
Типы элементов параметра перечислены в этой таблице.
Тип Параметра элемента | Описание |
---|---|
Аргумент параметра модели | Блокируйте параметр в рабочем пространстве модели, который вы конфигурируете как аргумент модели. Параметр доступен в блоке модели, чтобы позволить каждому образцу модели предоставить свое собственное значение. Чтобы задать параметр в качестве аргумента модели, установите флажок Model Data Editor Parameters > Argument >. |
Параметр модели | Параметр, который задан в модели, такой как параметр в рабочем пространстве модели. Исключает аргументы модели. |
Внешний параметр | Параметр, который вы задаете как объект в базовом рабочем пространстве или в словаре данных. Эти параметры могут использоваться несколькими моделями в приложении. Эта группировка параметров появляется в редакторе только в том случае, если модель использует такой элемент. Чтобы просмотреть и сконфигурировать эти параметры в редакторе Отображения, нажмите Refresh ссылка справа от имени категории. При нажатии на эту ссылку обновляется диаграмма модели. |
Storage Class
- Определение кода для параметраОпределение, которое генератор кода использует для определения свойств, таких как внешний вид и местоположение, для кода, который он генерирует для параметра. Для внешних параметров, после клика по Refresh
ссылка справа от имени категории, скомпилированный класс памяти (для примера, класс памяти, настроенный для внешнего параметра) появляется в правой части столбца Storage Class. Смотрите раздел «Выбор класса памяти для управления представлением данных в сгенерированном коде».
Source
- Имя локального хранилища данных, общего локального хранилища данных или глобального хранилища данныхОпределяет хранилище данных в модели. Если элемент разрешается к объекту данных, редактор Отображения отображает значок resolve-to-signal-object справа от имени источника и разрешает строение на основе того, является ли параметр класса памяти для элемента Auto
. Если класс памяти Auto
элемент данных принимает строение кода, которую задает объект данных. Редактор меняет текст отображения в столбце Storage Class на From signal object:
далее указывается имя класса памяти объекта данных. Если класс памяти не Auto
элемент данных принимает строение, заданную в отображениях кода.
Типы элементов хранилища данных перечислены в этой таблице.
Тип элемента хранилища данных | Описание |
---|---|
Локальное хранилище данных | Хранилище данных, доступное из любого места иерархии модели, которое находится на уровне или ниже уровня, на котором определяется хранилище данных. Можно задать локальное хранилище данных графически в модели путем включения блока Data Store Memory или путем создания объекта сигнала (синтезированного хранилища данных) в рабочем пространстве модели. |
Общее локальное хранилище данных | Data Store Memory блок, который имеет параметры блоков Share across model instances установленный. Эти хранилища данных доступны только в модели, где они определены. Значение хранилища данных разделяется между образцами модели. Эта группировка хранилищ данных появляется в редакторе только в том случае, если такой элемент существует в модели. |
Глобальные данные | Хранилище данных, которое определяется сигнальным объектом в базовом рабочем пространстве или в словаре данных. Эти хранилища данных могут использоваться несколькими моделями в приложении. Эти хранилища данных не конфигурируются в отображениях кода. После нажатия кнопки обновления они отображаются в редакторе Отображения в доступном только для чтения состоянии в целях просмотра или учета. Эта группировка хранилищ данных появляется в редакторе только в том случае, если модель использует такой элемент. Чтобы просмотреть и сконфигурировать эти хранилища данных в редакторе Отображения, нажмите Refresh ссылка справа от имени категории. При нажатии на эту ссылку обновляется диаграмма модели. |
Имена локальных и общих локальных хранилищ данных появляются в формате
. block-name
: data-store-name
В зависимости от того, как элемент хранилища данных представлен и сконфигурирован в модели, локальные и общие локальные хранилища данных могут разрешиться к объекту сигнала в рабочем пространстве модели, базовой рабочей области или словаре данных. Глобальные данные сохраняют разрешение на объект сигнала в базовом рабочем пространстве или словаре данных.
Storage Class
- Определение кода для хранилища данныхОпределение, которое генератор кода использует для определения свойств, таких как внешний вид и местоположение, для кода, который он производит для хранилища данных. Для глобальных хранилищ данных после клика по Refresh
ссылка справа от имени категории, скомпилированный класс памяти (для примера, класс памяти, настроенный для глобальных данных хранилища) появляется в правой части столбца Storage Class. Смотрите раздел «Выбор класса памяти для управления представлением данных в сгенерированном коде».
Path
- Путь к хранилищу данных в моделиСсылка, которую можно кликнуть, чтобы выделить хранилище данных в диаграмме модели.
Source
- Имя сигнала или состоянияОпределяет сигнальную линию или состояние в модели. Если элемент разрешается к объекту данных, редактор Code Mappings отображает значок resolve -to-signal-object справа от имени источника и разрешает строение на основе того, является ли параметр класса памяти для элемента Auto
. Если класс памяти Auto
элемент данных принимает строение кода, которую задает объект данных. Редактор меняет текст отображения в столбце Storage Class на From signal object:
далее указывается имя класса памяти объекта данных. Если класс памяти не Auto
элемент данных принимает строение, заданную в редакторе Отображения.
В редакторе Отображения перечислены:
Именованные сигналы и состояния при помощи имени элемента данных
Неназванные сигналы при помощи source-block формата
: port-number
Состояния, используемые в нескольких блоках при использовании формата block-name
: state-name
Чтобы сконфигурировать отдельную сигнальную линию в редакторе Code Mappings для модели, сначала необходимо добавить сигнал к отображениям. См. «Конфигурирование данных сигнала для генерации кода C».
Storage Class
- Определение кода для сигналаОпределение, которое генератор кода использует для определения свойств, таких как внешний вид и местоположение, для кода, который он генерирует для сигнальной линии или состояния. Смотрите раздел «Выбор класса памяти для управления представлением данных в сгенерированном коде».
Path
- Путь к сигнальной линии или состоянию в моделиСсылка, которую вы можете кликнуть, чтобы подсветить сигнальную линию или блок, который использует состояние в диаграмме модели.