从图表访问Data Store Memory

Simulink®模型将全局变量实现为数据存储,可以是数据存储内存块,也可以是Simulink.Signal的实例。您可以使用数据存储在多个Simulink块之间共享数据,而无需显式的输入或输出连接来将数据从一个块传递到另一个块。Stateflow®图表通过符号化地读取和写入数据存储内存,与Simulink模型共享全局数据。
在这里插入图片描述

要从图表中访问全局数据,请将Stateflow数据对象绑定到Simulink数据存储。创建绑定后,Stateflow数据对象将成为Simulink数据存储内存的符号表示。然后,您可以使用此符号对象来存储和检索全局数据。

本地和全局数据存储内存

状态流程图可以与本地和全局数据存储进行交互。
本地数据存储对一个模型中的所有块都是可见的。要与本地数据存储交互,图表必须位于定义本地数据存储的模型中。您可以通过向模型添加 Data Store Memory或创建Simulink signal对象来定义本地数据存储。

全局数据存储的范围更广,跨越了模型引用边界。要与全局数据存储交互,图表必须位于定义全局数据存储的顶级模型中,或者位于顶级模型引用的模型中。您可以将全局数据存储实现为Simulink signal 对象。

将状态流数据绑定到数据存储

要定义Simulink数据存储内存,请将数据存储内存块添加到模型中或创建Simulink信号对象。
如添加Stateflow 数据中所述,将数据对象添加到Stateflow 图中。
将Name属性设置为要绑定Stateflow数据对象的Simulink数据存储内存的名称。
将Scope属性设置为数据存储内存。
Stateflow数据对象继承了绑定该对象的数据存储内存中的所有其他属性。
同一模型层次结构中可以存在多个同名的本地和全局数据存储。在这种情况下,Stateflow数据对象绑定到最近的祖先数据存储。

存储和检索全局数据

将Stateflow数据对象绑定到Simulink数据存储后,您可以在状态和转换操作中存储和检索全局数据。数据对象充当您通过其符号名称引用的全局变量。当您在此变量中存储数值时,您正在写入Simulink数据存储内存。当您从该变量中检索数值时,您正在从数据存储内存中读取。
例如,在这个图表中,状态操作从名为myglobal的数据存储内存块读取和写入。

在这里插入图片描述

图表中的数据存储属性

当您将Stateflow数据对象绑定到数据存储时,Stateflow对象会从数据存储继承其所有属性。为确保属性正确传播,在创建Simulink数据存储时:

指定auto以外的数据类型。
尽量减少使用automatic-mode属性。

跨多个模型共享数据存储内存

要从多个模型访问全局数据存储,请执行以下操作:
验证您的模型是否不包含任何数据存储内存块。您可以包含数据存储读取和数据存储写入块。
在MATLAB base workspace中,创建具有以下属性的Simulink.Signal:
将数据类型设置为显式数据类型。数据类型不能为“Auto”。
完全指定维度。信号维度不能为-1或继承。
完全制定复杂性。复杂性不能是Auto。
将存储类设置为ExportedGlobal。
在共享数据的每个图表中,将Stateflow数据对象绑定到Simulink数据存储。

读取前写入数据存储内存

为了避免算法延迟,请在读取之前先写入数据存储内存。否则,读取操作将检索存储在上一个时间步中的值,而不是在当前时间步中计算和存储的值。当未连接的块在以不同速率运行时共享全局数据时:
将读取操作与写入操作分离到单独的块中。
为块分配优先级,以便您的模型在读取块之前调用写块。
为了避免在同一时间步中无意中发生多个读取和写入的情况,启用数据存储内存块诊断以:
写入前检测读取
读取后检测写入
写入后检测写入
如果将数据存储内存块用作跨时间步长累积值的持久全局存储区域,请禁用数据存储内存段诊断以避免不必要的警告。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值