exponenta event banner

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

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

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

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

Импорт конструкторских данных

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

  2. В редакторе Simulink на вкладке «Моделирование» в разделе «Проект» выберите «Связать со словарем данных».

  3. В диалоговом окне «Свойства модели» нажмите кнопку «Создать» для создания словаря данных.

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

  5. Щелкните Перенос данных.

  6. Щелкните Перенести в ответ на сообщение о копировании переменных, на которые имеются ссылки.

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

  8. Нажмите кнопку ОК.

    В редакторе 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. Удаление перечисляемого типа из словаря.

См. также

Связанные темы