雅金都多状态机建模中将事件发送到父状态图

问题描述

我有 2 个状态图,一个是父级,另一个是子级。创建父状态图时,还会使用

创建子状态图
import: "Child.ysc"
var child: Child

父状态图可以轻松引发子状态图中的事件,例如:

raise child.goToD

但问题是无法在子状态图中引用同一个父级来在父级中引发事件。有没有办法将事件发送到父状态图?或者孩子可以将自身的引用作为属性发送给父级(例如在 python 中使用 this ),然后可以将其保存在一个变量中以供访问以发送这些事件?

PS:两个状态图都有认域而不是 C/C++ 域

解决方法

基本上有两种方法。

第一种方法是定义从子状态图到父状态的显式引用。就像你为父母所做的那样。

import: "Parent.ysc"
var parent : Parent 

请注意,您必须在 C++ 代码中明确设置关系:

child.setParent(&parent);

第二种方法是使用事件。孩子可以定义如下事件:

interface:
    out event dReached

在子状态图中的某处提升它:

raise dReached

并将事件用作父级中的触发器:

child.dReached / doSomething()

生成的父代码会关心订阅和监听子进程发出的事件。

大多数情况下,我更喜欢第二种方法。它并不意味着父子之间的双向依赖。