Храните данные в словаре программно

Словарь данных хранит данные модели Simulink® и предлагает больше функций управления данными, чем базовое рабочее пространство MATLAB® или рабочее пространство модели (см. то, Что Словарь Данных?). Взаимодействовать с данными в словаре программно:

  1. Создайте объект Simulink.data.Dictionary, который представляет целевой словарь.

  2. Создайте объект Simulink.data.dictionary.Section, который представляет целевой раздел, например раздел Design Data. Используйте объект взаимодействовать с записями, сохраненными в разделе и добавить записи.

  3. Опционально, создайте объекты Simulink.data.dictionary.Entry, что каждый представляет запись в целевом разделе. Используйте эти объекты взаимодействовать с отдельными записями в целевом разделе.

К программно переменным доступа в целях широких блочных значений параметров рассмотрите использование объектов Simulink.SimulationInput вместо того, чтобы изменить переменные через программируемый интерфейс словаря данных. Смотрите Оптимизируют, Оценка и Блочные Значения параметров Развертки.

Вы не можете использовать словарь данных программируемый интерфейс, чтобы получить доступ к разделу Embedded Coder словаря данных. Вместо этого см. Словарь Embedded Coder.

Добавьте запись в раздел данных проектирования словаря данных

  1. Представляйте раздел Design Data словаря данных myDictionary_ex_API.sldd с объектом Simulink.data.dictionary.Section под названием dDataSectObj.

    myDictionaryObj = ...
    Simulink.data.dictionary.open('myDictionary_ex_API.sldd');
    dDataSectObj = getSection(myDictionaryObj,'Design Data');
    
  2. Добавьте запись в раздел Design Data myDictionary_ex_API.sldd запись myNewEntry со значением 237.

    addEntry(dDataSectObj,'myNewEntry',237)

Инкрементное значение словарной статьи данных

  1. Представляйте словарную статью данных fuelFlow с объектом Simulink.data.dictionary.Entry под названием fuelFlowObj. fuelFlow задан в словаре данных myDictionary_ex_API.sldd.

    myDictionaryObj = Simulink.data.dictionary.open('myDictionary_ex_API.sldd');
    dDataSectObj = getSection(myDictionaryObj,'Design Data');
    fuelFlowObj = getEntry(dDataSectObj,'fuelFlow');
  2. Сохраните значение целевой записи во временной переменной. Постепенно увеличьте значение временной переменной одной.

    temp = getValue(fuelFlowObj);
    temp = temp+1;
  3. Установите значение целевой записи при помощи временной переменной.

    setValue(fuelFlowObj,temp)
    

Управление словарем данных

Используйте объекты Simulink.data.Dictionary взаимодействовать с целыми словарями данных.

ЦельИспользование
Представляйте существующий словарь данных с объектом Simulink.data.Dictionary

Simulink.data.dictionary.open

Создайте и представляйте словарь данных с объектом Simulink.data.Dictionary

Simulink.data.dictionary.create

Взаимодействуйте со словарем данных

Класс Simulink.data.Dictionary

Импортируйте переменные к словарю данных от базового рабочего пространства MATLAB

Метод Simulink.data.Dictionary.importFromBaseWorkspace

Добавьте ссылочный словарь к словарю данных

Метод Simulink.data.Dictionary.addDataSource

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

Метод Simulink.data.Dictionary.removeDataSource

Сохраните изменения в словаре данных

Метод Simulink.data.Dictionary.saveChanges

Отмените изменения к словарю данных

Метод Simulink.data.Dictionary.discardChanges

Просмотрите список записей, сохраненных в словаре данных

Метод Simulink.data.Dictionary.listEntry

Импортируйте определения перечислимого типа словарю данных

Метод Simulink.data.Dictionary.importEnumTypes

Возвратите имя файла и путь словаря данных

Метод Simulink.data.Dictionary.filepath

Покажите словарь данных в окне Model Explorer

Метод Simulink.data.Dictionary.show

