主要内容

以编程方式将数据存储在字典中

数据字典存储Simulink金宝app®模型数据,提供了比MATLAB更多的数据管理功能®基本工作区或模型工作区(参见什么是数据字典?).以编程方式与字典中的数据交互:

  1. 创建一个金宝appSimulink.data.Dictionary对象,表示目标字典。

  2. 创建一个金宝appSimulink.data.dictionary.Section对象表示目标部分,例如Design Data部分。使用该对象与存储在节中的条目进行交互并添加条目。

  3. 可选地,创建金宝appSimulink.data.dictionary.Entry对象,每个对象表示目标部分中的一个条目。使用这些对象与目标部分中的单个条目交互。

要以编程方式访问变量以扫描块参数值,请考虑使用金宝app仿真软件。SimulationInput对象,而不是通过数据字典的编程接口修改变量。看到优化、估计和扫描块参数值

以编程方式与嵌入式编码器部分的数据字典,请参见以编程方式创建代码定义(嵌入式编码)

在数据字典的设计数据部分添加条目

  1. 表示数据字典的“设计数据”部分myDictionary_ex_API.sldd与一个金宝appSimulink.data.dictionary.Section对象命名dDataSectObj

    myDictionaryObj =...金宝appSimulink.data.dictionary.open (“myDictionary_ex_API.sldd”);dDataSectObj = getSection(myDictionaryObj,设计数据的);
  2. 的“设计数据”部分添加一个条目myDictionary_ex_API.sldd一个条目myNewEntry与价值237

    addEntry (dDataSectObj“myNewEntry”, 237)

重命名数据字典条目

重命名数据字典的“设计数据”、“配置”或“其他数据”部分中的条目。

  1. 表示数据字典条目fuelFlow与一个金宝appSimulink.data.dictionary.Entry对象命名fuelFlowObjfuelFlow在数据字典中定义myDictionary_ex_API.sldd

    myDictionaryObj = 金宝appSimulink.data.dictionary.open(“myDictionary_ex_API.sldd”);dDataSectObj = getSection(myDictionaryObj,设计数据的);fuelFlowObj = getEntry(dDataSectObj,“fuelFlow”);
  2. 重命名数据字典条目。

    fuelFlowObj。Name =“fuelFlowNew”

数据字典条目的增量值

  1. 表示数据字典条目fuelFlow与一个金宝appSimulink.data.dictionary.Entry对象命名fuelFlowObjfuelFlow在数据字典中定义myDictionary_ex_API.sldd

    myDictionaryObj = 金宝appSimulink.data.dictionary.open(“myDictionary_ex_API.sldd”);dDataSectObj = getSection(myDictionaryObj,设计数据的);fuelFlowObj = getEntry(dDataSectObj,“fuelFlow”);
  2. 将目标项的值存储在临时变量中。将临时变量的值加1。

    temp = getValue(fuelFlowObj);Temp = Temp +1;
  3. 通过使用临时变量设置目标条目的值。

    setValue (fuelFlowObj、临时)

数据字典管理

使用金宝appSimulink.data.Dictionary对象与整个数据字典交互。

目标 使用
用表示现有数据字典金宝appSimulink.data.Dictionary对象

金宝appSimulink.data.dictionary.open

创建并表示数据字典金宝appSimulink.data.Dictionary对象

金宝appSimulink.data.dictionary.create

与数据字典交互

金宝appSimulink.data.Dictionary

从MATLAB基础工作空间导入变量到数据字典

importFromBaseWorkspace方法

向数据字典中添加参考字典

addDataSource方法

从数据字典中删除引用字典

removeDataSource方法

将更改保存到数据字典

saveChanges方法

丢弃对数据字典的更改

discardChanges方法

查看存储在数据字典中的条目列表

listEntry方法

将枚举类型定义导入数据字典

importEnumTypes方法

返回文件名和数据字典的路径

filepath方法

在模型资源管理器窗口中显示数据字典

