exponenta event banner

Развернуть определения создания кода

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

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

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

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

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

  • При создании определений в словаре встроенного кодера сохраните определения в словаре данных Simulink ®. Затем свяжите каждую модель с отдельным словарем данных. Настройте каждый отдельный словарь для обращения к словарю, содержащему определения генерации кода. Пример см. в разделе Совместное определение словаря встроенного кодера между моделями.

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

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

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

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

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

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

Настройка сопоставления кода по умолчанию в общем словаре

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

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

  2. На панели «Текущая папка» окна команд MATLAB дважды щелкните имя файла копии exSharedCodeDefs.sldd.

  3. На панели «Иерархия моделей» Обозревателя моделей щелкните правой кнопкой мыши узел словаря и выберите «Показать пустые разделы». В обозревателе моделей перечислены узлы для конструкторских данных, конфигураций, словаря встроенного кодера и других данных.

  4. Откройте словарь встроенного кодера. На панели «Иерархия моделей» выберите «Embedded Coder Dictionary». Затем на правой панели щелкните Открыть словарь встроенного кодера.

  5. В диалоговом окне «Embedded Coder Dictionary» выберите «Configure Defaults».

  6. В диалоговом окне «Настройка параметров словаря по умолчанию» настройте определения кодов по умолчанию для категорий данных и функций.

    • На вкладке Значения по умолчанию настройте класс хранения и, если применимо, раздел памяти для следующих категорий данных:

      Категория элементов моделиОписание
      InportsВходные порты корневого уровня модели, такие как блоки Inport и In Bus Element.
      Вспомогательные портыВыходные порты корневого уровня модели, такие как блоки Outport и Out Bus Element.
      Сигналы, состояния и внутренние данныеЭлементы данных, являющиеся внутренними для модели, такие как выходные сигналы блоков, состояния дискретных блоков, хранилища данных и сигналы пересечения нулей.
      Общие локальные хранилища данныхБлоки памяти хранилища данных, для которых установлен параметр блока Общий доступ для экземпляров модели. Эти хранилища данных доступны только в той модели, где они определены. Значение хранилища данных является общим для всех экземпляров модели.
      Глобальные хранилища данныхХранилища данных, определяемые сигнальным объектом в базовой рабочей области или в словаре данных. Эти хранилища данных могут использоваться несколькими моделями в приложении. Чтобы просмотреть и настроить эти хранилища данных в редакторе сопоставлений кодов, нажмите кнопку Refresh ссылка справа от имени категории. Если щелкнуть эту ссылку, будет обновлена схема модели.
      Аргументы параметра моделиПараметры в рабочей области модели, настраиваемые как аргументы модели. Эти параметры отображаются в блоке модели, чтобы каждый экземпляр модели мог предоставить свое собственное значение. Чтобы задать параметр в качестве аргумента модели, установите флажок Редактор данных модели > Параметры > Аргумент.
      Параметры моделиПараметры, определенные в модели, такие как параметры в рабочем пространстве модели. Исключает аргументы модели.
      Внешние параметрыПараметры, определяемые как объекты в базовой рабочей области или в словаре данных. Эти параметры могут использоваться несколькими моделями в приложении. Чтобы просмотреть и настроить эти параметры в редакторе сопоставлений кодов, нажмите кнопку Refresh ссылка справа от имени категории. Если щелкнуть эту ссылку, будет обновлена схема модели.
      Константы

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

      • Значение массива больше порогового значения разгрузки цикла.

      • В коде необходим адрес значения.

    • На вкладке Параметры функции настройте шаблон настройки функции и, если применимо, раздел памяти для следующих категорий функций:

      Тип функции моделиОписание
      Инициализация/завершениеФункции начального уровня для инициализации и завершения
      ВыполнениеФункции начального уровня для инициирования выполнения и сброса
      Общая утилитаОбщие служебные функции

    Сопоставление по умолчанию для категории применяется к элементам в категории по всей модели.

    В этом примере задайте класс хранения для категорий данных Inports, Outports и Global data stores равным ExportedGlobal.

  7. Примените изменения и закройте диалоговое окно. Нажмите кнопку «Применить». Затем нажмите кнопку ОК.

  8. Закройте словарь встроенного кодера и обозреватель моделей.

Обмен определением словаря встроенного кодера между моделями

В этом примере показано, как создать класс хранения, который дает отдельные глобальные переменные в сгенерированном коде и совместно использует класс хранения между двумя моделями. rtwdemo_roll и rtwdemo_configinterface. Затем каждая модель настраивается для использования класса хранения в качестве настройки генерации кода по умолчанию для внутренних данных, которая включает состояния блоков.

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

В иерархии словарей данных, на которые имеются ссылки (см. Словарная ссылка), только один словарь может хранить определения генерации кода в словаре встроенного кодера. Если модель имеет доступ к нескольким словарям встроенного кодера через словари данных, на которые имеются ссылки, используйте функции coder.dictionary.move и coder.dictionary.remove для переноса и удаления словарей встроенного кодера до тех пор, пока в иерархии словарей не появится только один словарь.

