Миграция Данных моделей Строений к отображениям кода

Начиная с R2020b, рекомендуемый подход к конфигурированию данных моделей для генерации кода состоит в том, чтобы использовать редактор Code Mappings или 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 перемещает строение кода для объекта параметра в отображения кода для этой модели.
Для отдельной подсистемы, из которой вы генерируете код и исполняемые программы путем щелчка правой кнопкой мыши по блоку Subsystem, вы конфигурируете свойства класса памяти и класса памяти для входных и выходных сигналов подсистемы за пределами подсистемы. Сгенерированный код не включает переменные для входа и выходных данных интерфейса.

Если вы выполняете эти операции, вам, возможно, потребуется принять меры:

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

  • Переключите настройку системного целевого файла для модели между основанным на GRT и основанным на ERT системным целевым файлом. Simulink игнорирует информацию о строении кода для системного целевого файла исходной версии скопированной модели. Для получения дополнительной информации смотрите Switch Between GRT- and ERT-Based System Target Files (Embedded Coder).

Факторы перед миграцией

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

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

  • Класс памяти 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 и выполните действия, перечисленные в этой таблице.

Тип элемента данныхДействие
Объект параметра в рабочем пространстве моделиИспользуйте Model Explorer, чтобы переместить объект из рабочего пространства модели в базовое рабочее пространство или словарь данных. Затем установите класс памяти и свойства выравнивания объекта. Сохраните модель.
Сигнальная линияОткройте диалоговое окно Свойства, укажите имя сигнала и выберите Must resolve to signal object (класс памяти должен быть Auto). Создайте Simulink.Signal объект в базовом рабочем пространстве или словаре данных и установите класс памяти и свойства выравнивания объекта. Сохраните модель.
Состояние блокаОткройте диалоговое окно Параметров блоков, укажите имя состояния и выберите State must resolve to signal object (класс хранения должен быть 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');

Для объектов параметров в рабочем пространстве модели также можно использовать интерфейс Model Explorer, чтобы переместить объекты из рабочего пространства модели в базовое рабочее пространство или словарь данных. Затем выберите свойство Alignment для класса памяти.

Строение кода для объектов параметра, инициализированных в рабочем пространстве модели

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

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

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

Используйте редактор Code Mappings или API отображения кода, чтобы получить и задать настройки строения кода параметра. См. «Данные и функциональные Строения».

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

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

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

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

Начиная с R2020b, когда вы используете Редактор, чтобы скопировать блок или сигнальную линию в другую модель, 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, сконфигурируйте элементы данных модели для генерации кода с помощью редактора Code Mappings или API отображения кода вместо или в дополнение к созданию и настройке объектов данных Simulink. Используйте этот рабочий процесс:

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

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

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

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

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

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

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

  8. Сгенерируйте и проверьте код.

Похожие темы