Скройте словарь данных от окна Model Explorer

Метод Simulink.data.Dictionary.hide

Закройте связь между словарем данных и объектом Simulink.data.Dictionary

Метод Simulink.data.Dictionary.close

Идентифицируйте словари данных, которые открыты

Simulink.data.dictionary.getOpenDictionaryPaths

Закройте все связи со всеми открытыми словарями данных

Simulink.data.dictionary.closeAll

Управление разделом словаря

Словари данных хранят данные как записи, содержавшиеся в разделах, и по умолчанию все словари имеют по крайней мере три раздела под названием Данные проектирования, Другие Данные и Настройки. Используйте объекты Simulink.data.dictionary.Section взаимодействовать с разделами словаря данных.

ЦельИспользование
Представляйте раздел словаря данных с объектом Section.

Метод Simulink.data.Dictionary.getSection

Взаимодействуйте с разделом словаря данных

Simulink.data.dictionary.Section class

Импортируйте переменные к разделу словаря данных из MAT-файла или файла MATLAB

Метод Simulink.data.dictionary.Section.importFromFile

Записи экспорта в словаре данных разделяют к MAT-файлу или файлу MATLAB

Метод Simulink.data.dictionary.Section.exportToFile

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

Метод Simulink.data.dictionary.Section.deleteEntry

Оцените выражение MATLAB в разделе словаря данных

Метод Simulink.data.dictionary.Section.evalin

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

Simulink.data.dictionary.Section.find method

Определите, существует ли запись в разделе словаря данных

Метод Simulink.data.dictionary.Section.exist

Манипуляция со словарными статьями

Переменная, которая сохранена в словаре данных, называется записью словаря. Записи имеют дополнительные свойства, которые хранят информацию о статусе, такую как время и дата, запись была в последний раз изменена. Используйте объекты Simulink.data.dictionary.Entry управлять словарными статьями данных.

ЦельИспользование
Представляйте словарную статью данных с объектом Entry

Метод Simulink.data.dictionary.Section.getEntry

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

Метод Simulink.data.dictionary.Section.addEntry

Управляйте словарной статьей данных

Класс Simulink.data.dictionary.Entry

Присвойте новое значение словарной статье данных

Метод Simulink.data.dictionary.Entry.setValue

Отобразите изменения, внесенные в словарную статью данных

Метод Simulink.data.dictionary.Entry.showChanges

Сохраните изменения, внесенные в словарь данных

Метод Simulink.data.Dictionary.saveChanges

Отмените изменения, сделанные к словарной статье данных

Метод Simulink.data.dictionary.Entry.discardChanges

Поиск в массиве словарных статей данных

Simulink.data.dictionary.Entry.find method

Возвращаемое значение словарной статьи данных

Метод Simulink.data.dictionary.Entry.getValue

Удалите словарную статью данных

Метод Simulink.data.dictionary.Entry.deleteEntry

Сохраните определение перечислимого типа в словаре

Класс Simulink.data.dictionary.EnumTypeDefinition

Переход к Использованию словаря данных

Используя словарь данных может усложнить программируемое взаимодействие с данными модели. Если вы соединяете модель со словарем:

  • Вы больше не можете взаимодействовать с данными модели при помощи простых команд в командной строке. Вместо этого необходимо использовать программируемый интерфейс словаря (Simulink.data.Dictionary).

  • Когда вы выбираете доступ к свойству Allow словаря к базовому рабочему пространству (см., Продолжают Использовать Разделяемые данные в Базовом рабочем пространстве), в зависимости от места хранения целевых данных, необходимо использовать или простые команды или программируемый интерфейс.

Чтобы помочь перейти от использования базового рабочего пространства к использованию словарей данных, рассмотрите использование этих функций. Функции работают с данными модели независимо от места хранения данных.

ЦельИспользование
Измените значение словарной статьи данных или переменной рабочей области в контексте модели Simulink

Simulink.data.assigninGlobal

Оцените выражение MATLAB в контексте модели Simulink

