exponenta event banner

Миграция конфигураций данных модели в сопоставления кода

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

При открытии модели, созданной в выпуске перед R2020b, Simulink ® переносит определения кода, указанные в модели, в сопоставления кода модели.

Последствия миграции

Для данных, настроенных в модели, процесс миграции заменяет существующие спецификации класса хранения эквивалентными сопоставлениями кода. Данные, сконфигурированные для генерации кода в модели, включают в себя данные, представленные следующим образом:

  • Блоки аутпорта

  • Сигнальные линии

  • Состояния блоков

  • Хранилища данных

  • Объекты параметров в рабочем пространстве модели

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

СостояниеРезультаты миграции
Модель - это библиотечная модель.Simulink отменяет конфигурацию кода, связанную с данными, настроенными в модели.
Элемент данных сконфигурирован для генерации кода в модели, и элемент данных связан с Simulink.CoderInfo объект, StorageClass свойство для этого объекта имеет значение Custom, и CustomStorageClass свойство имеет значение Default.Simulink изменяет настройку класса хранения с Custom (Default) кому ExportedGlobal и отображает предупреждение.

Модель использует объекты данных, настроенные для использования с TypeQualifier свойство класса хранения для встроенного класса хранения, например ExportedGlobal или ImportedExtern. Возможно, свойство было задано как:

  • CoderInfo.TypeQualifier свойство для объектов данных в рабочей области или словаре данных

  • Параметр порта RTWStorageTypeQualifier

  • Параметр блока RTWStateStorageTypeQualifier для блоков памяти хранилища данных, дискретного фильтра, дискретного состояния-пространства, интегратора дискретного времени, дискретного переноса Fcn, дискретного нулевого полюса и памяти

Simulink выдает предупреждение, указывающее, что свойство больше не поддерживается. Для достижения тех же результатов доступны и другие интерфейсы.
Модель использует Simulink.CoderInfo объект Alignment для данных, настроенных в модели.Simulink выдает предупреждение, указывающее, что свойство больше не поддерживается для данных модели. Свойство можно использовать для данных, хранящихся в базовой рабочей области или словаре данных.
Рабочее пространство модели для модели инициализируется из внешнего источника данных, например MAT-файла, файла MATLAB ® или словаря данных.Simulink перемещает конфигурацию кода для объекта параметра в сопоставления кода для этой модели.
Для отдельной подсистемы, из которой генерируются код и исполняемые программы, щелкнув правой кнопкой мыши блок Подсистема, можно настроить свойства класса хранения и класса хранения для входных и выходных сигналов подсистемы вне подсистемы. Сгенерированный код не включает переменные для входных и выходных данных интерфейса.

При выполнении этих операций может потребоваться выполнить следующие действия:

  • С помощью редактора Simulink можно скопировать линию блока в другую модель. Simulink не копирует информацию о конфигурации кода, связанную с скопированным элементом моделирования. Дополнительные сведения см. в разделе Копирование блоков и сигнальных линий между моделями (встроенный кодер).

  • Переключите настройку системного целевого файла для модели между системным целевым файлом на основе GRT и системным целевым файлом на основе ERT. Simulink игнорирует информацию о конфигурации кода для системного целевого файла исходной версии скопированной модели. Дополнительные сведения см. в разделе Переключение между целевыми системными файлами на основе GRT и ERT (встроенный кодер).

Рекомендации перед переносом

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

  • Данные, настроенные в библиотечной модели

  • Класс хранения TypeQualifier собственность

  • Выравнивание данных для генерации кода

  • Конфигурация кода для объектов параметров, инициализированных в рабочей области модели

  • Конфигурирование кода для интерфейса ввода-вывода подсистемы

Данные, настроенные в библиотечной модели

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

Чтобы избежать потери конфигурации кода для данных, настроенных в модели, в более ранней версии загрузите модель, создайте и запустите сценарий MATLAB, который:

  1. Загружает данные модели.

  2. Поиск данных, настроенных для создания кода в модели.

  3. Преобразует представление данных в объекты данных, хранящиеся во внешнем источнике, такие как MAT-файл, MATLAB-файл или словарь данных.

  4. Обновление модели для использования внешних объектов данных.

Класс хранения TypeQualifier Собственность

Если модель настраивает объекты данных со встроенными классами хранения, такими как ExportedGlobal и ImportedExtern, и использует класс хранения TypeQualifier при загрузке модели в выпуск R2020b или более позднюю версию Simulink выдает предупреждение. Чтобы исключить предупреждение и обновить модель для использования поддерживаемой альтернативы, в более ранней версии загрузите модель, создайте и запустите сценарий MATLAB, который:

  1. Загружает объекты данных модели из рабочего пространства модели, базового рабочего пространства или словаря данных.

  2. Поиск объектов данных с помощью TypeQualifier свойство имеет непустое строковое значение.

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

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

