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

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

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

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

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

Чтобы программно получить доступ к переменным в целях протягивания значений параметров блоков, рассмотрите использование Simulink.SimulationInput объекты вместо изменения переменных через программный интерфейс словаря данных. См. «Оптимизация, оценка и развертка Параметров блоков значений».

Для программного взаимодействия с Embedded Coder разделом словаря данных смотрите Создание определений кода программно (Embedded Coder).

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

  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. Добавьте запись в раздел « Проектные данные» myDictionary_ex_API.sldd запись myNewEntry со значением 237.

    addEntry(dDataSectObj,'myNewEntry',237)

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

Переименуйте статью в разделе Design Data, Configurations или Other Data словаря данных.

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

    fuelFlowObj.Name = 'fuelFlowNew';

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

  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

importFromBaseWorkspace метод

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

addDataSource метод

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

removeDataSource метод

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

saveChanges метод

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

discardChanges метод

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

listEntry метод

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

importEnumTypes метод

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

filepath метод

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

show метод

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

hide метод

Тесное соединение между словарем данных и Simulink.data.Dictionary объект

close метод

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

Simulink.data.dictionary.getOpenDictionaryPaths

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

Simulink.data.dictionary.closeAll

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

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

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

getSection метод

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

Simulink.data.dictionary.Section класс

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

importFromFile метод

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

exportToFile метод

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

deleteEntry метод

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

evalin метод

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

find метод

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

exist метод

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

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

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

getEntry метод

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

addEntry метод

Манипулируйте записью в словаре данных

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

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

setValue метод

Отображение изменений, внесенных в запись в словаре данных

showChanges метод

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

saveChanges метод

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

discardChanges метод

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

find метод

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

getValue метод

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

deleteEntry метод

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

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

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

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

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

  • Когда вы выбираете Enable dictionary 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);

Примечание

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

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

В этом примере показано, как использовать пользовательскую функцию 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)

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

Можно хранить конфигурацию модели (a 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)

См. также

| | |

Похожие темы