Словарь данных хранит данные модели Simulink ® и предлагает больше функций управления данными, чем базовое рабочее пространство MATLAB ® или рабочее пространство модели (см. Что такое словарь данных?). Для взаимодействия с данными в словаре программным способом:
Создать Simulink.data.Dictionary объект, представляющий целевой словарь.
Создать Simulink.data.dictionary.Section объект, представляющий целевой раздел, например раздел «Конструкторские данные». Объект используется для взаимодействия с записями, хранящимися в разделе, и добавления записей.
При необходимости создайте Simulink.data.dictionary.Entry объекты, каждый из которых представляет запись в целевом разделе. Эти объекты используются для взаимодействия с отдельными записями в целевом разделе.
Для программного доступа к переменным в целях изменения значений параметров блока рекомендуется использовать Simulink.SimulationInput вместо изменения переменных через программный интерфейс словаря данных. См. раздел Оптимизация, оценка и значения параметров блока сдвига.
Сведения о программном взаимодействии с разделом Embedded Coder словаря данных см. в разделе Создание программных определений кода (Embedded Coder).
Представление раздела «Конструкторские данные» словаря данных 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)
Переименуйте статью в разделе «Конструкторские данные», «Конфигурации» или «Другие данные» словаря данных.
Представление словарной статьи данных 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 |
|
| Добавление словаря ссылок в словарь данных |
|
| Удаление словаря ссылок из словаря данных |
|
| Сохранить изменения в словаре данных |
|
| Отменить изменения словаря данных |
|
| Просмотр списка статей, хранящихся в словаре данных |
|
| Импорт определений перечисляемых типов в словарь данных |
|
| Вернуть имя файла и путь к словарю данных |
|
| Отображение словаря данных в окне Проводника моделей |
|
| Скрыть словарь данных из окна Проводника моделей |
|
Тесная связь между словарем данных и 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);
Примечание
Этот код не переносит определения перечисляемых типов данных, которые использовались для определения переменных модели. Если импортировать переменные модели перечисляемых типов данных в словарь данных, но не переносить определения перечисляемых типов, словарь будет менее переносимым и может работать неправильно, если его использует другой пользователь. Сведения о переносе определений перечисляемых типов данных в словарь данных см. в разделе Перечисления в словаре данных.
В этом примере показано, как использовать пользовательскую функцию 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')
Откройте словарь данных в обозревателе моделей.
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 ) в разделе Конфигурации словаря. Чтобы изменить настройку конфигурационного параметра в аппарате программно, выполните следующие действия.
Создать 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