Simulink.data.evalinGlobal

Определите существование словарной статьи данных или переменной рабочей области в контексте модели Simulink

Simulink.data.existsInGlobal

Программно переместите единственную модель, чтобы использовать словарь

Чтобы изменить источник данных модели Simulink от базового рабочего пространства MATLAB до нового словаря данных, используйте этот пример кода в качестве шаблона.

% Define the model name and the data dictionary name
modelName = 'f14';
dictionaryName = 'myNewDictionary.sldd';

% Load the target model
load_system(modelName);

% Identify all model variables that are defined in the base workspace
varsToImport = Simulink.findVars(modelName,'SourceType','base workspace');
varNames = {varsToImport.Name};

% Create the data dictionary
dictionaryObj = Simulink.data.dictionary.create(dictionaryName);

% Import to the dictionary the model variables defined in the base
% workspace, and clear the variables from the base workspace
[importSuccess,importFailure] = importFromBaseWorkspace(dictionaryObj,...
    'varList',varNames,'clearWorkspaceVars',true);

% Link the dictionary to the model
set_param(modelName,'DataDictionary',dictionaryName);

Примечание

Этот код не перемещает определения перечислимых типов данных, которые использовались, чтобы задать образцовые переменные. Если вы импортируете образцовые переменные перечислимых типов данных к словарю данных, но не перемещаете определения перечислимого типа, словарь является менее портативным и не может функционировать правильно, если используется кем-то еще. Чтобы переместить перечисленные определения типов на словарь данных, смотрите Перечисления в Словаре Данных.

Импортируйте непосредственно от внешнего файла до словаря

Этот пример показывает, как использовать пользовательскую функцию MATLAB, чтобы импортировать данные непосредственно от внешнего файла до словаря данных, не создавая или изменяя переменные в базовом рабочем пространстве.

  1. Создайте двумерную интерполяционную таблицу в одном листе рабочей книги Microsoft® Excel®. Используйте верхний левый угол листа, чтобы обеспечить имена для двух точек останова и для таблицы. Используйте столбец B и строку 2, чтобы сохранить две точки останова и остальную часть использования листа, чтобы сохранить таблицу. Например, ваша интерполяционная таблица может выглядеть так:

    Сохраните рабочую книгу в своей текущей папке как my2DLUT.xlsx.

  2. Скопируйте это пользовательское функциональное определение в файл MATLAB и сохраните файл в вашей текущей папке как importLUTToDD.m m.

    function importLUTToDD(workbookFile,dictionaryName)
        % IMPORTLUTTODD(workbookFile,dictionaryName) imports data for a
        % two-dimensional lookup table from a workbook directly into a data
        % dictionary. The two-dimensional lookup table in the workbook can be
        % any size but must follow a standard format.
    
        % Read in the entire first sheet of the workbook.
        [data,names,~] = xlsread(workbookFile,1,'');
    
        % Divide the raw imported data into the breakpoints, the table, and their
        % names.
        % Assume breakpoint 1 is in the first column and breakpoint 2 is in the
        % first row.
        % Assume cells A1, B1, and B2 define the breakpoint names and table name.
        bkpt1 = data(2:end,1);
        bkpt2 = data(1,2:end);
        table = data(2:end,2:end);
        bkpt1Name = names{2,1};
        bkpt2Name = names{1,2};
        tableName = names{2,2};
    
        % Prepare to import to the Design Data section of the target data
        % dictionary.
        myDictionaryObj = Simulink.data.dictionary.open(dictionaryName);
        dDataSectObj = getSection(myDictionaryObj,'Design Data');
    
        % Create entries in the dictionary to store the imported breakpoints and
        % table. Name the entries using the breakpoint and table names imported
        % from the workbook.
        addEntry(dDataSectObj,bkpt1Name,bkpt1);
        addEntry(dDataSectObj,bkpt2Name,bkpt2);
        addEntry(dDataSectObj,tableName,table);
    
        % Save changes to the dictionary and close it.
        saveChanges(myDictionaryObj)
        close(myDictionaryObj)
    
  3. В подсказке команды MATLAB создайте словарь данных, чтобы хранить данные интерполяционной таблицы.

    myDictionaryObj = Simulink.data.dictionary.create('myLUTDD.sldd');
  4. Вызовите пользовательскую функцию, чтобы импортировать вашу интерполяционную таблицу к новому словарю данных.

    importLUTToDD('my2DLUT.xlsx','myLUTDD.sldd')
  5. Откройте словарь данных в Образцовом Проводнике.

    show(myDictionaryObj)

    Три новых записи хранят импортированные точки останова и интерполяционную таблицу. Эти записи готовы использовать в 2D блоке Lookup Table.

