此示例显示了如何使用和记录本地数据存储。它还显示了如何定义,使用和记录全局数据存储以共享引用模型之间的全局数据。
打开示例模型。顶部模型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.
设置名为的全球布尔数据存储的值错误
如果它的输入信号的值超出范围(-0.8,0.8),则为true。顶级模型还监视数据存储错误
并在两个引用的模型的输出之间切换,具体取决于该数据存储的值。
为了向Simulink指定顶金宝app级模型和两个被引用的模型使用相同的内存作为命名的数据存储错误
在每个模型中,创建一个实例金宝app仿真软件。信号
对象命名错误
在每个模型可见的工作空间或数据字典中。因为这个对象对每个模型都是可见的,所以它的作用域包含各个模型,并意味着模型之间共享一个同名的全局数据存储。注意,这三个模型中没有一个包含数据存储内存块,数据存储名称为错误
.如果任何模型包含这样的块,那么该块将定义模型本地的数据存储,这将阴影全局数据存储。
由于对象错误
定义一个全局数据存储,必须明确定义数据类型
那复杂
,方面
属性为非继承设置。采样时间
和storageclass.
可以作为其继承的值留下或明确设置。
该示例包括名为的MAT文件sldemo_mdlref_dsm_data.mat
包含金宝app仿真软件。信号
目的错误
.模型的预载函数sldemo_mdlref_dsm
加载此垫文件,导致对象在基础工作区中加载。您可以通过在模型资源管理器中选择基本工作区来查看此对象。您还可以从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.
属性还允许规范其他日志记录参数,例如抽取和最大点。
金宝appSimulink.loggingInfo(句柄)Datalogging:1 namemode:0 loggingname:''decimateData:0 decimation:2 limitdatapoints:0 maxpoints:5000
现在你可以模拟sldemo_mdlref_dsm
看输出。参考模型sldemo_mdlref_dsm_bot.
写入数据存储错误
虽然顶级模特sldemo_mdlref_dsm
从数据存储中读取。蓝线表示输入sldemo_mdlref_dsm_bot.
;绿线表示交换机块的输出。请注意,当输入信号的大小落在范围之外时,输出切换。
两者都是全局数据存储错误
和本地数据存储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 -使用大括号{}来访问、修改或使用索引添加元素。
若要访问本地数据存储的数据,请使用呕吐
基于名称获取正确的数据存储元素的功能RefSignalVal
.
>> dsmout.getElement('refsignalval')
金宝appsimulink.simulationData.dataStoreMemory包:Simulink.simulationData属性:名称:'refsignalval'块路径:[1x1 simulink.simulationdata.blockpath] scope:'local'dsmwriterblockpaths:[1x2 simulink.simulationdata.blockpath] dsmwriters:[101x1 uint32]值:[1x1倍]
数据存储在一个时间序列
在这内价值
场地。
> >的情节(dsmout.getElement (RefSignalVal) . values);
要确定在给定的时间将哪个块写入数据存储,请使用DSMWriters
财产。对象的索引列表dsmwriterblockpath.
数组中。例如,数据存储写入第5个值的写块的块路径如下所示:
>> dsm = dsmout.getElement('refsignalval');>> dsm.dsmwriterblockpath(dsm.dsmwriters(5))
金宝appsimulink.simulationdata.blockpath包:simulink.simulationdata块路径:'sldemo_mdlref_dsm / a'''sldemo_mdlref_dsm_bot / positivess / dsw'使用getBlock方法从此对象访问块路径字符向量。