Как описано в Задают Классы памяти, Разделы Памяти и Шаблоны функций для Программной архитектуры, можно создать определения генерации кода, что вы и другие пользователи можете обратиться к элементам модели, таким как данные и функции. Определения кода управляют внешним видом тех элементов в сгенерированном коде.
В крупной организации с многоуровневыми моделями и пользователями, можно совместно использовать определения генерации кода путем хранения их во взаимно доступном месте. Процесс совместного использования определений кода называется deployment.
Когда вы создаете определения генерации пользовательского кода, чтобы совместно использовать определения между моделями и другими пользователями:
Когда вы создаете определения в пакете при помощи Custom Storage Class Designer, для каждого пользователя, помещаете папку, содержащую папку пакета на пути MATLAB®. Для получения дополнительной информации смотрите то, Что Путь поиска файлов 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 (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 | Входные порты корневого уровня модели. |
Выходные порты | Выходные порты корневого уровня модели. |
Параметры модели | Параметры, которые заданы в модели, такой как параметры в рабочем пространстве модели. Исключает аргументы модели. |
Аргументы параметра модели | Параметры блоков в рабочем пространстве модели, которое вы конфигурируете в качестве аргументов модели. Эти параметры отсоединены в блоке модели, чтобы позволить каждому экземпляру модели ввести свое собственное значение. Чтобы задать параметр в качестве аргумента модели, установите флажок Model Data Editor + Parameters + Argument. |
Внешние объекты параметра | Параметры, которые вы задаете как объекты в базовом рабочем пространстве или в словаре данных. Многоуровневые модели в приложении могут использовать эти параметры. |
Разделяемые локальные хранилища данных | Data Store Memory блокирует с параметрами блоков установленный Share across model instances. Эти хранилища данных доступны только в модели, где они заданы. Значение хранилища данных совместно используется через экземпляры модели. |
Хранилища глобальных данных | Хранилища данных, которые заданы объектом сигнала в базовом рабочем пространстве или в словаре данных. Многоуровневые модели в приложении могут использовать эти хранилища данных. |
Внутренние данные | Локальные данные, такие как хранилища данных, дискретные состояния блока, блокируют выходные сигналы и сигналы пересечения нулем. |
Константы | Блок постоянного значения выход и постоянные параметры в модели. |
На вкладке Function Defaults сконфигурируйте функциональный шаблон настройки и, если применимо, раздел memory, для этих категорий функций:
Функциональная категория модели | Описание |
---|---|
Инициализировать/Отключить | Точка входа функционирует для инициализации и завершения |
Выполнение | Точка входа функционирует для того, чтобы инициировать выполнение и сброс |
Разделяемая утилита | Разделяемые служебные функции |
Отображение значения по умолчанию для категории применяется к элементам в категории в модели.
В данном примере установите класс памяти для категорий данных Inports, Outports и Global data stores к ExportedGlobal
.
Примените свои изменения и закройте диалоговое окно. Нажмите Apply. Затем нажмите OK.
Закройте словарь Embedded Coder и Model Explorer.
В этом примере показано, как создать класс памяти, который дает к отдельным глобальным переменным в сгенерированном коде, и совместно используйте класс памяти между двумя моделями, rtwdemo_roll
и rtwdemo_advsc
. Затем вы конфигурируете каждую модель, чтобы использовать класс памяти в качестве настройки генерации кода по умолчанию для внутренних данных, которые включают состояния блока.
Это - лучшая практика сохранить совместно использованные определения генерации кода в автономном словаре данных, что означает, что никакие модели не соединены непосредственно со словарем. Затем можно соединить целевые модели с одним или несколькими дополнительными, промежуточными словарями, которые вы конфигурируете, чтобы обратиться к автономному словарю. С этой модульной иерархией словаря каждая модель может хранить другие данные, такие как данные проектирования, отдельно из определений генерации кода.
Рисунок показывает иерархию словаря в качестве примера. В фигуре:
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.
В панели Model Hierarchy выберите узел 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_advsc 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. В нижнем левом углу модели кликните по значку данных модели, затем щелкните по ссылке Data Dictionary.
В Диалоговой панели, под Referenced Dictionaries, нажимают Add.
В диалоговом окне Open Data Dictionary дважды кликните coderDefs.sldd
.
Используйте панель Model Hierarchy, чтобы сохранить изменения, которые вы внесли в rtwdemo_roll_data.sldd
.
Соедините rtwdemo_advsc
к словарю под названием rtwdemo_advsc_data.sldd
.
rtwdemo_advsc
использует переменную в базовом рабочем пространстве. Чтобы переместить переменную в словарь, в диалоговом окне Model Properties, нажимают Migrate data. Затем следуйте инструкциям, чтобы соединить модель со словарем и скопировать переменные, на которые ссылаются.
Сконфигурируйте rtwdemo_advsc_data.sldd
относиться к coderDefs.sldd
.
Подтвердите, что разделяемое определение доступно для использования в моделях путем применения его как настройки по умолчанию для внутренних данных и осмотра сгенерированного кода.
В rtwdemo_roll
, кликните по вкладке C Code. Если панель инструментов не показывает вкладку C Code, открывает приложение Embedded Coder.
Под Code Mappings> Data Defaults, для строки Internal data, установил Storage Class на internalsInFile
.
В rtwdemo_advsc
, используйте перспективу Кода, чтобы установить Storage Class на internalsInFile
для строки 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_advsc
и подтвердите, что код появляется как ожидалось.
Если вы создаете определения генерации кода в Словаре Embedded Coder модели, определения хранятся в файле модели. Если вы хотите совместно использовать определения между моделями:
Создайте словарь разделяемых данных как показано в Словарном определении Embedded Coder Доли Между Моделями. Прежде чем вы перейдете к следующему шагу, убедитесь, что все целевые модели имеют доступ к разделяемому словарю.
Используйте coder.dictionary.move
функция, чтобы переместить определения от файла исходной модели до словаря разделяемых данных.
Чтобы переместить отдельные определения, в диалоговом окне Embedded Coder Dictionary, используют кнопки Cut и Paste на панели быстрого доступа.
Опционально, скопируйте редактор Отображений Кода настройки от исходной модели до других моделей при помощи программируемого интерфейса редактора Отображений Кода (см., Конфигурируют программно Данные По умолчанию и Функциональную Генерацию кода).
В этом примере вы создаете класс памяти в Словаре Embedded Coder модели и используете класс памяти в редакторе Отображений Кода. Затем вы преобразуете подсистему в модель, на которую ссылаются. Чтобы использовать тот же редактор Отображений Кода настройки в первой модели и в модели, на которую ссылаются, необходимо извлечь класс памяти в словарь разделяемых данных (.sldd
).
Откройте модель rtwdemo_roll
в качестве примера.
rtwdemo_roll
Кликните по вкладке C Code. Если панель инструментов не показывает вкладку C Code, открывает приложение Embedded Coder.
Под блок-схемой, в редакторе Отображений Кода, нажимают кнопку Embedded Coder Dictionary.
В диалоговом окне Embedded Coder Dictionary, на вкладке Storage Classes, нажимают Add.
Для нового класса памяти, набор эти значения свойств:
Name к internalsInFile
.
Header File к $R_internal.h
.
Definition File к $R_internal.c
.
В модели, в редакторе Отображений Кода, для Data Defaults> строка Internal data, устанавливает Storage Class на internalsInFile
.
В модели щелкните правой кнопкой по BasicRollMode
подсистема и выбирает Subsystem & Model Reference> Convert to> Referenced Model.
В Советнике по вопросам Преобразования Модели - ссылки нажмите Convert.
Новая модель, на которую ссылаются, BasicRollMode
, открывается. Файл модели находится в вашей текущей папке.
По умолчанию модель, на которую ссылаются, не может получить доступ к определениям генерации кода в Словаре 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. В нижнем левом углу блок-схемы кликните по значку данных модели, затем щелкните по ссылке Data Dictionary.
В 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
.
По умолчанию новая модель, на которую ссылаются, не использует редактор Отображений Кода настройки, которые использует родительская модель. Чтобы скопировать настройки от родительской модели до модели, на которую ссылаются, используйте программируемый интерфейс редактора Отображений Кода.
В командной строке скопируйте установку класса памяти для Internal data от rtwdemo_roll
к BasicRollMode
.
roll_sc = coder.mapping.defaults.get('rtwdemo_roll','InternalData','StorageClass'); coder.mapping.create('BasicRollMode'); coder.mapping.defaults.set('BasicRollMode','InternalData','StorageClass',roll_sc);
Теперь обе модели используют тот же редактор Отображений Кода настройки. Для получения дополнительной информации о программируемом интерфейсе редактора Отображений Кода, смотрите, Конфигурируют программно Данные По умолчанию и Функциональную Генерацию кода.
Модель, которую вы создаете из начальной страницы Simulink или при помощи new_system
функция не соединяется со словарем данных Simulink. Новая модель не может определения генерации кода доступа, которые вы храните в словаре данных.
Чтобы сделать определения кода доступными для новой модели из поля, запишите коллбэки и другой код, который сразу соединяет модель со словарем данных.
Для простого примера, который показывает, как соединить модель со словарем данных программно и для получения информации о конфигурировании программно ссылки словаря, смотрите, Хранят Данные в Словаре Программно (Simulink).
Если вы используете проект, рассматриваете создание ярлыка проекта, который создает модель и сразу соединяет новую модель со словарем данных. Для получения информации о проектах и ярлыках проекта, смотрите то, Что Проекты? (Simulink).
Словарь данных Simulink может сохранить данные проектирования, такие как переменные MATLAB и Simulink.AliasType
объекты (см. Глобальную переменную и Разделяемые данные: Словарь Данных (Simulink)). Однако миграция данных проектирования большой модели или многоуровневых моделей от базового рабочего пространства до словаря данных может занять время и тщательное планирование.
Если вы хотите сохранить совместно использованные определения генерации кода в словаре данных, но не хотите перемещать данные проектирования модели, в диалоговом окне Model Properties, на вкладке Data, выберите свойство Enable access to base workspace. Модель может использовать данные проектирования от базового рабочего пространства и определения генерации кода из словаря или из словаря, на который ссылаются. Для получения дополнительной информации смотрите, Продолжают Использовать Разделяемые данные в Базовом рабочем пространстве (Simulink).
В иерархии словарей справочных данных (см., что Словарь Ссылается (Simulink)), только один словарь может сохранить определения генерации кода в Словаре Embedded Coder. Когда вы открываете перспективу Кода в модели, которая имеет доступ к нескольким Словарям Embedded Coder через словари справочных данных, Simulink генерирует ошибку. Чтобы разрешить ошибку, используйте coder.dictionary.move
и coder.dictionary.remove
чтобы передать и удалить Словари Embedded Coder до, только один существует в иерархии словаря. При необходимости сохраните Словарь Embedded Coder в автономном, словарь разделяемых данных как описано в Словарном определении Embedded Coder Доли Между Моделями.