前页 后页

代码生成-StateMachines

StateMachine说明了一个对象(由Class表示)如何改变状态,通常在定义为警戒的条件或约束下,每次状态改变都是由事件触发产生的转换。在对对象如何更改状态进行建模时,可以使用适当的软件语言从中生成和构建(编译)代码并执行代码,并通过“模型模拟器”可视化执行情况。

在Enterprise Architect ,还可以组合单独但相关的对象的StateMachines,以查看它们如何交互(通过广播事件),并根据模型的变体快速创建和生成代码。例如,您可以对以下行为进行建模:

  • 在后轮驱动和前轮驱动模式(一个StateMachine)下,车辆的后偏轮
  • 在四轮驱动模式下车辆的方向盘和所有四个驱动轮(五个StateMachines)
  • 越野车和跑车的车轮(两个工件,StateMachines组合的实例)
在为所有这些选项生成和测试代码中,至关重要的是Executable StateMachine Artifact元素。它充当StateMachine模型的容器和代码生成单元。

您不使用此方法来生成硬件定义语言的代码,而是还可以使用Enterprise Architect的通用代码生成工具从StateMachines生成HDL代码和软件代码(请参阅生成源代码过程)。

先决条件

  • 选择“配置>模型>选项>源代码工程”,然后对于适当的软件编码语言(Java,C,C#或ANSI C ++),将“使用新的状态机模板”选项设置为“真”。
  • 如果使用C ++,请选择“配置>模型>选项>源代码工程> C ++”,然后将“ C ++版本”选项设置为“ ANSI”
此代码生成方法不适用于Enterprise Architect 11.0之前开发的旧版StateMachine代码生成模板,也不适用于生成硬件定义语言代码。

访问

从图工具箱的“工件”页面中将可执行的StateMachine工件拖到图上。可以使用此表中概述的任何方法来访问“图工具箱”的“工件”页面。

色带

设计>图表>工具箱>工件

键盘快捷键

Ctrl + Shift + 3>工件

其他

通过单击“图表视图”顶部标题栏左端的Chevron RightChevron Left图标,可以显示或隐藏“图表工具箱”。

准备您的StateMachine图

行动

也可以看看

1个

对于要建模的每个StateMachine,创建一个类图。

添加新图

2

从图工具箱的“类”页面,将“类”图标拖到您的图上,并为元素指定一个适当的名称。

创建元素

3

右键单击Class元素,然后选择“ New Child Diagram | New”。 StateMachine的上下文菜单选项。

给StateMachine图一个适当的名称。

4

创建StateMachine模型以反映国家之间的适当过渡。

状态机

设置可执行状态机器工件

行动

也可以看看

1个

创建一个新的类图,以包含要从中生成代码的建模StateMachine。

添加新图

2

从图工具箱的“工件”页面中,将“可执行状态机”图标拖到图上以创建工件元素。命名元素并拖动其边框以将其放大。

神器

3

从“浏览器”窗口中,将包含StateMachine图的(第一个)Class元素拖到图上的Artifact元素上。

显示“粘贴<元素名称>”对话框。在“拖放为”字段中,单击下拉箭头,然后选择值“属性”。

(如果未显示该对话框,请在从“浏览器”窗口中拖动“类”元素时按Ctrl。)

从浏览器窗口拖放元素

4

单击确定按钮。 Class元素作为零件粘贴到工件中。

部分

5

对于要组合并为其生成代码的其他具有StateMachines的其他类,请重复步骤3和4。这些可能是:

  • 重复相同的Class和StateMachine的“ drop”,为并行对象建模
  • 不同的类和StateMachines,为单独的交互对象建模

6

右键单击Artifact元素,然后选择“属性>属性”选项,展开“高级”类别,然后在“语言”字段中,单击下拉箭头,然后将代码语言设置为与原语言相同的语言。为Class元素定义。

现在,您可以多次将“可执行StateMachine Artifact”元素从“浏览器”窗口中拖到图上,然后修改“零件”以对系统或流程或同一系统或流程的不同编程模型进行建模。

从工件生成代码

行动

也可以看看

1个

单击“可执行StateMachine工件”元素,然后选择“模拟>可执行状态>状态机>生成”功能区选项。

显示“可执行状态机代码生成”对话框。

2

在“项目输出目录”字段中,键入或浏览以在其下创建输出文件的目录路径。

在代码生成期间,该目录中的所有现有文件都将被删除。

3

选择目标系统。如果您在Windows上运行,请选择“本地”选项。如果您使用的是Linux,请选择“远程”选项。该选择会影响为支持模拟而生成的脚本。

4

在“ <compiler>安装目录的位置”字段中,键入或浏览编译器安装目录的路径,以将其自动映射到本地路径(显示在该字段的左侧)。对于每种编程语言,路径可能类似于以下示例:

  • 爪哇
    JAVA_HOME C:\ Program Files(x86)\ Java \ jdk1.7.0_17
  • C / C ++
    VC_HOME C:\ Program Files(x86)\ Microsoft Visual Studio 9.0
  • C#
    CS_HOME C:\ Windows \ Microsoft.NET \ Framework \ V3.5

5

单击生成按钮。将创建适合于编程语言的代码文件。

将显示“系统输出”窗口,并带有“可执行状态机输出”选项卡,其中显示了生成的进度和状态。

在代码生成期间,将执行自动验证功能,以根据UML约束检查图或模型错误。任何错误均由“可执行StateMachine输出”选项卡上的错误消息标识。

双击错误消息以显示发生错误的建模结构,并在重新生成代码之前纠正错误。

6

当代码生成无误时,请单击Artifact元素,然后选择“模拟>可执行状态>状态机>生成”功能区选项以编译代码。

将显示“系统输出”窗口,其中带有“构建”选项卡,其中显示了编译的进度和状态。请注意,编译包括仿真操作的配置。

代码生成宏

您还可以在StateMachines的代码生成中使用两个宏。

宏名

描述

SEND_EVENT

将事件发送到接收方(部分)。例如:

%SEND_EVENT(“ event1”,“ Part1”)%

BROADCAST_EVENT

向所有接收者广播事件。例如:

%BROADCAST_EVENT(“ event2”)%

从工件执行/模拟代码

行动

也可以看看

1个

选择功能区选项“模拟>动态模拟>模拟器>应用工作区”以同时显示“模拟”窗口和“模拟事件”窗口

将两个窗口停靠在屏幕上的方便区域。

模拟窗口 模拟事件窗口

2

在图或浏览器窗口上,单击Artifact元素,然后选择“模拟>可执行状态>状态机>运行”功能区选项。

系列中的第一个StateMachine图显示了已经开始的过程仿真。在“模拟”窗口中,以以下格式表示处理步骤:

[03516677]第1部分[Class1] .Initial_367_TO_State4_142效果

[03516683]第1部分[Class1] .StateMachine_State4 ENTRY

[03516684]第1部分[Class1] .StateMachine_State4 DO

[03518375]被阻止

3

单击适当的“模拟”窗口工具栏按钮,以根据需要逐步进行模拟。

当模拟在“退出”或“终止”元素处完成时,单击“模拟”窗口工具栏中的“停止”按钮。

运行模型仿真

4

在跟踪显示为“已阻止”的位置,模拟已达到必须继续触发事件才能继续处理的点。在“模拟事件”窗口的“等待触发器”列中,双击相应的触发器。

触发触发后,模拟会继续到下一个暂停点,触发或退出。

扳机 等待触发器

笔记

  • 如果要对现有StateMachine模型进行小的更改,则可以通过选择“模拟>可执行状态>状态机>生成,生成并运行”功能区选项来组合代码生成,生成和运行操作
  • 您还可以使用JavaScript生成代码

学到更多