主要内容

跨多个模型使用数据存储

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

打开示例模型

打开示例模型。顶层模型sldemo_mdlref_dsm参考模型sldemo_mdlref_dsm_bot而且sldemo_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®信号对象定义全局数据存储金宝app

要向Simulink指定顶部金宝app模型和两个引用模型为每个模型中名为ErrorCond的数据存储使用相同的内存,请创建一个实例金宝app仿真软件。信号对象命名为ErrorCond在基本工作空间。由于该对象对每个模型都是可见的,因此它的作用域包含各个模型,并意味着有一个在模型之间共享的同名全局数据存储。请注意,这三个模型都不包含数据存储名称为ErrorCond的数据存储内存块。如果任何模型包含这样一个块,那么该块将定义一个模型本地的数据存储,该数据存储将覆盖全局数据存储。

因为对象ErrorCond定义了一个全局数据存储,所以它必须显式地定义数据类型复杂性,SamplingMode属性设置为非继承的设置。SampleTime而且StorageClass可以保留它们的继承值,也可以显式设置。

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

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

记录全局数据存储

要记录写入全局数据存储的所有值,请设置数据采集的属性LoggingInfo的属性金宝app仿真软件。信号对象。的LoggingInfo属性还允许指定其他记录参数,如抽取和最大值。

金宝app仿真软件。LoggingInfo (handle) DataLogging: 1 NameMode: 0 LoggingName: " DecimateData: 0 Decimation: 2 LimitDataPoints: 0 MaxPoints: 5000

模拟模型

现在你可以模拟sldemo_mdlref_dsm查看输出。参考模型sldemo_mdlref_dsm_bot在顶层模型时,写入数据存储ErrorCondsldemo_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包:Simulink. simulationdata . datastorememory。SimulationData属性:名称:'RefSignalVal' BlockPath: [1x1 Simulink.Simu金宝applationData. [1x1 Simulink.SimulationData.]DSMWriterBlockPaths: [1x2 Simulink.SimulationData.]金宝appBlockPath] dsmwriter: [101x1 uint32]值:[1x1 timeseries]

数据存储在timeseries字段。

> >的情节(dsmout.getElement (RefSignalVal) . values);

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

>> dsm = dsout . getelement ('RefSignalVal');> > dsm.DSMWriterBlockPaths (dsm.DSMWriters (5))
金宝appSimulink. simulationdata . blockpath包:Simulink. simulationdata . blockpathSimulationData块路径:'sldemo_mdlref_dsm/A' 'sldemo_mdlref_dsm_bot/PositiveSS/DSW'使用getBlock方法访问该对象的块路径字符向量。