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

Словарь данных хранит данные модели 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

Импортируйте переменные к разделу словаря данных из 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

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

Метод 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

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

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

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

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

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

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

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

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

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

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

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

ЦельИспользование
Измените значение записи в словаре данных или переменной рабочей области в контексте модели 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);

Примечание

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

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

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

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

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

  2. Скопируйте это пользовательское функциональное определение в файл MATLAB и сохраните файл в вашей текущей папке как importLUTToDD.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. Откройте словарь данных в Model Explorer.

    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. Во временной переменной измените целевой параметр конфигурации (в этом случае, установите Stop time на 20).

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

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

    setValue(entryObj,temp);

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

    saveChanges(dictionaryObj)

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

| | |

Похожие темы