exponenta event banner

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

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

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

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

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

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

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

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

  1. Представление раздела «Конструкторские данные» словаря данных 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)

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

Переименуйте статью в разделе «Конструкторские данные», «Конфигурации» или «Другие данные» словаря данных.

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

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

show метод

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

hide метод

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

close метод

Определение открытых словарей данных

Simulink.data.dictionary.getOpenDictionaryPaths

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

Simulink.data.dictionary.closeAll

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

Словари данных хранят данные в виде записей, содержащихся в разделах, и по умолчанию все словари имеют как минимум три раздела с именами «Данные проекта», «Другие данные» и «Конфигурации». Использовать 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. Откройте словарь данных в обозревателе моделей.

    show(myDictionaryObj)

    В трех новых записях хранятся импортированные точки останова и таблица подстановки. Эти записи готовы использовать в 2-м блоке Справочной таблицы.

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

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

% 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 ) в разделе Конфигурации словаря. Чтобы изменить настройку конфигурационного параметра в аппарате программно, выполните следующие действия.

  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)

См. также

| | |

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