这个示例展示了如何使用和记录本地数据存储。它还展示了如何定义、使用和记录全局数据存储,以便在引用的模型之间共享全局数据。
打开示例模型。顶部模型sldemo_mdlref_dsm
参考模型sldemo_mdlref_dsm_bot
和sldemo_mdlref_dsm_bot2
.打开数据存储的日志记录sldemo_mdlref_dsm
在“配置参数”对话框的“数据导入/导出”窗格中。
参考模型sldemo_mdlref_dsm_bot
如果信号是正的,将输入信号放大5;如果信号是负的,将信号放大2,并将该信号的值写入本地数据存储RefSignalVal
.这个本地数据存储被配置为在模拟之后将所有写入的值记录到工作空间中。控件控制此本地数据存储的日志记录参数日志记录选项卡的块参数对话框。
参考模型sldemo_mdlref_dsm_bot2
设置名为的全局布尔数据存储的值ErrorCond
如果传入信号的值超出范围(-0.8,0.8),则为真。顶部模型还监视数据存储ErrorCond
并根据数据存储的值在两个引用模型的输出之间切换。
为了向Simulink指定顶金宝app级模型和两个被引用的模型使用相同的内存作为命名的数据存储ErrorCond
在每个模型中,创建一个实例金宝app仿真软件。信号
对象命名ErrorCond
在每个模型可见的工作空间或数据字典中。因为这个对象对每个模型都是可见的,所以它的作用域包含各个模型,并意味着模型之间共享一个同名的全局数据存储。注意,这三个模型中没有一个包含数据存储内存块,数据存储名称为ErrorCond
.如果任何模型包含这样一个块,那么该块将定义一个模型本地的数据存储,而该数据存储将覆盖全局数据存储。
由于对象ErrorCond
定义全局数据存储时,必须显式定义数据类型
,复杂性
,维
属性设置为非继承设置。SampleTime
和StorageClass
可以保留为其继承的值,也可以显式设置。
这个例子包括一个名为sldemo_mdlref_dsm_data.mat
包含金宝app仿真软件。信号
对象ErrorCond
.模型的预载函数sldemo_mdlref_dsm
加载这个mat文件,使对象在基本工作空间中被加载。您可以通过在Model Explorer中选择基本工作区来查看该对象。您也可以从MATLAB®命令提示符创建此对象。下面的命令定义了这个例子中使用的对象:
ErrorCond = 金宝appSimulink.Signal;ErrorCond。Description = '用来表示子系统输出无效';ErrorCond。数据类型= 'boolean'; ErrorCond.Complexity = 'real'; ErrorCond.Dimensions = 1; ErrorCond.SampleTime = 0.1; ErrorCond.LoggingInfo.DataLogging = true;
要记录写入全局数据存储的所有值,请设置数据采集
财产的LoggingInfo
财产的金宝app仿真软件。信号
对象。的LoggingInfo
属性还允许指定其他日志参数,如抽取和最大点数。
金宝app仿真软件。日志记录Info (handle) DataLogging: 1 NameMode: 0 LoggingName: '' DecimateData: 0 Decimation: 2 LimitDataPoints: 0 MaxPoints: 5000
现在你可以模拟sldemo_mdlref_dsm
查看输出。的参考模型sldemo_mdlref_dsm_bot
写入数据存储ErrorCond
而顶级模特sldemo_mdlref_dsm
从数据存储中读取。蓝线表示输入sldemo_mdlref_dsm_bot
;绿线表示Switch块的输出。请注意,当输入信号的幅度超出量程时,输出切换。
两者都是全局数据存储ErrorCond
本地数据存储RefSignalVal
配置为在模拟后记录所有写入的值。的基本工作区中存储这些记录的结果dsmout
变量。
dsmout = 金宝appSimulink.SimulationData.Dataset dsmout BlockPath 2元素名称 ____________ ________________________________________ 1 1 x1 DataStoreMemory ErrorCond”2 [1 x1 DataStoreMemory] RefSignalVal……dlref_dsm/A|sldemo_mdlref_dsm_bot/DSM -使用大括号{}来访问、修改或使用索引添加元素。
若要访问本地数据存储的数据,请使用getElement
函数以根据名称获取正确的数据存储元素RefSignalVal
.
> > dsmout.getElement(“RefSignalVal”)
金宝appSimulink.SimulationData.DataStoreMemory包:仿真软件。SimulationData属性:名称:'RefSignalVal' BlockPath: [1x1 Simulink.Simu金宝applationData. BlockPath: [1x1 Simulink.SimulationData. BlockPath]DSMWriterBlockPaths: [1x2 Simulink.SimulationData。金宝appBlockPath] DSMWriters: [101x1 uint32] Values: [1x1 timeseries]
数据存储在timeseries
在值
字段。
> >的情节(dsmout.getElement (RefSignalVal) . values);
要确定在给定的时间将哪个块写入数据存储,请使用DSMWriters
财产。对象的索引列表DSMWriterBlockPaths
数组中。例如,数据存储写入第5个值的写块的块路径如下所示:
>> dsm = dsmout.getElement('RefSignalVal');> > dsm.DSMWriterBlockPaths (dsm.DSMWriters (5))
金宝appSimulink.SimulationData.BlockPath包:仿真软件。使用getBlock方法从该对象访问块路径字符向量。