这个例子比较了statflow®中的消息、事件和数据的行为。
此模型有三个发件人图表:数据源
,EventSender
,消息发送者
. 每个发件人图表都有一个状态。在状态的输入操作中,图表为数据赋值、发送函数调用事件或发送消息。
对于每个发送方图表,都有相应的接收方图表。每个接收器图表都有一个带有状态的状态图A0
,A1
,A2
,A3
. 隐式事件之后(3秒)
触发从A0
到A1
. 来自相应发送者图表的数据、事件或消息将保护A1
,A2
,A3
.
每个接收器图都启用了活动状态输出并连接到一个范围。作用域显示每个时间步骤中哪些状态是活动的。此输出突出显示了输出数据、事件和消息之间的行为差异。
这个数据源
图表为输出数据指定值1M
,它作为输入连接到数据接收器
图表
这个数据接收器
图表在每个时间步执行一次。在模拟开始时,状态为A0
它是活动的。当时t=3
,从A0
到A1
发生。当时t=4
,图表测试是否M
等于1。这个条件为真,所以图表从A1
到A2
. 当时t=5
,M
仍然相等1.
,因此图表从A2
到A3
.在显示器上,你可以看到数据接收器
改变状态三次。
在给数据赋值后,它将在整个模拟过程中保持其值。因此,每次都是这样数据接收器
评估条件[M==1]
,它转换到一个新的状态。
这个EventSender
图表使用该命令发送(M)
发送函数调用输出事件以唤醒事件接收器
图表
这个事件接收器
图表仅在输入事件发生时执行M
唤醒图表。在模拟开始时,状态为A0
它是活动的。从A0
到A1
基于绝对时间时态逻辑,在时间上无效t=0
.A0
保持活动状态,图表返回睡眠状态。因为EventSender
发送事件M
只有一次,事件接收器
不再醒来。在范围上,你看到了吗事件接收器
永不脱离A0
.
事件不能跨时间步骤保持有效,因此接收图只有一次机会响应事件。当EventSender
发送事件,事件接收器
还没有准备好回应它。的机会事件接收器
为响应事件而进行的转换丢失。
这个消息发送者
图表使用语法发送(M)
通过输出消息端口发送消息。该消息进入的输入消息队列消息接收者
图表消息在队列中等待,直到消息接收者
评估它。
这个消息接收者
图表在每个时间步执行一次。在模拟开始时,状态为A0
它是活动的。当时t=3
,从A0
到A1
发生。当时t=4
,图表决定了M
队列中存在,因此需要转换到A2
. 在时间步结束时,图表将删除M
从队列中。当时t=5
,队列中没有消息,因此图表不会转换为A3
.A2
保持活动状态。在范围上,你看到了吗消息接收者
仅更改状态两次。
与事件不同,消息是排队的。接收图表可以选择在消息发送后的任何时间响应消息。与数据不同,消息不会无限期地保持有效。消息在时间步结束时被销毁。