以编程方式将数据存储在字典中
数据字典存储Simulink金宝app®模型数据,提供了比MATLAB更多的数据管理功能®基本工作区或模型工作区(参见什么是数据字典?).以编程方式与字典中的数据交互:
创建一个
金宝appSimulink.data.Dictionary
对象,表示目标字典。创建一个
金宝appSimulink.data.dictionary.Section
对象表示目标部分,例如Design Data部分。使用该对象与存储在节中的条目进行交互并添加条目。可选地,创建
金宝appSimulink.data.dictionary.Entry
对象,每个对象表示目标部分中的一个条目。使用这些对象与目标部分中的单个条目交互。
要以编程方式访问变量以扫描块参数值,请考虑使用金宝app仿真软件。SimulationInput
对象,而不是通过数据字典的编程接口修改变量。看到优化、估计和扫描块参数值.
以编程方式与嵌入式编码器部分的数据字典,请参见以编程方式配置代码定义(嵌入式编码)。
在数据字典的设计数据部分添加条目
表示数据字典的“设计数据”部分
myDictionary_ex_API.sldd
与一个金宝appSimulink.data.dictionary.Section
对象命名dDataSectObj
.myDictionaryObj =...金宝appSimulink.data.dictionary.open (“myDictionary_ex_API.sldd”);dDataSectObj = getSection (myDictionaryObj,设计数据的);
的“设计数据”部分添加一个条目
myDictionary_ex_API.sldd
一个条目myNewEntry
与价值237
.addEntry (dDataSectObj“myNewEntry”, 237)
数据字典条目的增量值
表示数据字典条目
fuelFlow
与一个金宝appSimulink.data.dictionary.Entry
对象命名fuelFlowObj
.fuelFlow
在数据字典中定义myDictionary_ex_API.sldd
.myDictionaryObj = 金宝appSimulink.data.dictionary.open (“myDictionary_ex_API.sldd”);dDataSectObj = getSection (myDictionaryObj,设计数据的);fuelFlowObj = getEntry (dDataSectObj,“fuelFlow”);
将目标项的值存储在临时变量中。将临时变量的值加1。
temp = getValue (fuelFlowObj);temp = temp + 1;
通过使用临时变量设置目标条目的值。
setValue (fuelFlowObj、临时)
数据字典管理
使用金宝appSimulink.data.Dictionary
对象与整个数据字典交互。
目标 | 使用 |
---|---|
用表示现有数据字典金宝appSimulink.data.Dictionary 对象 |
|
创建并表示数据字典金宝appSimulink.data.Dictionary 对象 |
|
与数据字典交互 | |
从MATLAB基础工作空间导入变量到数据字典 | |
向数据字典中添加参考字典 | |
从数据字典中删除引用字典 | |
将更改保存到数据字典 | |
丢弃对数据字典的更改 | |
查看存储在数据字典中的条目列表 | |
将枚举类型定义导入数据字典 | |
返回文件名和数据字典的路径 | |
在模型资源管理器窗口中显示数据字典 | |
从模型资源管理器窗口中隐藏数据字典 | |
与数据字典之间的紧密连接金宝appSimulink.data.Dictionary 对象 |
|
识别打开的数据字典 | |
关闭到所有打开数据字典的所有连接 |
字典管理部分
数据字典将数据存储为包含在节中的条目,默认情况下,所有字典至少有三个节,分别为Design Data、Other Data和Configurations。使用金宝appSimulink.data.dictionary.Section
对象与数据字典节交互。
目标 | 使用 |
---|---|
用表示数据字典节部分 对象。 |
|
与数据字典部分交互 | |
从mat文件或MATLAB文件导入变量到数据字典部分 | |
导出数据字典部分的条目到mat文件或MATLAB文件 | |
从数据字典部分删除条目 | |
在数据字典部分计算MATLAB表达式 | |
在数据字典部分搜索条目 | |
确定数据字典部分中是否存在条目 |
字典条目操作
存储在数据字典中的变量称为字典的条目。条目具有存储状态信息的附加属性,例如条目最后修改的时间和日期。使用金宝appSimulink.data.dictionary.Entry
对象来操作数据字典项。
目标 | 使用 |
---|---|
用表示数据字典项条目 对象 |
|
将数据字典条目添加到节并用表示条目 对象 |
|
操作数据字典条目 | |
为数据字典项指定新值 | |
显示对数据字典项所做的更改 | |
保存对数据字典所做的更改 | |
丢弃对数据字典项所做的更改 | |
在数据字典条目数组中搜索 | |
数据字典条目的返回值 | |
删除数据字典条目 | |
将枚举类型定义存储在字典中 |
过渡到使用数据字典
使用数据字典会使与模型数据的编程交互复杂化。如果你将一个模型链接到字典:
您不能再通过在命令提示符处使用简单的命令与模型数据交互。相反,您必须使用字典的编程接口(
金宝appSimulink.data.Dictionary
).当您选择字典属性时启用对基本工作区的访问(见继续在基本工作区中使用共享数据),根据目标数据的存储位置,您必须使用简单命令或编程接口。
为了帮助从使用基本工作区过渡到使用数据字典,可以考虑使用以下函数。函数对模型数据进行操作,而不考虑数据的存储位置。
目标 | 使用 |
---|---|
在Simulink模型上下文中更改数据字典条目或工作空间变量的值金宝app | |
在Simulink模型的背景下计算MATLAB表达式金宝app | |
确定在Simulink模型上下文中数据字典条目或工作空间变量的存在性金宝app |
以编程方式将单个模型迁移到使用字典
要将Simulink模型的数据源从MATLAB基础工作空间更改金宝app为新的数据字典,请使用此示例代码作为模板。
定义模型名称和数据字典名称modelName =“f14”;dictionaryName =“myNewDictionary.sldd”;加载目标模型load_system (modelName);标识在基本工作区中定义的所有模型变量。varsToImport = 金宝appSimulink.findVars (modelName,“SourceType”,“基础工作”);varNames = {varsToImport.Name};创建数据字典dictionaryObj = 金宝appSimulink.data.dictionary.create (dictionaryName);将基库中定义的模型变量导入字典%工作区,并从基本工作区中清除变量[importSuccess, importFailure] = importFromBaseWorkspace (dictionaryObj,...“varList”varNames,“clearWorkspaceVars”,真正的);将字典链接到模型set_param (modelName“DataDictionary”, dictionaryName);
请注意
此代码不迁移用于定义模型变量的枚举数据类型的定义。如果您将枚举数据类型的模型变量导入数据字典,但不迁移枚举类型定义,则该字典的可移植性较差,如果由其他人使用,则可能无法正常工作。要将枚举数据类型定义迁移到数据字典,请参见数据字典中的枚举.
直接从外部文件导入到字典
这个例子展示了如何使用自定义MATLAB函数直接从外部文件导入数据到数据字典,而不需要在基本工作区中创建或更改变量。
在一个工作表中创建二维查找表®Excel®工作簿。使用工作表的左上角提供两个断点和表的名称。使用列B和行2存储两个断点,并使用表的其余部分存储表。例如,你的查找表可能是这样的:
将工作簿保存在当前文件夹中为
my2DLUT.xlsx
.将这个自定义函数定义复制到一个MATLAB文件中,并将该文件保存在当前文件夹中为
importLUTToDD.m
.函数importLUTToDD (workbookFile dictionaryName)% IMPORTLUTTODD(workbookFile,dictionaryName)为一个文件导入数据%二维查找表直接从工作簿转换成数据%的字典。工作簿中的二维查找表可以%任何大小,但必须遵循标准格式。阅读整个练习册的第一页。。(数据、名称~)= xlsread (workbookFile 1”);将原始导入数据分为断点、表和它们的%的名字。%假设断点1在第一列中,而断点2在%第一行。假设单元格A2、B1和B2定义了断点名和表名。bkpt1 =数据(2:结束,1);bkpt2 =数据(1、2:结束);表=数据(2:结束,2:结束);bkpt1Name =姓名{2,1};bkpt2Name ={1,2}名称;表名=姓名{2,};准备将目标数据导入到“设计数据”部分%的字典。myDictionaryObj = 金宝appSimulink.data.dictionary.open (dictionaryName);dDataSectObj = getSection (myDictionaryObj,设计数据的);在字典中创建条目以存储导入的断点和%表。使用导入的断点和表名命名条目%从工作簿。addEntry (dDataSectObj bkpt1Name bkpt1);addEntry (dDataSectObj bkpt2Name bkpt2);addEntry (dDataSectObj、表、表);将更改保存到字典并关闭它。saveChanges (myDictionaryObj)关闭(myDictionaryObj)
在MATLAB命令提示符下,创建一个数据字典来存储查找表数据。
myDictionaryObj = 金宝appSimulink.data.dictionary.create (“myLUTDD.sldd”);
调用自定义函数将查找表导入到新的数据字典。
importLUTToDD (“my2DLUT.xlsx”,“myLUTDD.sldd”)
在Model Explorer中打开数据字典。
显示(myDictionaryObj)
三个新条目存储导入的断点和查找表。这些条目可以在二维查找表块。
以编程方式划分数据字典
要将数据字典划分为参考字典,请使用此示例代码作为模板。您可以使用参考字典使大型数据字典更易于管理,并包含对多个模型有用的标准化数据。
定义一个父数据字典和两个%引用数据字典parentDDName =“myParentDictionary.sldd”;typesDDName =“myTypesDictionary.sldd”;paramsDDName =“myParamsDictionary.sldd”;创建父数据字典和对象金宝app来表示它parentDD = 金宝appSimulink.data.dictionary.create (parentDDName);创建一个Simulin金宝appk.data.dictionary.Section对象来表示父字典的“设计数据”部分designData_parentDD = getSection (parentDD,设计数据的);将一些数据从文件partDD_Data_ex_API.m导入到父字典importFromFile (designData_parentDD“partDD_Data_ex_API.m”);创建两个参考字典金宝appSimulink.data.dictionary.create (typesDDName);金宝appSimulink.data.dictionary.create (paramsDDName);通过添加引用字典来创建引用字典层次结构。%到父字典addDataSource (parentDD typesDDName);addDataSource (parentDD paramsDDName);迁移所有的Simulink。金宝app参数对象的父数据字典参考词典paramEntries =找到(designData_parentDD,“价值”,“海尔集团”,的金宝app仿真软件。参数的);为i = 1:length(paramEntries) paramEntries(i)。数据源=“myParamsDictionary.sldd”;结束迁移所有的Simulink。金宝app父数据字典中的NumericType对象%到参考字典typeEntries =找到(designData_parentDD,“价值”,“海尔集团”,的金宝app仿真软件。NumericType”);为i = 1:length(typeEntries) typeEntries(i)。数据源=“myTypesDictionary.sldd”;结束将所有更改保存到父数据字典saveChanges (parentDD)
对存储在字典中的配置集进行更改
您可以存储一个配置集(a金宝app仿真软件。ConfigSet
object)在字典的配置部分。以编程方式更改集合中配置参数的设置:
创建一个
金宝appSimulink.data.dictionary.Entry
对象,该对象表示配置集(它是字典中的一个条目)。例如,假设字典的名称是myData.sldd
还有这个名字金宝app仿真软件。ConfigSet
对象是myConfigs
.dictionaryObj = 金宝appSimulink.data.dictionary.open (“myData.sldd”);configsSectObj = getSection (dictionaryObj,“配置”);entryObj = getEntry (configsSectObj,“myConfigs”);
存储目标的副本
金宝app仿真软件。ConfigSet
对象。temp = getValue (entryObj);
在临时变量中,修改目标配置参数(在本例中为set停止时间来
20.
).set_param(临时“StopTime”,“20”);
使用临时变量覆盖字典中的配置集。
setValue (entryObj、临时);
保存对字典所做的更改。
saveChanges (dictionaryObj)
另请参阅
金宝appSimulink.data.dictionary.cleanupWorkerCache
|金宝appSimulink.data.dictionary.setupWorkerCache
|金宝appSimulink.findVars
|set_param