Словарь данных хранит данные модели 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)
Переименуйте запись в Данных проектирования, Настройках или разделе 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 объект |
|
Идентифицируйте словари данных, которые открыты | |
Закройте все связи со всеми открытыми словарями данных |
Словари данных хранят данные как записи, содержавшиеся в разделах, и по умолчанию все словари имеют по крайней мере три раздела под названием Данные проектирования, Другие Данные и Настройки. Используйте 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);
Этот код не перемещает определения перечислимых типов данных, которые использовались к переменным модели 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 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)
Можно сохранить конфигурацию модели (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