Перечисления в словаре данных

Simulink® словарь данных постоянно хранит данные модели, включая MATLAB® переменные, объекты данных и типы данных, включая перечисленные типы. Классы перечисления, определенные в MATLAB словарем данных, принадлежат этому словарю и не могут быть очищены при помощи Simulink.clearIntEnumType. Когда вы закрываете словарь данных, словарь очищает классы перечисления, которые ему принадлежат. Если образец класса перечисления существует, когда вы закрываете словарь, этот класс перечисления не очищается и вы становитесь владельцем класса. В качестве владельца класса можно затем найти или удалить класс при помощи Simulink.findIntEnumType и Simulink.clearIntEnumType. Основные сведения о словарях данных см. в разделе «Что такое словарь данных?».

Миграция перечисленных типов в словарь данных

В этом примере показано, как перенести перечисленные типы, которые используются моделью, в словарь данных.

Импорт проектных данных

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

  2. В редакторе Simulink, на вкладке Modeling, в разделе Design, нажмите Link to Data Dictionary.

  3. В диалоговом окне Model Properties нажмите New, чтобы создать словарь данных.

  4. Назовите словарь данных, сохраните его и нажмите Apply.

  5. Нажмите Migrate data.

  6. Щелкните Migrate в ответ на сообщение о копировании ссылочных переменных.

  7. Simulink сообщает перечисленные типы, которые не были импортированы в словарь данных.

  8. Нажмите OK.

    В редакторе Simulink появляется уведомление о том, что ваша модель теперь связана со словарем данных.

Импортируйте перечисленные типы

Импортировать определения перечисленных типов можно только после импорта всех проектов данных, которые создавались с использованием этих типов. При импорте перечисленных типов в словарь данных Simulink отключает файлы MATLAB или P-файлы, которые содержат определения типов, в результате чего переменные, которые остаются в базовом рабочем пространстве MATLAB, теряют свои определения.

  1. В командной строке 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'
  2. Откройте словарь данных и представьте его с Simulink.data.Dictionary объект.

    ddConnection = Simulink.data.dictionary.open('myEnumsDD.sldd')
    ddConnection = 
    
      Dictionary with properties:
    
              DataSources: {0x1 cell}
        HasUnsavedChanges: 0
               NumberOfEntries: 3
    

  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 сообщает перечисленные типы, которые не переносятся. В этом примере два перечисленных образцов типа заданы в рабочем пространстве модели и могут быть импортированы после закрытия модели. Закройте модель, чтобы импортировать эти перечисленные типы.

  4. Откройте словарь, чтобы просмотреть перенесенные перечисленные типы.

Манипуляции с перечислениями в словаре данных

Эти примеры показывают, как работать с существующими перечислениями в словаре данных.

Переименование определения перечисляемого типа

  1. В словаре данных создайте копию перечисляемого типа и переименуйте ее.

  2. Найдите объекты перечисления, используемые вашей моделью, которые получают из типа со старым именем.

  3. Замените эти объекты на объекты, производные от переименованного типа.

  4. Удалите тип со старым именем.

Переименование представителей перечисления

Используйте один из следующих подходов.

  • Выберите перечисление в словаре и переименуйте одни или несколько представителей перечисления.

  • Если ваша модель ссылается на представителей перечисления, измените эти ссылки так, чтобы они совпадали с переименованным представителем.

Удаление представителей перечисления

  1. Найти ссылки в модели на представителя перечисления, который необходимо удалить.

  2. Замените эти ссылки альтернативным представителем.

  3. Удалите исходный представителя из перечисления.

Изменение базового значения представителя перечисления

Можно изменить значения представителей перечисления, когда вы представляете эти значения как переменный MATLAB или при помощи Value область Simulink.Parameter объекты.

  1. Найти ссылки в модели на представитель перечисления, значение которого вы хотите изменить.

  2. Запишите эти ссылки.

  3. Измените значение представителя перечисления.

  4. Вручную обновляйте ссылки на представителя перечисления в вашей модели.

Удаление перечисленных типов из словаря данных

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

  1. Вручную определите тип перечисленных данных в MATLAB. См. Использование перечисленных данных в моделях Simulink.

  2. Удалите образцы класса перечисления. Если при удалении перечисляемого типа данных из словаря существует образец класса перечисления, словарь освобождает управление классом перечисления, но класс остается в памяти как класс динамического перечисления. Затем можно найти или удалить класс при помощи Simulink.findIntEnumType и Simulink.clearIntEnumType.

  3. Удалите перечисленный тип из словаря.

См. также

Похожие темы