主要内容

跨多个模型使用数据存储

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

打开示例模型

打开示例模型。顶部模型sldemo_mdlref_dsm参考模型sldemo_mdlref_dsm_botsldemo_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

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

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

这个例子包括一个名为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方法从该对象访问块路径字符向量。

另请参阅

||

相关的话题