状态机码生成问题

Problem with state machine code generation

提问人:Stefan Jacobs 提问时间:8/22/2023 最后编辑:Geert BellekensStefan Jacobs 更新时间:8/22/2023 访问量:30

问:

我正在 v 15.2 中为包含子状态的状态机测试 EA 代码生成。 我使用“示例模型/模型仿真/状态机模型/嵌套跟踪”作为C++代码生成的eaxmple。 当我从“ExampleClass”生成代码时,我得到了不同数量的状态,激活了“使用新 Sate 机器 Tamplate”复选框。

“新建状态机模板”导致

enum StateEnum 
{
    NOSTATE,
    ExampleClass_VIRTUAL_SUBMACHINESTATE,
    ExampleClass_ENUM_NESTEDTRACES_B,
    ExampleClass_ENUM_NESTEDTRACES_FINAL_2904,
    ExampleClass_ENUM_NESTEDTRACES_C,
    ExampleClass_ENUM_NESTEDTRACES_A,
    ExampleClass_ENUM_NESTEDTRACES_D,
    ExampleClass_ENUM_NESTEDTRACES_B_B2,
    ExampleClass_ENUM_NESTEDTRACES_B_B1,
    ExampleClass_ENUM_NESTEDTRACES_C_C1,
    ExampleClass_ENUM_NESTEDTRACES_C_C2
};

我可以找到所有状态和子状态(例如 A、B、B1、B2 等)

但是“旧状态机模板”导致

enum StateType
{
    Nested Traces_B,
    Nested Traces_C,
    Nested Traces_Final,
    Nested Traces_D,
    Nested Traces_A,
    ST_NOSTATE
};

在那里我只能找到所有主要状态(例如 A、B、C、...

代码生成器模板“Statemachine”中使用的列表是

$sStates = %EASLList="StateEnumerate" @separator=",\n" @indent="\t" @owner=$StateMachineGUID @collection="AllStates"%

它应该提供包括子州在内的“AllStates”集合。EA 用户指南说“状态机内的所有状态,包括子机状态内的状态”。

为了解决这个问题,我尝试访问超纵坐标状态的子机。

检查“HasSubMachine”标志返回“true”,但“SubMachine”ID 为空。

我喜欢使用“旧状态机模板”,因为可以针对现有的状态机结构进行代码生成。

如何访问子州或完成州列表?

代码生成状态 企业架构师

评论

0赞 qwerty_so 8/23/2023
这里没有太多实际使用 SM 代码生成的 EA 高级用户。考虑在Sparx的论坛上发帖,并附上指向此处的链接(因为您不能轻易地将图片包含在那里)。

答: 暂无答案