Миграция настроек данных модели, чтобы закодировать отображения

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

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

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

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

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

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

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

  • Класс памяти TypeQualifier свойство

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

  • Настройка кода для объектов параметра инициализируется в рабочем пространстве модели

  • Настройка кода для интерфейса I/O подсистемы

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

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

Чтобы постараться не терять настройку кода для данных, сконфигурированных в модели, в более раннем релизе, загружают модель и создают и запускают скрипт 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, чтобы переместить объект от рабочего пространства модели до базового рабочего пространства или словаря данных. Затем установите класс памяти и свойства выравнивания объекта. Сохраните модель.
Сигнальная линияОткройте диалоговое окно Signal Properties, задайте имя для сигнала и выберите Must resolve to signal object (классом памяти должен быть Auto). Создайте Simulink.Signal объект в базовом рабочем пространстве или словаре данных и наборе класс памяти и свойства выравнивания объекта. Сохраните модель.
Состояние блокаОткройте диалоговое окно Block Parameters, задайте имя для состояния и выберите 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 объект задан во внешнем источнике данных.

Используйте редактор Отображений Кода или API отображений кода, чтобы получить и установить параметры конфигурации параметра кода. Смотрите Данные и Функциональную Настройку.

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

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

Для получения дополнительной информации смотрите, Генерируют Код и Исполняемые файлы для Отдельных Подсистем.

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

При запуске в 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, которые вы хотите сконфигурировать индивидуально и сохранить настройки в рабочем пространстве модели. В Model Explorer преобразуйте переменные в Simulink.Parameter объекты. Получившиеся объекты данных появляются в редакторе Отображений Кода как параметры модели.

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

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

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

  8. Сгенерируйте и рассмотрите код.

Похожие темы