Начиная в R2020b, рекомендуемый подход, чтобы сконфигурировать данные модели для генерации кода должен использовать API отображений редактора или кода Отображений Кода. От одного интерфейса можно сконфигурировать настройки по умолчанию для категорий данных, и затем заменить те настройки, по мере необходимости, для определенных элементов данных. Для параметров можно задать, встраиваются ли они или настраиваемые по умолчанию. При создании кода для данных генератор кода использует определения кода, которые вы задаете, чтобы определить, как представлять данные в сгенерированном коде.
Когда вы открываете модель, созданную в релизе, прежде чем R2020b, Simulink® переместит определения кода, заданные в модели к отображениям типового кодекса.
Для данных, сконфигурированных в модели, процесс миграции заменяет существующие технические требования класса памяти на эквивалентные отображения кода. Данные, сконфигурированные для генерации кода в модели, включают данные, представленные:
Блоки выходного порта
Сигнальные линии
Состояния блока
Хранилища данных
Объекты параметра в рабочем пространстве модели
Эта таблица приводит определенные условия модели и их соответствующие результаты миграции.
Условие | Результаты миграции |
---|---|
Модель является моделью библиотеки. | Simulink отбрасывает настройку кода, сопоставленную с данными, сконфигурированными в модели. |
Элемент данных сконфигурирован для генерации кода в модели, и элемент данных сопоставлен с Simulink.CoderInfo объект, StorageClass свойство для того объекта установлено в Custom , и CustomStorageClass свойство установлено в Default . | Simulink изменяет класс памяти, сходящий с Custom (Default) к ExportedGlobal и выводит предупреждение. |
Модель использует объекты данных, сконфигурированные для использования с
| Simulink выдает предупреждение, указывающее, что свойство больше не поддерживается. Другие интерфейсы доступны для достижения тех же результатов. |
Модель использует Simulink.CoderInfo объект Alignment свойство для данных сконфигурировано в модели. | Simulink выдает предупреждение, указывающее, что свойство больше не поддерживается для данных модели специфичных. Можно использовать свойство для данных, хранимых в базовом рабочем пространстве или словаре данных. |
Вы инициализируете рабочее пространство модели для модели от внешнего источника данных, такого как MAT-файл, файл MATLAB® или словарь данных. | Simulink перемещает настройку кода для объекта параметра к отображениям кода для той модели. |
Для отдельной подсистемы, от которой вы генерируете код и исполняемые программы путем щелчка правой кнопкой по блоку Subsystem, вы конфигурируете класс памяти и свойства класса памяти для сигналов ввода и вывода подсистемы за пределами подсистемы. | Сгенерированный код не включает переменные для данных об интерфейсе ввода и вывода. |
Если вы выполняете эти операции, вы можете должны быть принять меры:
Используйте Редактор Simulink, чтобы скопировать строку блока к другой модели. Simulink не копирует конфигурационную информацию кода, сопоставленную со скопированным элементом моделирования. Для получения дополнительной информации смотрите Блоки Копии и Сигнальные линии Между Моделями (Embedded Coder).
Переключите системную установку конечного файла для модели между основанным на GRT и основанным на ERT системным конечным файлом. Simulink игнорирует конфигурационную информацию кода для системного конечного файла исходной версии скопированной модели. Для получения дополнительной информации смотрите Переключатель Между GRT - и Основанными на ERT Системными Конечными файлами (Embedded Coder).
Перед миграцией считайте подготовку предложенной в следующих разделах, если эти условия существуют:
Данные сконфигурированы в модели библиотеки
Класс памяти TypeQualifier
свойство
Выравнивание данных для генерации кода
Настройка кода для объектов параметра инициализируется в рабочем пространстве модели
Настройка кода для интерфейса I/O подсистемы
Если ваша модель является моделью библиотеки, реконфигурируйте генерацию кода для данных. Реконфигурируйте генерацию кода для данных в контексте моделей, которые пользуются библиотекой (см. Данные и Функциональную Настройку).
Чтобы постараться не терять настройку кода для данных, сконфигурированных в модели, в более раннем релизе, загружают модель и создают и запускают скрипт MATLAB что:
Загружает данные модели.
Находит данные сконфигурированными для генерации кода в модели.
Преобразует представление данных к объектам данных, которые вы храните во внешнем источнике, таком как MAT-файл, файл MATLAB или словарь данных.
Обновляет модель, чтобы использовать внешние объекты данных.
TypeQualifier
СвойствоЕсли ваша модель конфигурирует объекты данных со встроенными классами памяти, такими как ExportedGlobal
и ImportedExtern
, и использует класс памяти TypeQualifier
свойство, когда вы загружаете модель в релизе R2020b или позже, Simulink, выдает предупреждение. Чтобы устранить предупреждение и обновить модель, чтобы использовать поддерживаемую альтернативу, в более раннем релизе, загружают модель и создают и запускают скрипт MATLAB что:
Загружает объекты данных модели от рабочего пространства модели, базового рабочего пространства или словаря данных.
Находит объекты данных с TypeQualifier
набор свойств к значению непустой строки.
Изменяет настройки класса памяти к классу памяти, предопределенному с необходимым спецификатором типа (например, класс памяти 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 что:
Загружает данные модели.
Находит объекты данных, которые устанавливают Simulink.CoderInfo.Alignment
.
Преобразует представление данных к объектам данных, которые вы храните во внешнем источнике, таком как MAT-файл, файл MATLAB или словарь данных.
Наборы 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 отображений кода.
Откройте исходные и целевые модели для операции копии.
Используйте API отображений кода, чтобы получить объект отображений кода для исходной модели.
Используйте API отображений кода, чтобы получить код, сопоставляющий информацию для элемента модели, который вы копируете.
Если объект отображений кода не существует для целевой модели, используйте API отображений кода, чтобы создать тот.
Для элемента модели, который вы копируете в целевую модель, используйте API отображений кода, чтобы установить код, сопоставляющий информацию с теми же значениями что касается исходной модели.
Закройте исходную модель.
Сохраните и закройте целевую модель.
Например:
. . . 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); . . .
При запуске в R2020b, когда вы переключаете системную установку конечного файла для модели между основанным на GRT и основанным на ERT системным конечным файлом, Simulink применяет альтернативные настройки кода для каждого системного конечного файла. Этот переключатель может произойти если вы:
Альтернатива между Simulink Coder™ и приложениями Embedded Coder®.
Измените активную конфигурацию модели для модели.
Измените настройки параметра конфигурации модели System target file.
Чтобы сохранить конфигурационную информацию кода для данных, сконфигурированных в модели, создайте и запустите скрипт MATLAB, который использует API отображений кода, чтобы скопировать отображения соответствующих норм.
Откройте модель с исходным системным конечным файлом и отображениями кода, которые вы хотите сохранить.
Используйте API отображений кода, чтобы получить объект отображений кода для модели и получить объекты отображений данных для элементов данных.
Используйте API отображений кода, чтобы получить объект отображений кода для модели и установить объекты отображений данных для элементов данных.
Сохраните и закройте модель.
Этот фрагмент скрипта показывает, как использовать 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. Используйте этот рабочий процесс:
Откройте приложение Simulink Coder.
В редакторе Отображений Кода сконфигурируйте поведение по умолчанию для представления устройства хранения данных..
Решите, заменить ли параметры конфигурации по умолчанию для отдельных элементов данных. Если вы принимаете решение не заменить настройки, пропустите к шагу 8.
Идентифицируйте переменные MATLAB, которые вы хотите сконфигурировать индивидуально и сохранить настройки в рабочем пространстве модели. В Model Explorer преобразуйте переменные в Simulink.Parameter
объекты. Получившиеся объекты данных появляются в редакторе Отображений Кода как параметры модели.
Идентифицируйте сигналы, представляющие данные об алгоритме, которые вы хотите контролировать, в то время как сгенерированный код выполняется, и сконфигурируйте индивидуально. Для каждого сигнала, что вы идентифицируете, выполнить одно из следующих действий:
Для данных сигнала, который характерен для модели (не совместно использованный), добавьте сигналы в редактор Отображений Кода. В модели сделайте паузу на замещающем знаке выше сигнальной линии, чтобы открыть строку меню. Нажмите Add Signal button, чтобы добавить сигнал в редактор Отображений Кода.
Для разделяемых данных сигнала создайте и сконфигурируйте Simulink.Signal
объекты. Смотрите Настройку генерации кода C для Элементов Интерфейса модели и Управляющего сигнала и Инициализации состояния в Сгенерированном коде.
Сконфигурируйте отдельные элементы данных. В редакторе Отображений Кода кликните по вкладке категории, выберите элемент данных и установите класс памяти. В Property Inspector, значениях свойств класса памяти набора. Изменить настройки параметра конфигурации модели нажатие кнопки Default parameter behavior ссылка, указывающая на поведение, когда класс памяти установлен в Auto
. В диалоговом окне Model Configuration Parameters измените установку параметра в Tunable
или Inline
.
Чтобы просмотреть внешние объекты данных, которые хранятся в базовом рабочем пространстве или словаре данных в редакторе Отображений Кода, нажимают редактор Отображений Кода кнопка Refresh.
Сгенерируйте и рассмотрите код.