主要内容

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

一个数据字典存储着Simulink万博1manbetx®模型数据并提供比MATLAB更多的数据管理功能®基础工作区或模型工作区(请参阅什么是数据字典?).要编程地与字典中的数据进行交互:

  1. 创建一个万博1manbetxSimulink.data.Dictionary代表目标词典的对象。

  2. 创建一个万博1manbetxSimulink.data.dictionary.Section对象,该对象表示目标部分,例如设计数据部分。使用该对象与存储在节中的条目进行交互并添加条目。

  3. 可选地,创建万博1manbetxSimulink.data.dictionary.Entry对象,每个对象表示目标部分中的一个条目。使用这些对象与目标部分中的单个条目进行交互。

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

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

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

  1. 表示数据字典的设计数据部分myDictionary_ex_API.sldd与A.万博1manbetxSimulink.data.dictionary.Section对象命名dDataSectObj

    mydictionaryobj =...万博1manbetxSimulink.data.dictionary.open (“myDictionary_ex_API.sldd”);dDataSectObj = getSection (myDictionaryObj,'设计数据');
  2. 添加到设计数据部分的条目myDictionary_ex_API.sldd一个条目myNewEntry价值237

    添加剂(ddatasectobj,'mynewentry', 237)

重命名数据字典条目

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

  1. 表示数据字典条目fuelflow.与A.万博1manbetxSimulink.data.dictionary.Entry对象命名fuelFlowObjfuelflow.在数据字典中定义myDictionary_ex_API.sldd

    myDictionaryObj = 万博1manbetxSimulink.data.dictionary.open (“myDictionary_ex_API.sldd”);dDataSectObj = getSection (myDictionaryObj,'设计数据');fuelFlowObj = getEntry (dDataSectObj,'fuelflow');
  2. 重命名数据字典条目。

    fuelFlowObj。Name ='fuelflownew'

数据字典条目的增量值

  1. 表示数据字典条目fuelflow.与A.万博1manbetxSimulink.data.dictionary.Entry对象命名fuelFlowObjfuelflow.在数据字典中定义myDictionary_ex_API.sldd

    myDictionaryObj = 万博1manbetxSimulink.data.dictionary.open (“myDictionary_ex_API.sldd”);dDataSectObj = getSection (myDictionaryObj,'设计数据');fuelFlowObj = getEntry (dDataSectObj,'fuelflow');
  2. 将目标条目的值存储在临时变量中。将临时变量的值递增一个。

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

    SetValue(Fuelflowobj,Temp)

数据词典管理

使用万博1manbetxSimulink.data.Dictionary对象来与整个数据字典交互。

目标 使用
代表现有数据词典万博1manbetxSimulink.data.Dictionary对象

万博1manbetxSimulink.data.dictionary.open

使用创建和表示数据字典万博1manbetxSimulink.data.Dictionary对象

万博1manbetxSimulink.data.dictionary.create

与数据字典交互

万博1manbetxSimulink.data.Dictionary

从MATLAB基础工作区导入数据字典的导入变量

ImportFrombaseWorkspace.方法

将引用字典添加到数据字典中

adddatasource.方法

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

removeDataSource方法

保存更改到数据字典

保存更改方法

丢弃对数据字典的更改

discardChanges方法

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

列表方法

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

Importenumtypes.方法

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

文件路径方法

在Model Explorer窗口中显示数据字典

显示方法

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

隐藏方法

数据字典之间的密切连接万博1manbetxSimulink.data.Dictionary对象

关闭方法

确定打开的数据字典

万博1manbetxsimulink.data.dictionary.getopendicationarypaths.

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

万博1manbetxSimulink.data.dictionary.closeAll

字典管理部分

数据字典将数据存储为部分中包含的条目,默认情况下,所有字典至少有三个部分,分别为设计数据、其他数据和配置。使用万博1manbetxSimulink.data.dictionary.Section对象与数据字典部分交互。

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

