Как описано в Задают Классы памяти, Разделы Памяти и Шаблоны функций для Программной архитектуры, можно создать определения генерации кода, что вы и другие пользователи можете обратиться к элементам модели, таким как данные и функции. Определения кода управляют внешним видом тех элементов в сгенерированном коде.
В крупной организации с многоуровневыми моделями и пользователями, можно совместно использовать определения генерации кода путем хранения их во взаимно доступном месте. Процесс совместного использования определений кода называется deployment.
Когда вы создаете определения генерации пользовательского кода, чтобы совместно использовать определения между моделями и другими пользователями:
Когда вы создаете определения в пакете при помощи Custom Storage Class Designer, для каждого пользователя, помещаете папку, содержащую папку пакета на пути MATLAB®. Для получения дополнительной информации смотрите то, Что Путь поиска файлов MATLAB?.
Когда вы создаете определения в Словаре Embedded Coder, храните определения в словаре данных Simulink®. Затем соедините каждую модель с отдельным словарем данных. Сконфигурируйте каждый отдельный словарь, чтобы обратиться к словарю, который содержит определения генерации кода. Для примера см. Словарное определение Embedded Coder Доли Между Моделями.
Simulink обеспечивает версионность для Словарей Embedded Coder®. Когда эти события имеют место, Simulink синхронизирует данные в словаре данных, включая Словари Embedded Coder, поскольку использование с моделью независимо от версии Simulink раньше создавало модель.
Вы соединяете модель со словарем данных, который был сохранен в предыдущей версии Simulink (например, вы соединяете модель, которую вы разрабатываете в R2018b со словарем, сохраненным в R2018a).
Вы открываете модель, которая имеет локальный Словарь Embedded Coder в версии Simulink, который является более старым, чем текущая версия (например, вы разработали модель, которая использует локальный словарь в R2018a, и вы открываете ту модель в R2018b, чтобы продолжить разработку).
У вас также есть опция, чтобы экспортировать (сохраняют) Словарь Embedded Coder для использования с моделями, созданными с различной версией (предыдущий или более старый) генератора кода.
Для получения дополнительной информации смотрите Использование Словаря для Моделей, Созданных с Различными Версиями Simulink.
В то время как подготовка Словаря Embedded Coder намеревалась быть совместно использованной многоуровневыми моделями, можно сопоставить определения кода по умолчанию для категорий данных модели и функций. В этом примере вы сопоставляете определения кода по умолчанию для Словаря Embedded Coder в exSharedCodeDefs.sldd
.
Если не уже заданный, задайте определения кода (классы памяти, функциональные шаблоны настройки и разделы памяти) в словаре данных. В данном примере вы задаете определения кода в словаре данных exSharedCodeDefs.sldd
. Поместите копию этого файла в writeable месте.
В панели Current Folder командного окна MATLAB дважды кликните имя файла своей копии exSharedCodeDefs.sldd
.
В панели Model Hierarchy Model Explorer щелкните правой кнопкой по узлу словаря и выберите Show Empty Sections. Model Explorer перечисляет узлы для Design Data, Configurations, Embedded Coder Dictionary и Other data.
Откройте Словарь Embedded Coder. В панели Model Hierarchy нажмите Embedded Coder Dictionary. Затем на правой панели нажмите Open Embedded Coder Dictionary.
В диалоговом окне Embedded Coder Dictionary нажмите Configure Defaults.
В диалоговом окне Configure Dictionary Defaults сконфигурируйте определения кода по умолчанию для категорий данных и функций.
На вкладке Data Defaults сконфигурируйте класс памяти и, если применимо, раздел memory, для этих категорий данных:
Категория элемента модели | Описание |
---|---|
Inports | Входные порты корневого уровня модели, такие как Inport и блоки In Bus Element. |
Выходные порты | Выходные порты корневого уровня модели, такие как Outport и блоки Out Bus Element. |
Сигналы, состояния и внутренние данные | Элементы данных, которые являются внутренними к модели, такими как выходные сигналы блока, дискретные состояния блока, хранилища данных и сигналы пересечения нулем. |
Разделяемые локальные хранилища данных | Блоки Data Store Memory, которые имеют параметры блоков набор Share across model instances. Эти хранилища данных доступны только в модели, где они заданы. Значение хранилища данных совместно используется через экземпляры модели. |
Хранилища глобальных данных | Хранилища данных, которые заданы объектом сигнала в базовом рабочем пространстве или в словаре данных. Многоуровневые модели в приложении могут использовать эти хранилища данных. Чтобы просмотреть и сконфигурировать эти хранилища данных в редакторе Отображений Кода, нажмите Refresh соединитесь справа от названия категории. Нажатие на эту ссылку обновляет диаграмму модели. |
Аргументы параметра модели | Параметры в рабочем пространстве модели, которое вы конфигурируете в качестве аргументов модели. Эти параметры отсоединены в блоке модели, чтобы позволить каждому экземпляру модели ввести свое собственное значение. Чтобы задать параметр в качестве аргумента модели, установите флажок Model Data Editor> Parameters> Argument. |
Параметры модели | Параметры, которые заданы в модели, такой как параметры в рабочем пространстве модели. Исключает аргументы модели. |
Внешние параметры | Параметры, которые вы задаете как объекты в базовом рабочем пространстве или в словаре данных. Многоуровневые модели в приложении могут использовать эти параметры. Чтобы просмотреть и сконфигурировать эти параметры в редакторе Отображений Кода, нажмите Refresh соединитесь справа от названия категории. Нажатие на эту ссылку обновляет диаграмму модели. |
Константы | Блок постоянного значения выход и постоянные параметры в модели. |
На вкладке Function Defaults сконфигурируйте функциональный шаблон настройки и, если применимо, раздел memory, для этих категорий функций:
Функциональная категория модели | Описание |
---|---|
Инициализировать/Отключить | Точка входа функционирует для инициализации и завершения |
Выполнение | Точка входа функционирует для того, чтобы инициировать выполнение и сброс |
Разделяемая утилита | Разделяемые служебные функции |
Отображение значения по умолчанию для категории применяется к элементам в категории в модели.
В данном примере установите класс памяти для категорий данных Inports, Outports и Global data stores к ExportedGlobal
.
Примените свои изменения и закройте диалоговое окно. Нажмите Apply. Затем нажмите OK.
Закройте словарь Embedded Coder и Model Explorer.
В этом примере показано, как создать класс памяти, который дает к отдельным глобальным переменным в сгенерированном коде, и совместно используйте класс памяти между двумя моделями, rtwdemo_roll
и rtwdemo_configinterface
. Затем вы конфигурируете каждую модель, чтобы использовать класс памяти в качестве настройки генерации кода по умолчанию для внутренних данных, которые включают состояния блока.
Это - лучшая практика сохранить совместно использованные определения генерации кода в автономном словаре данных, что означает, что никакие модели не соединены непосредственно со словарем. Затем можно соединить целевые модели с одним или несколькими дополнительными, промежуточными словарями, которые вы конфигурируете, чтобы обратиться к автономному словарю. С этой модульной иерархией словаря каждая модель может хранить другие данные, такие как данные проектирования, отдельно из определений генерации кода.
В иерархии словарей справочных данных (см., что Словарь Ссылается), только один словарь может сохранить определения генерации кода в Словаре Embedded Coder. Если модель имеет доступ к нескольким Словарям Embedded Coder через словари справочных данных, используйте функции coder.dictionary.move
и coder.dictionary.remove
чтобы передать и удалить Словари Embedded Coder до, только один существует в иерархии словаря.
Рисунок показывает иерархию словаря в качестве примера. На рисунке:
modelOne.slx
и modelTwo.slx
различные файлы модели.
dataForModelOne.sldd
и dataForModelTwo.sldd
словари данных. Каждый словарь хранит данные проектирования, такие как числовые переменные MATLAB, для одной из моделей.
coderDefs.sldd
словарь разделяемых данных, который хранит определения генерации кода для обеих моделей. Другая ссылка словарей coderDefs.sldd
.
Создайте словарь данных. Затем создайте класс памяти в словаре.
В командной строке откройте Model Explorer.
daexplr
В Model Explorer выберите File> New> Data Dictionary.
Назовите словарь coderDefs.sldd
.
В панели Model Hierarchy Model Explorer щелкните правой кнопкой по coderDefs
и выберите Show Empty Sections.
Выберите узел Embedded Coder Dictionary.
В Диалоговой панели (правая панель), нажмите Open Embedded Coder Dictionary.
В диалоговом окне Embedded Coder Dictionary нажмите Add.
Для нового класса памяти, в панели Property Inspector, устанавливает Name на internalsInFile
.
В панели Model Hierarchy Model Explorer щелкните правой кнопкой по coderDefs
и выберите Save Changes.
Соедините каждую модель с отдельным словарем данных. Сконфигурируйте каждый словарь, чтобы обратиться к автономному словарю (coderDefs.sldd
).
Откройте модели.
rtwdemo_configinterface rtwdemo_roll
В rtwdemo_roll
, на вкладке Modeling, в галерее Design, нажимают Link to Data Dictionary.
В диалоговом окне Model Properties нажмите New.
Создайте словарь под названием rtwdemo_roll_data.sldd
при помощи Создавания нового диалогового окна Data Dictionary.
В диалоговом окне Model Properties нажмите OK.
Simulink соединяет модель с новым словарем. Словарь не содержит данных, потому что модель не использует данные в базовом рабочем пространстве.
Откройте словарь в Model Explorer. В нижнем левом углу модели кликните по значку данных модели, затем щелкните по ссылке External Data. Под узлом External Data выберите rtwdemo_roll_data.sldd
.
В Диалоговой панели, под Referenced Dictionaries, нажимают Add.
В диалоговом окне Open Data Dictionary дважды кликните coderDefs.sldd
.
Используйте панель Model Hierarchy, чтобы сохранить изменения, которые вы внесли в rtwdemo_roll_data.sldd
.
Соедините rtwdemo_configinterface
к словарю под названием rtwdemo_configinterface_data.sldd
.
rtwdemo_configinterface
использует переменную в базовом рабочем пространстве. Чтобы переместить переменную в словарь, в диалоговом окне Model Properties, нажимают Migrate data. Затем следуйте инструкциям, чтобы соединить модель со словарем и скопировать переменные, на которые ссылаются.
Сконфигурируйте rtwdemo_configinterface_data.sldd
относиться к coderDefs.sldd
.
Подтвердите, что разделяемое определение доступно для использования в моделях путем применения его как настройки по умолчанию для внутренних данных и осмотра сгенерированного кода.
В rtwdemo_roll
, кликните по вкладке C Code. Если панель инструментов не показывает вкладку C Code, открывает приложение Embedded Coder.
Под Code Mappings> Data Defaults, для строки Signals, states, and internal data, установил Storage Class на internalsInFile
.
В rtwdemo_configinterface
, используйте редактор Отображений Кода, чтобы установить Storage Class на internalsInFile
для строки Signals, states, and internal data.
Сгенерируйте код от rtwdemo_roll
.
В представлении Code смотрите сгенерированный файл rtwdemo_roll.c
. Файл задает глобальные переменные, которые соответствуют данным состояния в модели, такой как состояние блока Integrator в BasicRollMode
подсистема.
/* Storage class 'internalsInFile' */ real32_T rtwdemo__FixPtUnitDelay1_DSTATE; real32_T rtwdemo_roll_Integrator_DSTATE; int8_T rtwde_Integrator_PrevResetState;
Опционально, сгенерируйте код от rtwdemo_configinterface
и подтвердите, что код появляется как ожидалось.
Если вы создаете определения генерации кода в Словаре Embedded Coder модели, определения хранятся в файле модели. Если вы хотите совместно использовать определения между моделями:
Создайте словарь разделяемых данных как показано в Словарном определении Embedded Coder Доли Между Моделями. Прежде чем вы перейдете к следующему шагу, убедитесь, что все целевые модели имеют доступ к разделяемому словарю.
Используйте coder.dictionary.move
функция, чтобы переместить определения от файла исходной модели до словаря разделяемых данных.
Чтобы переместить отдельные определения, в диалоговом окне Embedded Coder Dictionary, используют кнопки Cut и Paste на панели быстрого доступа.
Опционально, скопируйте редактор Отображений Кода настройки от исходной модели до других моделей при помощи программируемого интерфейса редактора Отображений Кода (см., Конфигурируют программно Данные По умолчанию и Функциональную Генерацию кода).
В этом примере вы преобразуете подсистему в модель, на которую ссылаются. Затем вы создаете класс памяти в Словаре Embedded Coder топ-модели и используете класс памяти в редакторе Отображений Кода. Чтобы использовать тот же редактор Отображений Кода настройки для топ-модели и для модели, на которую ссылаются, необходимо извлечь класс памяти в словарь разделяемых данных (.sldd
).
Откройте модель rtwdemo_roll
в качестве примера.
rtwdemo_roll
В модели щелкните правой кнопкой по BasicRollMode
подсистема и выбирает Subsystem & Model Reference> Convert to> Referenced Model.
Нажмите Convert.
Новая модель, на которую ссылаются, BasicRollMode
, открывается. Файл модели находится в вашей текущей папке.
В топ-модели rtwdemo_roll
, кликните по вкладке C Code. Если панель инструментов не показывает вкладку C Code, открывает приложение Embedded Coder.
Нажмите Code Interface> Embedded Coder Dictionary.
В диалоговом окне Embedded Coder Dictionary, на вкладке Storage Classes, нажимают Add.
Для нового класса памяти, набор эти значения свойств:
Name к internalsInFile
.
Header File к $R_internal.h
.
Definition File к $R_internal.c
.
В модели, в редакторе Отображений Кода, для Data Defaults> строка Signals, states, and internal data, устанавливает Storage Class на internalsInFile
.
Модель, на которую ссылаются, не может получить доступ к определениям генерации кода в Словаре Embedded Coder родительской модели. Теперь переместите класс памяти из родительской модели и в словарь разделяемых данных.
Как лучшая практика, соедините каждую модель с отдельным словарем данных (.sldd
), создайте разделяемый, автономный словарь данных, чтобы сохранить определение генерации кода (класс памяти) и сконфигурировать ссылку словаря так, чтобы все модели могли использовать определение генерации кода.
Соединять модели, чтобы разделить словари:
В rtwdemo_roll
, на вкладке Modeling, в галерее Design, нажимают Link to Data Dictionary.
В диалоговом окне Model Properties нажмите New.
Используйте Создавание нового диалогового окна Data Dictionary, чтобы создать словарь под названием rtwdemo_roll_data.sldd
.
В диалоговом окне Model Properties нажмите OK.
В диалоговом окне Link Model to Data Dictionary нажмите Change this model only.
В BasicRollMode
модель, используйте диалоговое окно Model Properties, чтобы соединить модель с новым словарем данных под названием basicRollMode_data.sldd
.
Нажатие кнопки, OK.
Создать разделяемый, автономный словарь и сохранить определение генерации кода в нем:
В обеих моделях откройте словарь в Model Explorer. В нижнем левом углу блок-схемы кликните по значку данных модели, затем щелкните по ссылке External Data. Под узлом External Data выберите словарь.
В Model Explorer выберите File> New> Data Dictionary.
Создайте словарь данных под названием coderDefs.sldd
.
В панели Model Hierarchy Model Explorer выберите узел rtwdemo_roll_data.
В Диалоговой панели (правая панель), под Referenced Dictionaries, нажимают Add.
Добавьте ссылку на coderDefs.sldd
.
Сконфигурируйте basicRollMode_data.sldd
относиться к coderDefs.sldd
.
В панели Model Hierarchy щелкните правой кнопкой по узлу rtwdemo_roll_data и выберите Save Changes.
В командной строке переместите определения генерации кода от rtwdemo_roll
файл модели к coderDefs.sldd
словарь данных.
coder.dictionary.move('rtwdemo_roll','coderDefs.sldd');
Теперь обе модели имеют доступ к классу памяти internalsInFile
.
Новая модель, на которую ссылаются, не использует редактор Отображений Кода настройки, которые использует родительская модель. Чтобы скопировать настройки от родительской модели до модели, на которую ссылаются, используйте программируемый интерфейс редактора Отображений Кода.
В командной строке скопируйте установку класса памяти для Signals, states, and internal data от rtwdemo_roll
к BasicRollMode
.
roll_mapping = coder.mapping.api.get('rtwdemo_roll'); roll_sc = getDataDefault(roll_mapping,'InternalData','StorageClass'); mode_mapping = coder.mapping.api.get('BasicRollMode'); setDataDefault(mode_mapping,'InternalData','StorageClass',roll_sc);
Теперь обе модели используют тот же редактор Отображений Кода настройки. Для получения дополнительной информации о программируемом интерфейсе редактора Отображений Кода, смотрите, Конфигурируют программно Данные По умолчанию и Функциональную Генерацию кода.
Словарь данных Simulink может сохранить данные проектирования, такие как переменные MATLAB и Simulink.AliasType
объекты (см. Глобальную переменную и Разделяемые данные: Словарь Данных). Однако миграция данных проектирования большой модели или многоуровневых моделей от базового рабочего пространства до словаря данных может занять время и тщательное планирование.
Если вы хотите сохранить совместно использованные определения генерации кода в словаре данных, но не хотите перемещать данные проектирования модели, в диалоговом окне Model Properties, на вкладке External Data, выберите свойство Enable model access to base workspace. Модель может использовать данные проектирования от базового рабочего пространства и определения генерации кода из словаря или из словаря, на который ссылаются. Для получения дополнительной информации смотрите, Продолжают Использовать Разделяемые данные в Базовом рабочем пространстве.