文档

跨多个模型使用数据存储

这个示例展示了如何使用和记录本地数据存储。它还展示了如何定义、使用和记录全局数据存储,以便在引用的模型之间共享全局数据。

打开示例模型

打开示例模型。顶部模型sldemo_mdlref_dsm参考模型sldemo_mdlref_dsm_botsldemo_mdlref_dsm_bot2.打开数据存储的日志记录sldemo_mdlref_dsm在“配置参数”对话框的“数据导入/导出”窗格中。

参考模型sldemo_mdlref_dsm_bot如果信号是正的,将输入信号放大5;如果信号是负的,将信号放大2,并将该信号的值写入本地数据存储RefSignalVal.这个本地数据存储被配置为在模拟之后将所有写入的值记录到工作空间中。此本地数据存储的日志记录参数由块参数对话框的logging选项卡控制。

参考模型sldemo_mdlref_dsm_bot2如果传入信号的值超出范围(-0.8,0.8),则将名为ErrorCond的全局布尔数据存储的值设置为true。顶部模型还监视数据存储ErrorCond,并根据数据存储的值在两个引用模型的输出之间切换。

使用Simulink®信号对象定义一个全局数据存储万博1manbetx

要向Simulink指定顶级万博1manbetx模型和两个被引用的模型在每个模型中为名为ErrorCond的数据存储使用相同的内存,创建一个万博1manbetx仿真软件。信号对象,名为ErrorCond。因为这个对象对每个模型都是可见的,所以它的作用域包含各个模型,并意味着模型之间共享一个同名的全局数据存储。注意,这三个模型中没有一个包含数据存储内存块,数据存储名称为ErrorCond。如果任何模型包含这样一个块,那么该块将定义一个模型本地的数据存储,而该数据存储将覆盖全局数据存储。

由于ErrorCond对象定义了全局数据存储,所以它必须显式地定义数据类型复杂性,SamplingMode属性设置为非继承设置。SampleTimeStorageClass可以保留为其继承的值,也可以显式设置。

这个例子包括一个名为sldemo_mdlref_dsm_data.mat包含万博1manbetx仿真软件。信号ErrorCond对象。模型的预载函数sldemo_mdlref_dsm加载这个mat文件,使对象在基本工作空间中被加载。控件中的基本工作区可以查看此对象模型浏览器.您也可以从MATLAB®命令提示符创建此对象。下面的命令定义了这个例子中使用的对象:

ErrorCond = 万博1manbetxSimulink.Signal;ErrorCond。Description = '用来表示子系统输出无效';ErrorCond。数据类型= 'boolean'; ErrorCond.Complexity = 'real'; ErrorCond.Dimensions = 1; ErrorCond.SamplingMode='Sample based'; ErrorCond.SampleTime = 0.1; ErrorCond.LoggingInfo.DataLogging = true;

日志全局数据存储

要记录写入全局数据存储的所有值,请设置数据采集财产的LoggingInfo财产的万博1manbetx仿真软件。信号对象。的LoggingInfo属性还允许指定其他日志参数,如抽取和最大点数。

万博1manbetx仿真软件。loginginfo (handle) DataLogging: 1 NameMode: 0 logingname: " DecimateData: 0 Decimation: 2 limitdatpoints: 0 MaxPoints: 5000

模拟模型

现在你可以模拟sldemo_mdlref_dsm查看输出。的参考模型sldemo_mdlref_dsm_bot写入数据存储ErrorCond,而top模型sldemo_mdlref_dsm从数据存储中读取。蓝线表示输入sldemo_mdlref_dsm_bot;绿线表示Switch块的输出。请注意,当输入信号的幅度超出量程时,输出切换。

查看记录结果

全局数据存储ErrorCond和本地数据存储RefSignalVal都被配置为在模拟后记录所有写入的值。的基本工作区中存储这些记录的结果dsmout变量。

dsmout = 万博1manbetxSimulink.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”)
万博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) . values);

要确定在给定的时间将哪个块写入数据存储,请使用DSMWriters财产。对象的索引列表DSMWriterBlockPaths数组中。例如,数据存储写入第5个值的写块的块路径如下所示:

>> dsm = dsmout.getElement('RefSignalVal');> > dsm.DSMWriterBlockPaths (dsm.DSMWriters (5))
万博1manbetxSimulink.SimulationData.BlockPath包:仿真软件。使用getBlock方法从该对象访问块路径字符向量。
这个话题有用吗?