显示方法

从模型资源管理器窗口中隐藏数据字典

隐藏方法

与数据字典之间的紧密连接金宝appSimulink.data.Dictionary对象

关闭方法

识别打开的数据字典

金宝appSimulink.data.dictionary.getOpenDictionaryPaths

关闭到所有打开数据字典的所有连接

金宝appSimulink.data.dictionary.closeAll

字典部管理

数据字典将数据存储为包含在节中的条目,默认情况下,所有字典至少有三个节,分别为Design Data、Other Data和Configurations。使用金宝appSimulink.data.dictionary.Section对象与数据字典节交互。

目标 使用
用表示数据字典节部分对象。

getSection方法

与数据字典部分交互

金宝appSimulink.data.dictionary.Section

从mat文件或MATLAB文件导入变量到数据字典部分

importFromFile方法

导出数据字典部分的条目到mat文件或MATLAB文件

exportToFile方法

从数据字典部分删除条目

deleteEntry方法

在数据字典部分计算MATLAB表达式

evalin方法

在数据字典部分搜索条目

找到方法

确定数据字典部分中是否存在条目

存在方法

字典输入操作

存储在数据字典中的变量称为字典的条目。条目具有存储状态信息的附加属性,例如条目最后修改的时间和日期。使用金宝appSimulink.data.dictionary.Entry对象来操作数据字典项。

目标 使用
用表示数据字典项条目对象

getEntry方法

将数据字典条目添加到节并用表示条目对象

addEntry方法

操作数据字典条目

金宝appSimulink.data.dictionary.Entry

为数据字典项指定新值

setValue方法

显示对数据字典项所做的更改

showChanges方法

保存对数据字典所做的更改

saveChanges方法

丢弃对数据字典项所做的更改

discardChanges方法

在数据字典条目数组中搜索

找到方法

数据字典条目的返回值

getValue方法

删除数据字典条目

deleteEntry方法

将枚举类型定义存储在字典中

金宝appSimulink.data.dictionary.EnumTypeDefinition

过渡到使用数据字典

使用数据字典会使与模型数据的编程交互复杂化。如果你将一个模型链接到字典:

  • 您不能再通过在命令提示符处使用简单的命令与模型数据交互。相反,您必须使用字典的编程接口(金宝appSimulink.data.Dictionary).

  • 当您选择字典属性时启用对基本工作区的字典访问(见继续在基本工作区中使用共享数据),根据目标数据的存储位置,您必须使用简单命令或编程接口。

为了帮助从使用基本工作区过渡到使用数据字典,可以考虑使用以下函数。函数对模型数据进行操作,而不考虑数据的存储位置。

目标 使用
在Simulink模型上下文中更改数据字典条目或工作空间变量的值金宝app

金宝appSimulink.data.assigninGlobal

在Simulink模型的背景下计算MATLAB表达式金宝app

金宝appSimulink.data.evalinGlobal

确定在Simulink模型上下文中数据字典条目或工作空间变量的存在性金宝app

金宝appSimulink.data.existsInGlobal

以编程方式将单个模型迁移到使用字典