getSection方法

与数据字典部分交互

万博1manbetxSimulink.data.dictionary.Section

将变量导入Mat文件或MATLAB文件的数据字典部分

importFromFile方法

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

exportToFile方法

删除数据字典部分的条目

deleteEntry方法

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

evalin方法

在数据字典部分搜索条目

找到方法

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

存在方法

字典条目操作

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

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

佩特特里方法

将数据字典条目添加到section并表示为条目对象

addEntry方法

操作数据字典条目

万博1manbetxSimulink.data.dictionary.Entry

为数据字典条目分配新值

setValue方法

显示数据字典条目所做的更改

showChanges方法

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

保存更改方法

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

discardChanges方法

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

找到方法

返回数据字典条目的值

GetValue.方法

删除数据字典条目

deleteEntry方法

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

万博1manbetxSimulink.data.dictionary.EnumTypeDefinition

过渡到使用数据字典

使用数据字典可以使模型数据复杂化编程交互。如果将模型链接到字典:

  • 您不再能够通过在命令提示符中使用简单的命令与模型数据进行交互。相反,您必须使用字典的编程接口(万博1manbetxSimulink.data.Dictionary).

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

为了帮助从使用基本工作空间转换到使用数据字典,请考虑使用这些函数。这些函数对模型数据进行操作,而不考虑数据的存储位置。

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

万博1manbetxSimulink.data.assigninGlobal

评估Simulink模型背景下的MATLAB表达万博1manbetx

万博1manbetxSimulink.data.evalinGlobal

在Simulink模型的上下文中确定数据字典条目或工作空间变量的存在万博1manbetx

万博1manbetxsimulink.data.existinglobal.

以编程方式将单个模型迁移到Use Dictionary

要将Simulink模型的数据源从MATLAB基础工作空间更改万博1manbetx为一个新的数据字典,可以使用下面的示例代码作为模板。

%定义模型名称和数据字典名称modelname =.'f14';dictionaryName =“myNewDictionary.sldd”%加载目标模型load_system(modelname);%标识基础工作区中定义的所有模型变量varsToImport = 万博1manbetxSimulink.findVars (modelName,'sourcetype'“基础工作”);varNames = {varsToImport.Name};%创建数据字典divistmberobj = 万博1manbetxsimulink.data.dictionary.create(dibositpheryname);%将基础中定义的模型变量导入到字典中%工作区,并从基本工作区中清除变量[importSuccess, importFailure] = importFromBaseWorkspace (dictionaryObj,...'Varlist'varNames,'clearworkspacevars',真正的);将字典链接到模型set_param (modelName'datadictionary',词典);

请注意

此代码不会迁移枚举数据类型的定义,用于定义模型变量。如果将枚举数据类型的模型变量导入数据字典,但不迁移枚举类型定义,字典少便携,如果其他人使用,可能无法正常运行。要将枚举数据类型定义迁移到数据字典,请参阅数据字典中的枚举

直接从外部文件导入到字典