Программно словарь данных раздела

Чтобы разделить словарь данных в ссылочные словари, используйте этот пример кода в качестве шаблона. Можно использовать ссылочные словари, чтобы сделать большие словари данных более управляемыми и содержать стандартизированные данные, который полезен для многоуровневых моделей.

% Define the names of a parent data dictionary and two
% reference data dictionaries
parentDDName = 'myParentDictionary.sldd';
typesDDName = 'myTypesDictionary.sldd';
paramsDDName = 'myParamsDictionary.sldd';

% Create the parent data dictionary and a
% Simulink.data.Dictionary object to represent it
parentDD = Simulink.data.dictionary.create(parentDDName);

% Create a Simulink.data.dictionary.Section object to represent 
% the Design Data section of the parent dictionary
designData_parentDD = getSection(parentDD,'Design Data');

% Import some data to the parent dictionary from the file partDD_Data_ex_API.m
importFromFile(designData_parentDD,'partDD_Data_ex_API.m');

% Create two reference dictionaries
Simulink.data.dictionary.create(typesDDName);
Simulink.data.dictionary.create(paramsDDName);

% Create a reference dictionary hierarchy by adding reference dictionaries 
% to the parent dictionary
addDataSource(parentDD,typesDDName);
addDataSource(parentDD,paramsDDName);

% Migrate all Simulink.Parameter objects from the parent data dictionary to
% a reference dictionary
paramEntries = find(designData_parentDD,'-value','-class','Simulink.Parameter');
for i = 1:length(paramEntries)
    paramEntries(i).DataSource = 'myParamsDictionary.sldd';
end

% Migrate all Simulink.NumericType objects from the parent data dictionary
% to a reference dictionary
typeEntries = find(designData_parentDD,'-value','-class','Simulink.NumericType');
for i = 1:length(typeEntries)
    typeEntries(i).DataSource = 'myTypesDictionary.sldd';
end

% Save all changes to the parent data dictionary
saveChanges(parentDD)

Делайте изменения в конфигурацию модели сохраненными в словаре

Можно сохранить конфигурацию модели (объект Simulink.ConfigSet) в разделе Configurations словаря. Изменить настройки параметра конфигурации в наборе программно:

  1. Создайте объект Simulink.data.dictionary.Entry, который представляет конфигурацию модели (который является записью в словаре). Например, предположите, что именем словаря является myData.sldd, и именем объекта Simulink.ConfigSet является myConfigs.

    dictionaryObj = Simulink.data.dictionary.open('myData.sldd');
    configsSectObj = getSection(dictionaryObj,'Configurations');
    entryObj = getEntry(configsSectObj,'myConfigs');

  2. Сохраните копию целевого объекта Simulink.ConfigSet во временной переменной.

    temp = getValue(entryObj);

  3. Во временной переменной измените целевой параметр конфигурации (в этом случае, установите Время остановки на 20).

    set_param(temp,'StopTime','20');

  4. Используйте временную переменную, чтобы перезаписать конфигурацию модели в словаре.

    setValue(entryObj,temp);

  5. Сохраните изменения, внесенные в словарь.

    saveChanges(dictionaryObj)

Смотрите также

| | |

Похожие темы

Была ли эта тема полезной?