前页 | 后页 |
代码生成-StateMachines
StateMachine说明了一个对象(由Class表示)如何改变状态,通常在定义为警戒的条件或约束下,每次状态改变都是由事件触发产生的转换。在对对象如何更改状态进行建模时,可以使用适当的软件语言从中生成和构建(编译)代码并执行代码,并通过“模型模拟器”可视化执行情况。
在Enterprise Architect ,还可以组合单独但相关的对象的StateMachines,以查看它们如何交互(通过广播事件),并根据模型的变体快速创建和生成代码。例如,您可以对以下行为进行建模:
- 在后轮驱动和前轮驱动模式(一个StateMachine)下,车辆的后偏轮
- 在四轮驱动模式下车辆的方向盘和所有四个驱动轮(五个StateMachines)
- 越野车和跑车的车轮(两个工件,StateMachines组合的实例)
您不使用此方法来生成硬件定义语言的代码,而是还可以使用Enterprise Architect的通用代码生成工具从StateMachines生成HDL代码和软件代码(请参阅生成源代码过程)。
先决条件
- 选择“配置>模型>选项>源代码工程”,然后对于适当的软件编码语言(Java,C,C#或ANSI C ++),将“使用新的状态机模板”选项设置为“真”。
- 如果使用C ++,请选择“配置>模型>选项>源代码工程> C ++”,然后将“ C ++版本”选项设置为“ ANSI”
访问
从图工具箱的“工件”页面中将可执行的StateMachine工件拖到图上。可以使用此表中概述的任何方法来访问“图工具箱”的“工件”页面。
色带 |
设计>图表>工具箱>工件 |
键盘快捷键 |
+ + 3>工件 |
其他 |
通过单击“图表视图”顶部标题栏左端的或图标,可以显示或隐藏“图表工具箱”。 |
准备您的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。这些可能是:
|
|
6 |
右键单击Artifact元素,然后选择“属性>属性”选项,展开“高级”类别,然后在“语言”字段中,单击下拉箭头,然后将代码语言设置为与原语言相同的语言。为Class元素定义。 现在,您可以多次将“可执行StateMachine Artifact”元素从“浏览器”窗口中拖到图上,然后修改“零件”以对系统或流程或同一系统或流程的不同编程模型进行建模。 |
从工件生成代码
步 |
行动 |
也可以看看 |
---|---|---|
1个 |
单击“可执行StateMachine工件”元素,然后选择“模拟>可执行状态>状态机>生成”功能区选项。 显示“可执行状态机代码生成”对话框。 |
|
2 |
在“项目输出目录”字段中,键入或浏览以在其下创建输出文件的目录路径。 在代码生成期间,该目录中的所有现有文件都将被删除。 |
|
3 |
选择目标系统。如果您在Windows上运行,请选择“本地”选项。如果您使用的是Linux,请选择“远程”选项。该选择会影响为支持模拟而生成的脚本。 |
|
4 |
在“ <compiler>安装目录的位置”字段中,键入或浏览编译器安装目录的路径,以将其自动映射到本地路径(显示在该字段的左侧)。对于每种编程语言,路径可能类似于以下示例:
|
|
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生成代码