Словарь данных хранит Simulink® моделировать данные и предлагает больше функций управления данными, чем MATLAB® базовое рабочее пространство или рабочее пространство модели (см. «Что такое словарь данных?»). Для программного взаимодействия с данными в словаре:
Создайте Simulink.data.Dictionary
объект, который представляет целевой словарь.
Создайте Simulink.data.dictionary.Section
объект, который представляет целевое сечение, для примера Проекта Данных сечения. Объект используется для взаимодействия с записями, хранящимися в разделе, и для добавления записей.
Вы можете создать Simulink.data.dictionary.Entry
объекты, каждый из которых представляет запись в целевом разделе. Используйте эти объекты для взаимодействия с отдельными записями в целевом разделе.
Чтобы программно получить доступ к переменным в целях протягивания значений параметров блоков, рассмотрите использование Simulink.SimulationInput
объекты вместо изменения переменных через программный интерфейс словаря данных. См. «Оптимизация, оценка и развертка Параметров блоков значений».
Для программного взаимодействия с Embedded Coder разделом словаря данных смотрите Создание определений кода программно (Embedded Coder).
Представление раздела 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');
Добавьте запись в раздел « Проектные данные» myDictionary_ex_API.sldd
запись myNewEntry
со значением 237
.
addEntry(dDataSectObj,'myNewEntry',237)
Переименуйте статью в разделе Design Data, Configurations или Other Data словаря данных.
Представление записи в словаре данных 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');
Переименуйте запись в словаре данных.
fuelFlowObj.Name = 'fuelFlowNew';
Представление записи в словаре данных 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');
Сохраните значение целевой записи во временной переменной. Увеличьте значение временной переменной на единицу.
temp = getValue(fuelFlowObj); temp = temp+1;
Установите значение целевого значения при помощи временной переменной.
setValue(fuelFlowObj,temp)
Использование Simulink.data.Dictionary
объекты для взаимодействия с целыми словарями данных.
Цель | Использовать |
---|---|
Представление существующего словаря данных с Simulink.data.Dictionary объект | |
Создайте и представьте словарь данных с Simulink.data.Dictionary объект | |
Взаимодействие со словарем данных |
|
Импортируйте переменные в словарь данных из базового рабочего пространства MATLAB |
|
Добавьте ссылку в словарь данных |
|
Удалите ссылочный словарь из словаря данных |
|
Сохраните изменения в словаре данных |
|
Отменить изменения в словаре данных |
|
Просмотр списка записей, хранящихся в словаре данных |
|
Импортируйте определения перечисленных типов в словарь данных |
|
Возвращает имя файла и путь к словарю данных |
|
Показать словарь данных в окне Model Explorer |
|
Скрыть словарь данных из окна Model Explorer |
|
Тесное соединение между словарем данных и Simulink.data.Dictionary объект |
|
Идентифицируйте словари данных, которые открыты | |
Закройте все подключения ко всем открытым словарям данных |
Словари данных хранят данные как записи, содержащиеся в разделах, и по умолчанию все словари имеют по крайней мере три раздела с именем Design Data, Other Data и Configurations. Использование Simulink.data.dictionary.Section
объекты для взаимодействия с разделами словаря данных.
Цель | Использовать |
---|---|
Представление раздела словаря данных с Section объект. |
|
Взаимодействуйте с разделом словаря данных | |
Импортируйте переменные в раздел словаря данных из MAT-файла или файла MATLAB |
|
Экспорт записей в разделе словаря данных в MAT-файл или файл MATLAB |
|
Удалите статью из раздела словаря данных |
|
Вычислите выражение MATLAB в разделе словаря данных |
|
Поиск записей в разделе словаря данных |
|
Определите, существует ли запись в разделе словаря данных |
|
Переменная, которая хранится в словаре данных, называется статьей словаря. Записи имеют дополнительные свойства, которые хранят информацию о состоянии, такие как время и дата последнего изменения записи. Использование Simulink.data.dictionary.Entry
объекты для управления записями в словаре данных.
Цель | Использовать |
---|---|
Представление записи в словаре данных с Entry объект |
|
Добавьте запись в словаре данных в раздел и представьте с Entry объект |
|
Манипулируйте записью в словаре данных | |
Присвойте новое значение записи в словаре данных |
|
Отображение изменений, внесенных в запись в словаре данных |
|
Сохраните изменения, внесенные в словарь данных |
|
Отменить изменения, внесенные в запись в словаре данных |
|
Поиск в массиве записей в словаре данных |
|
Возвращает значение записи в словаре данных |
|
Удалите запись в словаре данных |
|
Сохраните определение перечисленного типа в словаре |
Использование словаря данных может усложнить программное взаимодействие с данными моделями. Если вы связываете модель со словарем:
Вы больше не можете взаимодействовать с данными моделями, используя простые команды в командной строке. Вместо этого необходимо использовать программный интерфейс словаря (Simulink.data.Dictionary
).
Когда вы выбираете Enable dictionary access to base workspace свойства словаря (см. «Продолжить использовать разделяемые данные в базовом рабочем пространстве»), в зависимости от места хранения целевых данных, необходимо использовать либо простые команды, либо программный интерфейс.
Чтобы помочь перейти от использования базового рабочего пространства к использованию словарей данных, рассмотрите использование этих функций. Функции работают с данными моделями независимо от места хранения данных.
Цель | Использовать |
---|---|
Изменение значения записи в словаре данных или переменной рабочей области в контексте модели Simulink | |
Вычислите выражение MATLAB в контексте модели Simulink | |
Определите существование записи в словаре данных или переменной рабочей области в контексте модели Simulink |
Чтобы изменить источник данных модели 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 для импорта данных непосредственно из внешнего файла в словарь данных без создания или изменения переменных в базовом рабочем пространстве.
Создайте двумерную интерполяционную таблицу на одном листе Microsoft® Excel® рабочая книга. Используйте верхний левый угол листа, чтобы задать имена для двух точек по оси Х и для таблицы. Используйте столбцы B и строку 2 для хранения двух точек по оси Х и оставшуюся часть листа для хранения таблицы. Для примера ваша интерполяционная таблица может выглядеть следующим образом:
Сохраните книгу в текущей папке следующим my2DLUT.xlsx
.
Скопируйте это определение пользовательской функции в файл 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)
В командной строке MATLAB создайте словарь данных для хранения данных интерполяционной таблицы.
myDictionaryObj = Simulink.data.dictionary.create('myLUTDD.sldd');
Вызовите пользовательскую функцию, чтобы импортировать интерполяционную таблицу в новый словарь данных.
importLUTToDD('my2DLUT.xlsx','myLUTDD.sldd')
Откройте словарь данных в 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 словаря. Для программного изменения настройки параметра конфигурации в наборе:
Создайте Simulink.data.dictionary.Entry
объект, представляющий конфигурации модели (который является статьей в словаре). Например, предположим, что имя словаря myData.sldd
и имя Simulink.ConfigSet
объект myConfigs
.
dictionaryObj = Simulink.data.dictionary.open('myData.sldd'); configsSectObj = getSection(dictionaryObj,'Configurations'); entryObj = getEntry(configsSectObj,'myConfigs');
Сохраните копию целевой Simulink.ConfigSet
объект во временной переменной.
temp = getValue(entryObj);
Во временной переменной измените целевой параметр конфигурации (в этом случае установите Stop time на 20
).
set_param(temp,'StopTime','20');
Используйте временную переменную для перезаписи конфигурации модели в словаре.
setValue(entryObj,temp);
Сохраните изменения, внесенные в словарь.
saveChanges(dictionaryObj)
set_param
| Simulink.data.dictionary.cleanupWorkerCache
| Simulink.data.dictionary.setupWorkerCache
| Simulink.findVars