Словарь данных Simulink® постоянно хранит данные модели включая переменные MATLAB®, объекты данных и типы данных включая перечислимые типы. Классы перечисления задали в MATLAB по условию, словарь принадлежит тому словарю и не может быть очищен при помощи Simulink.clearIntEnumType
. Когда вы закрываете словарь данных, словарь очищает классы перечисления, которыми он владеет. Если экземпляр класса перечисления существует, когда вы закрываете словарь, тот класс перечисления не очищен, и вы становитесь владельцем класса. Как владелец класса, можно затем найти или очистить класс при помощи Simulink.findIntEnumType
и Simulink.clearIntEnumType
. Для основной информации о словарях данных смотрите то, Что Словарь Данных?.
В этом примере показано, как переместить перечислимые типы, которые используются моделью в словарь данных.
Импортируйте данные проектирования
Откройте модель, которая использует перечислимые типы для данных проектирования или для блоков в модели.
В Редакторе Simulink, на вкладке Modeling, под Design, нажимают Link to Data Dictionary.
В диалоговом окне Model Properties нажмите New, чтобы создать словарь данных.
Назовите словарь данных, сохраните его и нажмите Apply.
Нажмите Migrate data.
Нажмите Migrate в ответ на сообщение о копировании переменных, на которые ссылаются.
Simulink сообщает о перечислимых типах, которые не были импортированы в словарь данных.
Нажмите OK.
Уведомление появляется в Редакторе Simulink, сообщая, что ваша модель теперь соединена со словарем данных.
Импортируйте перечислимые типы
Импортируйте определения перечислимых типов только после того, как вы импортируете все данные проектирования, которые создавали использование типов. Когда вы импортируете перечислимые типы к словарю данных, Simulink отключает файлы MATLAB или P-файлы, которые содержат определения типа, вызывая переменные, которые остаются в базовом рабочем пространстве MATLAB, чтобы потерять их определения.
В командной строке MATLAB получите имена перечислимых типов, которые используются в блоках модели.
% Find all variables and enumerated types used in model blocks usedTypesVars = Simulink.findVars('EnumsReporting','IncludeEnumTypes',true); % Here, EnumsReporting is the name of the model and % usedTypesVars is an array of Simulink.VariableUsage objects % Find indices of enumerated types that are defined by MATLAB files or P-files enumTypesFile = strcmp({usedTypesVars.SourceType},'MATLAB file'); % Find indices of enumerated types that are defined using the function % Simulink.defineIntEnumType enumTypesDynamic = strcmp({usedTypesVars.SourceType},'dynamic class'); % In one array, represent indices of both kinds of enumerated types enumTypesIndex = enumTypesFile | enumTypesDynamic; % Use logical indexing to return the names of used enumerated types enumTypeNames = {usedTypesVars(enumTypesIndex).Name}'
enumTypeNames = 'dEnum1' 'dEnum10' 'dEnum2' 'dEnum3' 'dEnum4' 'dEnum5' 'dEnum6' 'dEnum9'
Откройте словарь данных и представляйте его Simulink.data.Dictionary
объект.
ddConnection = Simulink.data.dictionary.open('myEnumsDD.sldd')
ddConnection = Dictionary with properties: DataSources: {0x1 cell} HasUnsavedChanges: 0 NumberOfEntries: 3
Используйте importEnumTypes
метод, чтобы импортировать перечислимые типы, которые используются блоками в модели. Метод сохраняет изменения, внесенные в целевой словарь, поэтому прежде чем вы будете использовать метод, подтвердите, что несохраненные изменения приемлемы.
[successfulMigrations, unsuccessfulMigrations] = ...
importEnumTypes(ddConnection,enumTypeNames)
successfulMigrations = 1x6 struct array with fields: className renamedFiles unsuccessfulMigrations = 1x2 struct array with fields: className reasons
importEnumTypes
переименовывает перечислимый файл определения класса путем добавления .save
к имени файла. Например, если исходное перечислимое определение класса называют Enum1.m
, Simulink переименовал файл как Enum1.m.save
.Структура unsuccessfulMigrations
перечислимые типы отчетов, которые не перемещаются. В этом примере два экземпляра перечислимого типа заданы в рабочем пространстве модели и могут быть импортированы после закрытия модели. Закройте модель, чтобы импортировать эти перечислимые типы.
Откройте словарь, чтобы просмотреть перемещенные перечислимые типы.
Эти примеры показывают, как работать с существующими перечислениями в словаре данных.
В словаре данных создайте копию перечислимого типа и переименуйте копию вместо этого.
Найдите объекты перечисления используемыми вашей моделью, которые выведены из типа со старым названием.
Замените эти объекты на выведенных из переименованного типа.
Удалите тип со старым названием.
Используйте один из следующих подходов.
Выберите перечисление в рамках словаря и переименуйте один или несколько членов перечисления.
Если ваши члены перечисления моделей - ссылок, измените эти ссылки, чтобы совпадать с переименованным членом.
Найдите ссылки в своей модели члену перечисления, который вы хотите удалить.
Замените эти ссылки на альтернативный член.
Удалите исходный член из перечисления.
Можно изменить значения членов перечисления, когда вы представляете эти значения как переменные MATLAB или при помощи Value
поле Simulink.Parameter
объекты.
Найдите ссылки в своей модели члену перечисления, значение которого вы хотите изменить.
Обратите внимание на эти ссылки.
Измените значение члена перечисления.
Вручную обновите ссылки на член перечисления в вашей модели.
Если вы решаете, что больше не хотите задать перечислимый тип в словаре, выполните эти шаги.
Вручную задайте перечислимый тип данных в MATLAB. Смотрите Использование Перечислимые Данные в Моделях Simulink.
Удалите экземпляры класса перечисления. Если существует экземпляр существующего класса перечисления, когда вы удаляете перечислимый тип данных из словаря, словарь выпускает управление класса перечисления, но класс остается в памяти как динамический класс перечисления. Можно затем найти или очистить класс при помощи Simulink.findIntEnumType
и Simulink.clearIntEnumType
.
Удалите перечислимый тип из словаря.
Simulink.data.dictionary.EnumTypeDefinition