Разверните определения генерации кода

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

В крупной организации с многоуровневыми моделями и пользователями, можно совместно использовать определения генерации кода путем хранения их во взаимно доступном месте. Процесс совместного использования определений кода называется deployment.

Совместно используйте определения генерации кода между многоуровневыми моделями и пользователями

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

  • Когда вы создаете определения в пакете при помощи Custom Storage Class Designer, для каждого пользователя, помещаете папку, содержащую папку пакета на пути MATLAB®. Для получения дополнительной информации смотрите то, Что Путь поиска файлов MATLAB?.

  • Когда вы создаете определения в Словаре Embedded Coder, храните определения в словаре данных Simulink®. Затем соедините каждую модель с отдельным словарем данных. Сконфигурируйте каждый отдельный словарь, чтобы обратиться к словарю, который содержит определения генерации кода. Для примера см. Словарное определение Embedded Coder Доли Между Моделями.

Использование словаря для моделей, созданных с различными версиями Simulink

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

  • Вы соединяете модель со словарем данных, который был сохранен в предыдущей версии Simulink (например, вы соединяете модель, которую вы разрабатываете в R2018b со словарем, сохраненным в R2018a).

  • Вы открываете модель, которая имеет локальный Словарь Embedded Coder в версии Simulink, который является более старым, чем текущая версия (например, вы разработали модель, которая использует локальный словарь в R2018a, и вы открываете ту модель в R2018b, чтобы продолжить разработку).

У вас также есть опция, чтобы экспортировать (сохраняют) Словарь Embedded Coder для использования с моделями, созданными с различной версией (предыдущий или более старый) генератора кода.

Для получения дополнительной информации смотрите Использование Словаря для Моделей, Созданных с Различными Версиями Simulink.

Сконфигурируйте отображение кода по умолчанию в разделяемом словаре

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

  1. Если не уже заданный, задайте определения кода (классы памяти, функциональные шаблоны настройки и разделы памяти) в словаре данных. В данном примере вы задаете определения кода в словаре данных exSharedCodeDefs.sldd. Поместите копию этого файла в writeable месте.

  2. В панели Current Folder командного окна MATLAB дважды кликните имя файла своей копии exSharedCodeDefs.sldd.

  3. В панели Model Hierarchy Model Explorer щелкните правой кнопкой по узлу словаря и выберите Show Empty Sections. Model Explorer перечисляет узлы для Design Data, Configurations, Embedded Coder Dictionary и Other data.

  4. Откройте Словарь Embedded Coder. В панели Model Hierarchy нажмите Embedded Coder Dictionary. Затем на правой панели нажмите Open Embedded Coder Dictionary.

  5. В диалоговом окне Embedded Coder Dictionary нажмите Configure Defaults.

  6. В диалоговом окне 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.

  7. Примените свои изменения и закройте диалоговое окно. Нажмите Apply. Затем нажмите OK.

  8. Закройте словарь Embedded Coder и Model Explorer.

Совместно используйте словарное определение Embedded Coder между моделями

В этом примере показано, как создать класс памяти, который дает к отдельным глобальным переменным в сгенерированном коде, и совместно используйте класс памяти между двумя моделями, 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.

Создайте определение генерации кода в автономном словаре данных

Создайте словарь данных. Затем создайте класс памяти в словаре.

  1. В командной строке откройте Model Explorer.

    daexplr

  2. В Model Explorer выберите File> New> Data Dictionary.

  3. Назовите словарь coderDefs.sldd.

  4. В панели Model Hierarchy Model Explorer щелкните правой кнопкой по coderDefs и выберите Show Empty Sections.

  5. Выберите узел Embedded Coder Dictionary.

  6. В Диалоговой панели (правая панель), нажмите Open Embedded Coder Dictionary.

  7. В диалоговом окне Embedded Coder Dictionary нажмите Add.

  8. Для нового класса памяти, в панели Property Inspector, устанавливает Name на internalsInFile.

  9. В панели Model Hierarchy Model Explorer щелкните правой кнопкой по coderDefs и выберите Save Changes.

Соедините модели со словарями данных

Соедините каждую модель с отдельным словарем данных. Сконфигурируйте каждый словарь, чтобы обратиться к автономному словарю (coderDefs.sldd).

  1. Откройте модели.

    rtwdemo_configinterface
    rtwdemo_roll

  2. В rtwdemo_roll, на вкладке Modeling, в галерее Design, нажимают Link to Data Dictionary.

  3. В диалоговом окне Model Properties нажмите New.

  4. Создайте словарь под названием rtwdemo_roll_data.sldd при помощи Создавания нового диалогового окна Data Dictionary.

  5. В диалоговом окне Model Properties нажмите OK.

    Simulink соединяет модель с новым словарем. Словарь не содержит данных, потому что модель не использует данные в базовом рабочем пространстве.

  6. Откройте словарь в Model Explorer. В нижнем левом углу модели кликните по значку данных модели, затем щелкните по ссылке External Data. Под узлом External Data выберите rtwdemo_roll_data.sldd.

  7. В Диалоговой панели, под Referenced Dictionaries, нажимают Add.

  8. В диалоговом окне Open Data Dictionary дважды кликните coderDefs.sldd.

  9. Используйте панель Model Hierarchy, чтобы сохранить изменения, которые вы внесли в rtwdemo_roll_data.sldd.

  10. Соедините rtwdemo_configinterface к словарю под названием rtwdemo_configinterface_data.sldd.

    rtwdemo_configinterface использует переменную в базовом рабочем пространстве. Чтобы переместить переменную в словарь, в диалоговом окне Model Properties, нажимают Migrate data. Затем следуйте инструкциям, чтобы соединить модель со словарем и скопировать переменные, на которые ссылаются.

  11. Сконфигурируйте rtwdemo_configinterface_data.sldd относиться к coderDefs.sldd.