На рисунке показан пример иерархии словарей. На рисунке:

  • modelOne.slx и modelTwo.slx разные файлы модели.

  • dataForModelOne.sldd и dataForModelTwo.sldd являются словарями данных. В каждом словаре хранятся конструктивные данные, например числовые переменные MATLAB, для одной из моделей.

  • coderDefs.sldd - общий словарь данных, в котором хранятся определения генерации кода для обеих моделей. Другие словари ссылаются coderDefs.sldd.

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

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

  1. В командной строке откройте Обозреватель моделей.

    daexplr

  2. В обозревателе моделей выберите «Файл» > «Создать» > «Словарь данных».

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

  4. На панели «Иерархия моделей» обозревателя моделей щелкните правой кнопкой мыши. coderDefs и выберите «Показать пустые разделы».

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

  6. На панели «Диалоговое окно» (правая панель) выберите «Открыть словарь встроенного кодера».

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

  8. Для нового класса хранения на панели «Инспектор свойств» задайте для параметра «Имя» значение internalsInFile.

  9. На панели «Иерархия моделей» обозревателя моделей щелкните правой кнопкой мыши. coderDefs и выберите Сохранить изменения.

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

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

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

    rtwdemo_configinterface
    rtwdemo_roll

  2. В rtwdemo_rollна вкладке «Моделирование» в коллекции «Дизайн» выберите «Связать со словарем данных».

  3. В диалоговом окне Свойства модели (Model Properties) нажмите кнопку Создать (New).

  4. Создание словаря с именем rtwdemo_roll_data.sldd с помощью диалогового окна Создание нового словаря данных.

  5. В диалоговом окне Свойства модели (Model Properties) нажмите кнопку ОК.

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

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

  7. В диалоговом окне в разделе Словари ссылок нажмите кнопку Добавить.

  8. В диалоговом окне «Открыть словарь данных» дважды щелкните coderDefs.sldd.

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

  10. Связь rtwdemo_configinterface в словарь с именем rtwdemo_configinterface_data.sldd.

    rtwdemo_configinterface использует переменную в базовой рабочей области. Чтобы перенести переменную в словарь, в диалоговом окне «Свойства модели» нажмите кнопку «Перенести данные». Затем следуйте инструкциям, чтобы связать модель со словарем и скопировать ссылочные переменные.

  11. Настроить rtwdemo_configinterface_data.sldd см. coderDefs.sldd.

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

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

  1. В rtwdemo_rollперейдите на вкладку «Код C». Если на панели инструментов отсутствует вкладка «Код C», откройте приложение «Внедренный кодер».

  2. В разделе Сопоставления кодов > Значения по умолчанию для строки Сигналы, состояния и внутренние данные установите Класс хранения в значение internalsInFile.

  3. В rtwdemo_configinterface, используйте редактор сопоставлений кодов, чтобы задать для класса хранения значение internalsInFile для строки сигналов, состояний и внутренних данных.

  4. Создать код из rtwdemo_roll.

  5. В представлении «Код» проверьте созданный файл. rtwdemo_roll.c. Файл определяет глобальные переменные, которые соответствуют данным состояния в модели, например состояние блока интегратора в BasicRollMode подсистема.

    /* Storage class 'internalsInFile' */
    real32_T rtwdemo__FixPtUnitDelay1_DSTATE;
    real32_T rtwdemo_roll_Integrator_DSTATE;
    int8_T rtwde_Integrator_PrevResetState;

  6. При необходимости создайте код из rtwdemo_configinterface и подтвердите, что код отображается так, как ожидалось.

Перенос определений из файла модели в словарь общих данных

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

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

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

    Для переноса отдельных определений в диалоговом окне «Embedded Coder Dictionary» используйте кнопки «Cut» и «Paste» на панели быстрого доступа.

  3. При необходимости скопируйте настройки редактора сопоставлений кода из исходной модели в другие модели с помощью программного интерфейса редактора сопоставлений кода (см. раздел Программная настройка данных по умолчанию и создание кода функции).

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

Создание ссылочной модели

  1. Открыть пример модели rtwdemo_roll.

    rtwdemo_roll

  2. В модели щелкните правой кнопкой мыши значок BasicRollMode и выберите Подсистема & Ссылка на модель > Преобразовать в > Ссылочная модель.

  3. Щелкните Преобразовать (Convert).

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

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

  1. В верхней модели rtwdemo_rollперейдите на вкладку «Код C». Если на панели инструментов отсутствует вкладка «Код C», откройте приложение «Внедренный кодер».

  2. Щелкните Интерфейс кода > Embedded Coder Dictionary.

  3. В диалоговом окне «Embedded Coder Dictionary» на вкладке «Storage Classes» нажмите кнопку «Add».

  4. Для нового класса хранения установите следующие значения свойств:

    • Имя для internalsInFile.

    • Файл заголовка для $R_internal.h.

    • Файл определения для $R_internal.c.

  5. В модели в редакторе сопоставлений кодов для параметра «Данные по умолчанию» > «Сигналы, состояния и внутренняя строка данных» задайте для параметра «Класс хранения» значение internalsInFile.

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

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

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

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

  1. В rtwdemo_rollна вкладке «Моделирование» в коллекции «Дизайн» выберите «Связать со словарем данных».

  2. В диалоговом окне Свойства модели (Model Properties) нажмите кнопку Создать (New).

  3. Диалоговое окно «Создание нового словаря данных» используется для создания словаря с именем rtwdemo_roll_data.sldd.

  4. В диалоговом окне Свойства модели (Model Properties) нажмите кнопку ОК.

  5. В диалоговом окне «Связать модель с словарем данных» нажмите кнопку «Изменить только эту модель».

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

  7. Нажмите кнопку «OK».

Чтобы создать общий автономный словарь и сохранить в нем определение генерации кода:

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

  2. В обозревателе моделей выберите «Файл» > «Создать» > «Словарь данных».

  3. Создание словаря данных с именем coderDefs.sldd.

  4. На панели «Иерархия моделей» обозревателя моделей выберите узел rtwdemo_roll_data.

  5. На панели «Диалоговое окно» (правая панель) в разделе «Словари, на которые имеются ссылки» нажмите кнопку «Добавить».

  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.

Копировать параметры редактора сопоставлений кода из родительской модели в ссылочную модель

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

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

См. также

Связанные темы