要将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函数直接从外部文件导入数据到数据字典,而不需要在基本工作区中创建或更改变量。

  1. 在一个工作表中创建二维查找表®Excel®工作簿。使用工作表的左上角提供两个断点和表的名称。使用列B和行2存储两个断点,并使用表的其余部分存储表。例如,你的查找表可能是这样的:

    将工作簿保存在当前文件夹中为my2DLUT.xlsx

  2. 将这个自定义函数定义复制到一个MATLAB文件中,并将该文件保存在当前文件夹中为importLUTToDD.m

    函数importLUTToDD (workbookFile dictionaryName)% IMPORTLUTTODD(workbookFile,dictionaryName)为一个文件导入数据%二维查找表直接从工作簿转换成数据%的字典。工作簿中的二维查找表可以%任何大小,但必须遵循标准格式。阅读整个练习册的第一页。。[data,names,~] = xlsread(workbookFile,1,));将原始导入数据分为断点、表和它们的%的名字。%假设断点1在第一列中,而断点2在%第一行。假设单元格A2、B1和B2定义了断点名和表名。Bkpt1 = data(2:end,1);Bkpt2 = data(1,2:end);表= data(2:end,2:end);bkpt1Name = names{2,1};bkpt2Name = names{1,2};tableName = names{2,2};准备将目标数据导入到“设计数据”部分%的字典。myDictionaryObj = 金宝appSimulink.data.dictionary.open(dictionaryName);dDataSectObj = getSection(myDictionaryObj,设计数据的);在字典中创建条目以存储导入的断点和%表。使用导入的断点和表名命名条目%从工作簿。addEntry (dDataSectObj bkpt1Name bkpt1);addEntry (dDataSectObj bkpt2Name bkpt2);addEntry (dDataSectObj、表、表);将更改保存到字典并关闭它。saveChanges (myDictionaryObj)关闭(myDictionaryObj)
  3. 在MATLAB命令提示符下,创建一个数据字典来存储查找表数据。

    myDictionaryObj = 金宝appSimulink.data.dictionary.create(“myLUTDD.sldd”);
  4. 调用自定义函数将查找表导入到新的数据字典。

    importLUTToDD (“my2DLUT.xlsx”“myLUTDD.sldd”
  5. 在Model Explorer中打开数据字典。

    显示(myDictionaryObj)

    三个新条目存储导入的断点和查找表。这些条目可以在二维查找表块。

以编程方式划分数据字典

要将数据字典划分为参考字典,请使用此示例代码作为模板。您可以使用参考字典使大型数据字典更易于管理,并包含对多个模型有用的标准化数据。

定义一个父数据字典和两个%引用数据字典parentDDName =“myParentDictionary.sldd”;typesDDName =“myTypesDictionary.sldd”;paramsDDName =“myParamsDictionary.sldd”创建父数据字典和对象金宝app来表示它parentDD = 金宝appSimulink.data.dictionary.create(parentDDName);创建一个Simulin金宝appk.data.dictionary.Section对象来表示父字典的“设计数据”部分= 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 = find(designData_parentDD,“价值”“海尔集团”的金宝app仿真软件。参数的);i = 1:length(paramEntries) paramEntries(i)。数据源=“myParamsDictionary.sldd”结束迁移所有的Simulink。金宝app父数据字典中的NumericType对象%到参考字典typeEntries = find(designData_parentDD,“价值”“海尔集团”的金宝app仿真软件。NumericType”);i = 1:length(typeEntries) typeEntries(i)。数据源=“myTypesDictionary.sldd”结束将所有更改保存到父数据字典saveChanges (parentDD)

对存储在字典中的配置集进行更改

您可以存储一个配置集(a金宝app仿真软件。ConfigSetobject)在字典的配置部分。以编程方式更改集合中配置参数的设置:

  1. 创建一个金宝appSimulink.data.dictionary.Entry对象,该对象表示配置集(它是字典中的一个条目)。例如,假设字典的名称是myData.sldd还有这个名字金宝app仿真软件。ConfigSet对象是myConfigs

    dictionaryObj = 金宝appSimulink.data.dictionary.open(“myData.sldd”);configsSectObj = getSection(dictionaryObj,“配置”);entryObj = getEntry(configsSectObj,“myConfigs”);

  2. 存储目标的副本金宝app仿真软件。ConfigSet对象。

    temp = getValue(entryObj);

  3. 在临时变量中,修改目标配置参数(在本例中为set停止时间20.).

    set_param(临时“StopTime”“20”);

  4. 使用临时变量覆盖字典中的配置集。

    setValue (entryObj、临时);

  5. 保存对字典所做的更改。

    saveChanges (dictionaryObj)

另请参阅

|||

相关的话题