Примените определение генерации кода в моделях

Подтвердите, что разделяемое определение доступно для использования в моделях путем применения его как настройки по умолчанию для внутренних данных и осмотра сгенерированного кода.

  1. В rtwdemo_roll, кликните по вкладке C Code. Если панель инструментов не показывает вкладку C Code, открывает приложение Embedded Coder.

  2. Под Code Mappings> Data Defaults, для строки Signals, states, and internal data, установил Storage Class на internalsInFile.

  3. В rtwdemo_configinterface, используйте редактор Отображений Кода, чтобы установить Storage Class на internalsInFile для строки Signals, states, and internal data.

  4. Сгенерируйте код от rtwdemo_roll.

  5. В представлении 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;

  6. Опционально, сгенерируйте код от rtwdemo_configinterface и подтвердите, что код появляется как ожидалось.

Переместите определения от файла модели до словаря разделяемых данных

Если вы создаете определения генерации кода в Словаре Embedded Coder модели, определения хранятся в файле модели. Если вы хотите совместно использовать определения между моделями:

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

  2. Используйте coder.dictionary.move функция, чтобы переместить определения от файла исходной модели до словаря разделяемых данных.

    Чтобы переместить отдельные определения, в диалоговом окне Embedded Coder Dictionary, используют кнопки Cut и Paste на панели быстрого доступа.

  3. Опционально, скопируйте редактор Отображений Кода настройки от исходной модели до других моделей при помощи программируемого интерфейса редактора Отображений Кода (см., Конфигурируют программно Данные По умолчанию и Функциональную Генерацию кода).

В этом примере вы преобразуете подсистему в модель, на которую ссылаются. Затем вы создаете класс памяти в Словаре Embedded Coder топ-модели и используете класс памяти в редакторе Отображений Кода. Чтобы использовать тот же редактор Отображений Кода настройки для топ-модели и для модели, на которую ссылаются, необходимо извлечь класс памяти в словарь разделяемых данных (.sldd).

Создайте модель, на которую ссылаются,

  1. Откройте модель rtwdemo_roll в качестве примера.

    rtwdemo_roll

  2. В модели щелкните правой кнопкой по BasicRollMode подсистема и выбирает Subsystem & Model Reference> Convert to> Referenced Model.

  3. Нажмите Convert.

    Новая модель, на которую ссылаются, BasicRollMode, открывается. Файл модели находится в вашей текущей папке.

Создайте и примените класс памяти

  1. В топ-модели rtwdemo_roll, кликните по вкладке C Code. Если панель инструментов не показывает вкладку C Code, открывает приложение Embedded Coder.

  2. Нажмите Code Interface> Embedded Coder Dictionary.

  3. В диалоговом окне Embedded Coder Dictionary, на вкладке Storage Classes, нажимают Add.

  4. Для нового класса памяти, набор эти значения свойств:

    • Name к internalsInFile.

    • Header File к $R_internal.h.

    • Definition File к $R_internal.c.

  5. В модели, в редакторе Отображений Кода, для Data Defaults> строка Signals, states, and internal data, устанавливает Storage Class на internalsInFile.

Модель, на которую ссылаются, не может получить доступ к определениям генерации кода в Словаре Embedded Coder родительской модели. Теперь переместите класс памяти из родительской модели и в словарь разделяемых данных.

Переместите класс памяти в словарь разделяемых данных

Как лучшая практика, соедините каждую модель с отдельным словарем данных (.sldd), создайте разделяемый, автономный словарь данных, чтобы сохранить определение генерации кода (класс памяти) и сконфигурировать ссылку словаря так, чтобы все модели могли использовать определение генерации кода.

Соединять модели, чтобы разделить словари:

  1. В rtwdemo_roll, на вкладке Modeling, в галерее Design, нажимают Link to Data Dictionary.

  2. В диалоговом окне Model Properties нажмите New.

  3. Используйте Создавание нового диалогового окна Data Dictionary, чтобы создать словарь под названием rtwdemo_roll_data.sldd.

  4. В диалоговом окне Model Properties нажмите OK.

  5. В диалоговом окне Link Model to Data Dictionary нажмите Change this model only.

  6. В BasicRollMode модель, используйте диалоговое окно Model Properties, чтобы соединить модель с новым словарем данных под названием basicRollMode_data.sldd.

  7. Нажатие кнопки, OK.

Создать разделяемый, автономный словарь и сохранить определение генерации кода в нем:

  1. В обеих моделях откройте словарь в Model Explorer. В нижнем левом углу блок-схемы кликните по значку данных модели, затем щелкните по ссылке External Data. Под узлом External Data выберите словарь.

  2. В Model Explorer выберите File> New> Data Dictionary.

  3. Создайте словарь данных под названием coderDefs.sldd.

  4. В панели Model Hierarchy Model Explorer выберите узел rtwdemo_roll_data.

  5. В Диалоговой панели (правая панель), под Referenced Dictionaries, нажимают Add.

  6. Добавьте ссылку на coderDefs.sldd.

  7. Сконфигурируйте basicRollMode_data.sldd относиться к coderDefs.sldd.

  8. В панели Model Hierarchy щелкните правой кнопкой по узлу rtwdemo_roll_data и выберите Save Changes.

  9. В командной строке переместите определения генерации кода от 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. Модель может использовать данные проектирования от базового рабочего пространства и определения генерации кода из словаря или из словаря, на который ссылаются. Для получения дополнительной информации смотрите, Продолжают Использовать Разделяемые данные в Базовом рабочем пространстве.

Смотрите также

Похожие темы