vars = who;

  for idx = 1:length(vars)
    thisVar = evalin('base',vars{idx});
    if (isa(thisVar,'Simulink.Parameter') && (isequal(thisVar.CoderInfo.TypeQualifier, 'const')))
      thisVar.CoderInfo.TypeQualifier = '';
      thisVar.CoderInfo.StorageClass = 'Custom';
      thisVar.CoderInfo.CustomStorageClass = 'Const';
    end
  end

Согласование данных для создания кода

Чтобы сохранить информацию о выравнивании данных, настроенную для модели, представляйте данные с объектами данных вне модели. Например, откройте модель в предыдущей версии Simulink и выполните действия, перечисленные в этой таблице.

Тип элемента данныхДействие
Объект-параметр в рабочем пространстве моделиИспользуйте Обозреватель моделей для перемещения объекта из рабочей области модели в базовую рабочую область или словарь данных. Затем задайте класс хранения и свойства выравнивания объекта. Сохраните модель.
Сигнальная линияОткройте диалоговое окно Signal Properties, укажите имя сигнала и выберите Must resolve to signal object (класс хранения должен быть Auto). Создать Simulink.Signal в базовой рабочей области или словаре данных и задайте класс хранения и свойства выравнивания объекта. Сохраните модель.
Состояние блокаОткройте диалоговое окно «Параметры блока», укажите имя состояния и выберите «Состояние должно разрешаться в объект сигнала» (класс хранения должен быть Auto). Создать Simulink.Signal в базовом рабочем пространстве или словаре данных и задайте класс хранения и свойства выравнивания. Сохраните модель.

Также можно создать и запустить сценарий MATLAB, который:

  1. Загружает данные модели.

  2. Поиск заданных объектов данных Simulink.CoderInfo.Alignment.

  3. Преобразует представление данных в объекты данных, хранящиеся во внешнем источнике, такие как MAT-файл, MATLAB-файл или словарь данных.

  4. Наборы Simulink.CoderInfo свойство объекта Alignment для новых объектов данных.

Например, этот сценарий проверяет, Alignment устанавливается для объектов данных параметров, таблицы подстановки и точек останова и фиксирует объекты данных, найденные в MAT-файле savedData.mat.

filename = 'savedData.mat';
varList = who;
tosaveVars = {};
for idx = 1 : length(varList)
   variable = eval(varList{idx});
   if ((isa(variable, 'Simulink.Parameter') || ...
       isa(variable, 'Simulink.LookupTable') || ...
       isa(variable, 'Simulink.Breakpoint')) && ...
       variable.CoderInfo.Alignment ~= -1)
       tosaveVars{end+1} = varList{idx};       
   end
end
if ~isempty(tosaveVars)
  save('savedData.mat', tosaveVars{:});
end

Вычислите сценарий в рабочем пространстве модели с помощью следующих команд:

mws = get_param(bdroot, 'ModelWorkspace');
evalin(mws, 'SaveMWSParamsWithAlignment');

Для объектов параметров в рабочей области модели можно также использовать интерфейс Проводника моделей для перемещения объектов из рабочей области модели в базовую рабочую область или словарь данных. Затем выберите свойство Alignment для класса хранения.

Конфигурация кода для объектов параметров, инициализированных в рабочей области модели

После загрузки модели в версии R2020b или более поздней и инициализации рабочего пространства модели из внешнего источника данных, такого как MAT-файл, файл MATLAB или словарь данных, Simulink:

  • Сохраняет содержимое Simulink.CoderInfo объект к сопоставлениям кода модели.

  • Удаляет Simulink.CoderInfo объект из Simulink.Parameter объект, определенный во внешнем источнике данных.

Используйте редактор сопоставлений кода или API-интерфейс сопоставлений кода для получения и установки настроек конфигурации кода параметра. См. раздел Конфигурирование данных и функций.

Конфигурирование кода для интерфейса ввода-вывода подсистемы

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

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

Копирование блоков и сигнальных линий между моделями

Начиная с R2020b, при использовании редактора Simulink для копирования блока или сигнальной линии в другую модель Simulink не копирует информацию о конфигурации кода, связанную с скопированным элементом моделирования.

Чтобы обойти это изменение, скопируйте и вставьте информацию о конфигурации кода для элементов данных с помощью API сопоставления кода.

  1. Откройте исходную и целевую модели для операции копирования.

  2. Используйте API сопоставления кода, чтобы получить объект сопоставления кода для исходной модели.

  3. Используйте API сопоставления кода, чтобы получить информацию о сопоставлении кода для копируемого элемента модели.

  4. Если объект сопоставления кода не существует для целевой модели, используйте API сопоставления кода для его создания.

  5. Для элемента модели, который копируется в целевую модель, используйте API-интерфейс сопоставления кода, чтобы задать для информации сопоставления кода те же значения, что и для исходной модели.

  6. Закройте исходную модель.

  7. Сохраните и закройте целевую модель.

