Как описано в Задают Классы памяти, Разделы Памяти и Шаблоны функций для Программной архитектуры, можно создать определения генерации кода, что вы и другие пользователи можете обратиться к элементам модели, таким как данные и функции. Определения кода управляют внешним видом тех элементов в сгенерированном коде.
В крупной организации с многоуровневыми моделями и пользователями, можно совместно использовать определения генерации кода путем хранения их во взаимно доступном месте. Процесс совместного использования определений кода называется 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 | Входные порты корневого уровня модели. |
Выходные порты | Выходные порты корневого уровня модели. |
Глобальные параметры | Параметры, которые заданы в базовом рабочем пространстве или в словаре данных. Многоуровневые модели в приложении могут использовать эти параметры. |
Локальные параметры | Параметры, которые заданы в модели, такой как параметры в рабочем пространстве модели. Исключает образцовые аргументы. |
Аргументы параметра | Параметры блоков в рабочем пространстве модели, которые сконфигурированы в качестве образцовых аргументов. Эти параметры представлены в блоке модели, чтобы позволить каждому образцовому экземпляру обеспечивать свое собственное значение. Чтобы задать параметр в качестве образцового аргумента, установите флажок Argument на вкладке Parameters в Model Data Editor. |
Разделяемые локальные хранилища данных | Блоки памяти Хранилища данных с параметрами блоков 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
выберите File> Model Properties> Link to Data Dictionary.
В диалоговом окне Model Properties нажмите New.
Создайте словарь под названием rtwdemo_roll_data.sldd
при помощи Создавания нового диалогового окна Data Dictionary.
В диалоговом окне Model Properties нажмите OK.
Simulink соединяет модель с новым словарем. Словарь не содержит данных, потому что модель не использует данные в базовом рабочем пространстве.
В нижнем левом углу модели кликните по значку словаря данных, который открывает словарь в Model Explorer.
В Диалоговой панели, под 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
выберите Code> C/C++ Code> Configure Model in Code Perspective.
Под 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 модели и используете класс памяти в редакторе Отображений Кода. Затем вы преобразовываете подсистему в модель, на которую ссылаются. Чтобы использовать тот же редактор Отображений Кода настройки для первой модели и для модели, на которую ссылаются, необходимо извлечь класс памяти в словарь разделяемых данных (.sldd
).
Откройте модель rtwdemo_roll
в качестве примера.
rtwdemo_roll
В модели выберите Code> C/C++ Code> Configure Model in Code Perspective.
Под блок-схемой, в редакторе Отображений Кода, нажимают кнопку 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
выберите File> Model Properties> 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.
В 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 Доли Между Моделями.