这个示例展示了如何使用和记录本地数据存储。它还展示了如何定义、使用和记录全局数据存储,以便在引用的模型之间共享全局数据。
打开示例模型。顶部模型sldemo_mdlref_dsm
参考模型sldemo_mdlref_dsm_bot
和sldemo_mdlref_dsm_bot2
.打开数据存储的日志记录sldemo_mdlref_dsm
在“配置参数”对话框的“数据导入/导出”窗格上。
参考模型sldemo_mdlref_dsm_bot
如果信号为正,则将输入信号放大5;如果信号为负,则将输入信号放大2,并将该信号的值写入本地数据存储器参考信号值
.这个本地数据存储被配置为在模拟之后将所有写入的值记录到工作空间中。控件控制此本地数据存储的日志记录参数日志记录“块参数”对话框的选项卡。
参考模型sldemo_mdlref_dsm_bot2
设置名为的全局布尔数据存储的值ErrorCond
如果传入信号的值超出范围(-0.8,0.8),则为真。顶部模型还监视数据存储ErrorCond
并根据数据存储的值在两个引用模型的输出之间切换。
向Simulink指定顶部模万博1manbetx型和两个引用模型对名为的数据存储使用相同的内存ErrorCond
在每个模型中,创建一个实例万博1manbetx模拟信号
名为ErrorCond
在对每个模型可见的工作区或数据字典中。由于该对象对每个模型都可见,因此其范围包括各个模型,并意味着在模型之间共享一个同名的全局数据存储。请注意,这三个模型都不包含数据存储名称为的数据存储内存块ErrorCond
.如果任何模型包含这样一个块,那么该块将定义一个模型本地的数据存储,而该数据存储将覆盖全局数据存储。
既然对象ErrorCond
定义全局数据存储时,必须显式定义数据类型
,复杂性
和维
属性设置为非继承设置。SampleTime
和StorageClass
可以保留为其继承的值,也可以显式设置。
这个例子包括一个名为sldemo_mdlref_dsm_data.mat
包含万博1manbetx模拟信号
对象ErrorCond
.模型的预加载功能sldemo_mdlref_dsm
加载这个mat文件,使对象在基本工作空间中被加载。您可以通过在Model Explorer中选择基本工作区来查看该对象。您也可以从MATLAB®命令提示符创建此对象。下面的命令定义了这个例子中使用的对象:
ErrorCond=模拟万博1manbetx链接信号;ErrorCond.Description='用于表示子系统输出无效';ErrorCond.DataType='boolean';ErrorCond.Complexity='real';ErrorCond.尺寸=1;ErrorCond.SampleTime=0.1;ErrorCond.LoggingInfo.DataLogging=true;
要记录写入全局数据存储的所有值,请设置数据记录
财产LoggingInfo
财产万博1manbetx模拟信号
对象。的LoggingInfo
属性还允许指定其他日志参数,如抽取和最大点数。
万博1manbetx仿真软件。日志记录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
本地数据存储参考信号值
配置为在模拟后记录所有写入的值。的基本工作区中存储这些记录的结果dsmout
变量。
数据集数据集“ds万博1manbetxm”数据集“dsm”数据集“dsm”数据集“dsm”数据集“dsm”数据集“dsm”数据集“dsm”数据集”数据集“dsm”数据集“dsm”数据集“dsm”数据集”数据集“dsm”数据集“dsm”数据集”数据集“dsm”数据集”数据集。模拟数据集数据集。模拟数据集数据集数据集数据集数据集数据集数据集数据集数据集“dsm”数据集“dsm”数据集”数据集“dsm”数据集”数据集”数据集“dsm”数据集”数据集”数据集“dsm M”数据集。数据集。模拟。数据集。数据集。数据集。数据集数据集“dsm M”数据集。数据集“dsm M”数据集“dsm”数据集”数据集“dsm”数据集”数据集”数据集”数据集”数据集”数据集”数据集。模拟。数据集。使用索引访问、修改或添加元素。
要访问为本地数据存储区存储的数据,请使用getElement
函数以根据名称获取正确的数据存储元素参考信号值
.
> > dsmout.getElement(“RefSignalVal”)
万博1manbetxSimulink.SimulationData.DataStoreMemory包:仿真软件。SimulationData属性:名称:'RefSignalVal' BlockPath: [1x1 Simulink.Simu万博1manbetxlationData. BlockPath: [1x1 Simulink.SimulationData. BlockPath]DSMWriterBlockPaths: [1x2 Simulink.SimulationData。万博1manbetxBlockPath] DSMWriters: [101x1 uint32] Values: [1x1 timeseries]
数据存储在timeseries
在值
字段。
>>绘图(dsmout.getElement('RefSignalVal')。值);
要确定在给定时间写入数据存储的块,请使用作家
属性。此数组包含指向DSMWriterBlockPaths
数组。例如,将第5个值写入数据存储的数据存储写入块的块路径可以如下获得:
>> dsm = dsmout.getElement('RefSignalVal');> > dsm.DSMWriterBlockPaths (dsm.DSMWriters (5))
万博1manbetxSimulink.SimulationData.BlockPath包:仿真软件。使用getBlock方法从该对象访问块路径字符向量。