Например:

.
.
.
srcMdl = 'my_src_mdl';
destMdl = 'my_dest_mdl';

open_system(srcMdl);
open_system(destMdl);

% Get data configuration from source model
srcCM = coder.mapping.api.get(srcMdl);
srcSC = getSignal(srcCM, srcPort, 'StorageClass')

% Set data configuration for destination model to setting of source model
destCM = coder.mapping.api.get(destMdl);
setSignal(destCM, destPort, 'StorageClass', srcSC);

close_system(srcMdl);
save_system(destMdl);
close_system(destMdl);
.
.
.

Переключение между целевыми файлами системы на основе GRT и ERT

Начиная с R2020b, при переключении настроек целевого файла системы для модели между целевым файлом системы на основе GRT и целевым файлом на основе ERT, Simulink применяет альтернативные конфигурации кода для каждого целевого файла системы. Это переключение может произойти в следующих случаях:

  • Чередование приложений Simulink Coder™ и Embedded Coder ®.

  • Измените активный набор конфигурации для модели.

  • Измените настройку параметра конфигурации модели System target file.

Чтобы сохранить информацию о конфигурации кода для данных, настроенных в модели, создайте и запустите сценарий MATLAB, который использует API сопоставления кода для копирования соответствующих сопоставлений кода.

  1. Откройте модель с целевым файлом исходной системы и сопоставлениями кода, которые необходимо сохранить.

  2. Используйте API сопоставления кода для получения объекта сопоставления кода для модели и объектов сопоставления данных для элементов данных.

  3. Используйте API сопоставления кода, чтобы получить объект сопоставления кода для модели и задать объекты сопоставления данных для элементов данных.

  4. Сохраните и закройте модель.

Этот фрагмент сценария показывает, как использовать API сопоставления кода для сохранения класса хранения объекта сигнала при переключении с целевого файла системы GRT на целевой файл системы ERT.

.
.
.
mymdl = 'my_shared_mdl';

open_system(mymdl);

% Get data configuration for Simulink Coder (GRT-based) code generation
scCodeMapping = coder.mapping.api.get(model, 'SimulinkCoderC'); 
scStorageClass = getSignal(scCodeMapping, srcPort, 'StorageClass') 

% Set data configuration for Embedded Coder (ERT-based) code generation
ecCodeMapping = coder.mapping.api.get(model, 'EmbeddedCoderC'); 
setSignal(ecCodeMapping, srcPort, 'StorageClass', scStorageClass)

save_system(mymdl);
close_system(mymdl);

.
.
.

Изменения рабочего процесса

Начиная с R2020b, настройте элементы данных модели для генерации кода с помощью редактора сопоставления кода или API сопоставления кода вместо или в дополнение к созданию и настройке объектов данных Simulink. Используйте этот рабочий процесс:

  1. Откройте приложение Simulink Coder.

  2. В редакторе сопоставлений кодов настройте поведение по умолчанию для представления хранилища..

  3. Решите, следует ли переопределять параметры конфигурации по умолчанию для отдельных элементов данных. Если вы решили не переопределять настройки, перейдите к шагу 8.

  4. Определите переменные MATLAB, которые необходимо настроить по отдельности, и сохраните конфигурации в рабочей области модели. В обозревателе моделей преобразуйте переменные в Simulink.Parameter объекты. Результирующие объекты данных отображаются в редакторе сопоставлений кодов в качестве параметров модели.

  5. Определите сигналы, представляющие данные алгоритма, которые необходимо контролировать, пока генерируемый код выполняется и конфигурируется индивидуально. Для каждого идентифицируемого сигнала выполните одно из следующих действий:

  6. Сконфигурируйте отдельные элементы данных. В редакторе сопоставлений кодов перейдите на вкладку категории, выберите элемент данных и задайте класс хранения. В инспекторе свойств задайте значения свойств класса хранения. Чтобы изменить настройку параметра конфигурации модели Поведение параметра по умолчанию, щелкните ссылку, указывающую поведение, когда для класса хранения установлено значение Auto. В диалоговом окне Параметры конфигурации модели (Model Configuration Parameters) измените значение параметра на Tunable или Inline.

  7. Чтобы просмотреть внешние объекты данных, хранящиеся в базовой рабочей области или словаре данных, в редакторе сопоставлений кодов нажмите кнопку «Обновить редактор сопоставлений кодов».

  8. Создание и просмотр кода.

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