迁移到数据字典之前的注意事项
将模型链接到数据字典后,可以选择将数据从基础工作区迁移到字典中。如果您选择迁移数据,请考虑这些注意事项。
检查数据加载回调
您可以使用模型回调(例如
PreLoadFcn
回调)在加载模型时将设计数据从文件加载到基础工作区中。例如,以下回调从 MAT 文件
myData.mat
中加载设计数据。
迁移到数据字典后,这些回调会继续将设计数据加载到基础工作区中。由于模型稍后会从字典中导出设计数据,请手动删除或注释掉这些数据加载回调。
您可以使用依存关系分析器来查找数据加载回调。请参阅
Analyze Model Dependencies
。
检查脚本
默认情况下,新模型可以访问基础工作区,链接到数据字典时也不会失去访问权限。在编写脚本时,必须假设模型可以访问基础工作区、数据字典或两者。
如果使用脚本中的句柄
base
对基础工作区进行显式引用,请考虑更改这些引用。
请参考如下示例。此处,脚本在基础工作区中搜索变量
sensor
,并根据
sensor.noiseEnable
的值设置参数
enable
。
if evalin('base','sensor.noiseEnable')
enable = 'Enabled';
enable = 'Disabled';
end
迁移到数据字典时,请替换这些对
base
的显式引用,如下所示:
if Simulink.data.evalinGlobal(myExampleModel,...
'sensor.noiseEnable')
enable = 'Enabled';
enable = 'Disabled';
end
Simulink.data.evalinGlobal
函数计算指定模型的全局作用域内的一个表达式。此处,如果模型未链接到字典,则全局作用域可以是数据字典或基础工作区。
检查代码生成的可调参数
-
如果模型链接到数据字典,但模型没有对基础工作区的访问权限(请参阅
继续使用基础工作区的共享数据
),则 Simulink 将忽略在“模型参数配置”对话框中指定的存储类信息。
-
如果使用 Simulink 接口迁移模型以使用数据字典,并选择迁移基础工作区数据,则 Simulink 会同时迁移模型的存储类信息。如果模型包含基础工作区中变量的存储类信息,则 Simulink 会在迁移期间将这些变量转换为
Simulink.Parameter
对象。然后,Simulink 使用来自模型的存储类信息设置这些
Simulink.Parameter
对象的存储类。
-
如果将此模型迁移回基础工作区,则 Simulink 不会还原模型中的存储类信息。要保留这些变量的存储类,请使用来自数据字典的参数对象。您还可以手动重置模型中的存储类信息。
-
如果从命令行设置模型的
DataDictionary
属性,则可以使用
tunablevars2parameterobjects
函数将可调参数转换为
Simulink.Parameter
对象。
有效的设计数据类
在 Simulink 数据字典的
设计数据
部分中,您可以导入、存储或创建使用 Simulink 支持的数据类型(如
boolean
和
int32
)的 MATLAB 变量以及结构体。您还可以使用以下类的对象和对这些类创建子类的大多数类的对象:
此外,您还可以在 Simulink 数据字典的
配置
部分中导入、存储或创建以下类的配置对象:
无效的其他数据类
您可以在 Simulink 数据字典的
其他数据
部分中导入、存储或创建许多内置和自定义类或数据类型的数据对象,但以下各项除外:
-
基于内置或自定义类创建的对象数组
-
具有使用以下任一名称的属性的自定义类:
-
LastModified
-
LastModifiedBy
-
DataSource
-
Status
-
Variant
使用
From Workspace
模块进行迁移
如果模型包含引用基础工作区中变量的
From Workspace
模块,则可以将该模型迁移到数据字典。但是,根据模块引用的变量的性质,迁移过程采取不同操作:
-
如果变量的值不是
timeseries
对象,则迁移过程会将变量导入数据字典的“设计数据”部分。该模块仍可以引用该变量。
-
如果变量的值是
timeseries
对象(数据字典无法存储该对象),或是具有与 timeseries 对象相同字段的结构体,则迁移过程不会导入该变量。当您之后尝试更新图或仿真模型时,
From Workspace
模块将找不到该变量并引发错误。在这种情况下,您可以使用
evalin
函数将模块配置为引用基础工作区变量。有关详细信息,请参阅
From Workspace
。
数据字典限制
-
Simulink 不能自动将仅由非活动变体模型使用的变量迁移到数据字典中。
-
您不能将某些类型的设计数据(如
matlab.metadata.Class
对象和
timeseries
对象)导入数据字典的“设计数据”部分中。
-
Simulink 不允许对链接到数据字典的模型进行隐式信号解析。要使用数据字典,请将模型配置参数
信号解析
设置为
仅显式
或
无
。
-
如果模型引用层次结构已链接到数据字典,您可以对作为层次结构一部分的引用模型进行保护。但是,如果迁移包含受保护模型的模型引用层次结构,则仿真将失败。
换句话说,需要先迁移该模型以使用数据字典,然后再进行模型保护。
-
可能不支持计算包含存储在数据字典中的 Simulink 变量或数据类型的表达式。
Run the command by entering it in the MATLAB Command Window.
Web browsers do not support MATLAB commands.