此示例显示如何使用自定义MATLAB函数直接从外部文件导入数据字典,而无需在基础工作区中创建或更改变量。

  1. 在Microsoft的一个工作表中创建一个二维查找表®excel.®工作簿。使用纸张的左上角为两个断点和表提供名称。使用列B和第2行来存储两个断点,并使用纸张的其余部分存储表。例如,您的查找表可能如下所示:

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

  2. 将此自定义函数定义复制到MATLAB文件中,然后将文件保存在当前文件夹中importLUTToDD.m

    函数importluttodd(Workbookfile,dibberobname)%importluttodd(Workbookfile,dibberobame)导入数据%二维查询表从工作簿直接进入数据%的字典。工作簿中的二维查询表可以是%任何大小,但必须遵循标准格式。%阅读工作簿的整个第一个工作表。(数据、名称~)= xlsread (workbookFile 1'');%将原始导入数据划分为断点、表和它们的%名称。%假设断点1在第一列,断点2在% 第一排。%假设单元格A2,B1和B2定义断点名称和表名。bkpt1 =数据(2:结束,1);bkpt2 =数据(1,2:结束);表=数据(2:结束,2:结束);bkpt1name =名称{2,1};bkpt2name =名称{1,2};tablename =名称{2,2};%准备导入到目标数据的设计数据部分%的字典。myDictionaryObj = 万博1manbetxSimulink.data.dictionary.open (dictionaryName);dDataSectObj = getSection (myDictionaryObj,'设计数据');%在字典中创建条目以存储导入的断点和%表。使用导入的断点和表名为条目命名从工作簿的%。addEntry (dDataSectObj bkpt1Name bkpt1);addEntry (dDataSectObj bkpt2Name bkpt2);addEntry (dDataSectObj、表、表);%保存更改到字典并关闭它。saveChanges (myDictionaryObj)关闭(myDictionaryObj)
  3. 在MATLAB命令提示符下,创建一个数据字典来存储查找表数据。

    mydictionaryobj = 万博1manbetxsimulink.data.dictionary.Create(“myLUTDD.sldd”);
  4. 调用自定义函数将查找表导入新的数据字典。

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

    展示(MyDictionaryobj)

    三个新条目存储导入的断点和查找表。这些条目已准备好使用二维查找表块。

以编程方式划分数据字典

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

%定义父数据字典的名称和两个%参考数据词典parentDDName =“myParentDictionary.sldd”;typesDdname =.'mytypesdictionary.sldd';paramsDDName =“myParamsDictionary.sldd”%创建父数据字典%s万博1manbetximulink.data.dictionary对象表示它parentDD = 万博1manbetxSimulink.data.dictionary.create (parentDDName);%创建一个simuli万博1manbetxnk.data.dictionary.section对象以表示%父词典的设计数据部分designData_parentDD = getSection (parentDD,'设计数据');%从partDD_Data_ex_API.m文件中导入一些数据到父字典importFromFile (designData_parentDD“partDD_Data_ex_API.m”);创建两个引用字典万博1manbetxSimulink.data.dictionary.create (typesDDName);万博1manbetxSimulink.data.dictionary.create (paramsDDName);%通过添加引用字典来创建引用字典层次结构%到父字典addDataSource (parentDD typesDDName);addDataSource (parentDD paramsDDName);%从父数据字典中迁移所有Si万博1manbetxmulink.Parameter对象%参考词典paramEntries =找到(designData_parentDD,'-价值'“海尔集团”的万博1manbetx仿真软件。参数的);i = 1:长度(paramentries)paramentries(i).datasource =“myParamsDictionary.sldd”结束%迁移所有Simulink。万博1manbetx父数据字典中的NumericType对象%到参考字典typeEntries =找到(designData_parentDD,'-价值'“海尔集团”的万博1manbetx仿真软件。NumericType”);i = 1:长度(typeentries)typeentries(i).dataSource ='mytypesdictionary.sldd'结束%将所有更改保存到父数据字典Savechanges(parentdd)

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

您可以存储配置集(a万博1manbetxsimulink.configset.对象)在字典的配置部分中。要以编程方式更改集合中配置参数的设置,请执行以下操作:

  1. 创建一个万博1manbetxSimulink.data.dictionary.Entry对象,该对象表示配置集(字典中的条目)。例如,假设字典的名称是mydata.sldd.名字万博1manbetxsimulink.configset.对象是myConfigs

    dictionaryObj = 万博1manbetxSimulink.data.dictionary.open ('mydata.sldd');configssectobj = getared(divitiondobj,'配置');ententobj = getEntry(configssectobj,“myConfigs”);

  2. 存储目标的副本万博1manbetxsimulink.configset.临时变量中的对象。

    temp = getValue (entryObj);

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

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

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

    setValue (entryObj、临时);

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

    saveChanges (dictionaryObj)

另请参阅

|||

相关的话题