【发布时间】:2021-12-16 23:22:48
【问题描述】:
我正在尝试设置从一个状态到另一个状态的条件。我创建了三个不同的变量 A、B、C。每个变量都设置有类型:init 和初始值 uniform_discr(0, 5)。我设置的触发器是条件(A+B+C)>5。如果条件为真,则可以进入另一个状态。但是,当我运行模型时,它只运行一次并立即开始下降到图表中。你能帮我看看为什么会这样吗?以及如何设置从一种状态到另一种状态的不同消息?我应该创建连接而不是变量吗?
【问题讨论】:
我正在尝试设置从一个状态到另一个状态的条件。我创建了三个不同的变量 A、B、C。每个变量都设置有类型:init 和初始值 uniform_discr(0, 5)。我设置的触发器是条件(A+B+C)>5。如果条件为真,则可以进入另一个状态。但是,当我运行模型时,它只运行一次并立即开始下降到图表中。你能帮我看看为什么会这样吗?以及如何设置从一种状态到另一种状态的不同消息?我应该创建连接而不是变量吗?
【问题讨论】:
永远不要使用条件转换,它们很少按您期望的方式工作(尽管它们工作 100% 正确)。
您始终可以将这些替换为基于消息的转换,这在计算上也更加高效。
在您的情况下,每当 A、B 或 C 的值以任何方式更改时,您也会执行
if (A+B+C > 5) myStateChart.FireEvent("new state");
你的状态中的 msg 转换实际上需要字符串“新状态”
采用这种定义状态图的“主动”方法,您可以避免很多麻烦
【讨论】: