Словарь данных хранит данные модели Simulink® и предлагает больше функций управления данными, чем базовое рабочее пространство MATLAB® или рабочее пространство модели (см. то, Что Словарь Данных?). Взаимодействовать с данными в словаре программно:
Создайте объект Simulink.data.Dictionary
, который представляет целевой словарь.
Создайте объект Simulink.data.dictionary.Section
, который представляет целевой раздел, например, раздел Design Data. Используйте объект взаимодействовать с записями, сохраненными в разделе и добавить записи.
Опционально, создайте объекты 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');
Добавьте запись в раздел Design Data myDictionary_ex_API.sldd
запись myNewEntry
со значением 237
.
addEntry(dDataSectObj,'myNewEntry',237)
Представляйте запись в словаре данных 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 | |
Идентифицируйте словари данных, которые открыты | |
Закройте все связи со всеми открытыми словарями данных |
Словари данных хранят данные как записи, содержавшиеся в разделах, и по умолчанию все словари имеют по крайней мере три раздела под названием Данные проектирования, Другие Данные и Настройки. Используйте объекты Simulink.data.dictionary.Section
взаимодействовать с разделами словаря данных.
Цель | Использование |
---|---|
Представляйте раздел словаря данных с объектом Section . | |
Взаимодействуйте с разделом словаря данных | |
Импортируйте переменные к разделу словаря данных из MAT-файла или файла MATLAB | |
Экспортируйте записи в разделе словаря данных к MAT-файлу или файлу MATLAB | |
Удалите запись из раздела словаря данных | |
Выполните выражение MATLAB в разделе словаря данных | |
Ищите записи в разделе словаря данных | |
Определите, существует ли запись в разделе словаря данных |
Переменная, которая хранится в словаре данных, называется записью словаря. Записи имеют дополнительные свойства, которые хранят информацию о статусе, такую как время и дата, запись была в последний раз изменена. Используйте объекты Simulink.data.dictionary.Entry
управлять записями в словаре данных.
Цель | Использование |
---|---|
Представляйте запись в словаре данных с объектом Entry | |
Добавьте запись в словаре данных, чтобы разделить и представлять с объектом Entry | |
Управляйте записью в словаре данных | |
Присвойте новое значение записи в словаре данных | |
Отобразите изменения, внесенные в запись в словаре данных | |
Сохраните изменения, внесенные в словарь данных | |
Отмените изменения, внесенные в запись в словаре данных | |
Поиск в массиве записей в словаре данных | |
Возвращаемое значение записи в словаре данных | |
Удалите запись в словаре данных | |
Сохраните определение перечислимого типа в словаре |
Используя данные словарь может усложнить программируемое взаимодействие с данными модели. Если вы соединяете модель со словарем:
Вы больше не можете взаимодействовать с данными модели при помощи простых команд в командной строке. Вместо этого необходимо использовать программируемый интерфейс словаря (Simulink.data.Dictionary
).
Когда вы выбираете свойство Enable 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);
Этот код не перемещает определения перечислимых типов данных, которые использовались к переменным модели define. Если вы импортируете образцовые переменные перечислимых типов данных к словарю данных, но не перемещаете определения перечислимого типа, словарь является менее портативным и не может функционировать правильно, если используется кем-то еще. Чтобы переместить перечисленные определения типов на словарь данных, смотрите Перечисления в Словаре Данных.
Этот пример показывает, как использовать пользовательскую функцию 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 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)
В подсказке команды MATLAB создайте словарь данных, чтобы хранить данные об интерполяционной таблице.
myDictionaryObj = Simulink.data.dictionary.create('myLUTDD.sldd');
Вызовите пользовательскую функцию, чтобы импортировать вашу интерполяционную таблицу к новому словарю данных.
importLUTToDD('my2DLUT.xlsx','myLUTDD.sldd')
Откройте словарь данных в 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 словаря. Изменить настройки параметра конфигурации в наборе программно:
Создайте объект 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)
Simulink.data.dictionary.cleanupWorkerCache
| Simulink.data.dictionary.setupWorkerCache
| Simulink.findVars
| set_param