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

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

    Три новых записи хранят импортированные точки останова и интерполяционную таблицу. Эти записи готовы использовать в блоке 2-D 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)

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

| | |

Похожие темы