生成状态机框架
使用FSME不仅能够进行可视化的状态机建模,更重要的是它还可以根据得到的模型自动生成用C++或者Python实现的状态机框架。首先在FSME界面左边的树形列表中选择"Root"项,然后在右下角的"Name"文本框中输入状态机的名字"DoorFSM",再从"Initial State"下拉列表中选择状态"Opened"作为状态机的初始化状态,如图6所示。
设置初始属性
在将状态机模型保存为door.fsm文件之后,使用下面的命令可以生成包含有状态机定义的头文件:
[xiaowp@linuxgam code]$ fsmc door.fsm -d -o DoorFSM.h
进一步还可以生成包含有状态机实现的框架代码:
[xiaowp@linuxgam code]$ fsmc door.fsm -d -impl DoorFSM.h -o DoorFSM.cpp
如果想对生成的状态机进行验证,只需要再手工编写一段用于测试的代码就可以了:
/*
* TestFSM.cpp
* 测试生成的状态机框架
*/
#include "DoorFSM.h"
int main()
{
DoorFSM door;
door.A(DoorFSM::Close);
door.A(DoorFSM::Lock);
door.A(DoorFSM::Unlock);
door.A(DoorFSM::Open);
}
有限状态机是由事件来进行驱动的,在FSME生成的状态机框架代码中,方法A()可以被用来向状态机发送相应的事件,从而提供状态机正常运转所需要的"动力"。状态机负责在其内部维护一个事件队列,所有到达的事件都会先被放到事件队列中进行等候,从而能够保证它们将按照到达的先后顺序被依次处理。在处理每一个到达的事件时,状态机都会根据自己当前所处的状态,检查与该状态对应的转换条件是否已经被满足,如果满足的话则激活相应的状态转换过程。
使用下面的命令能够将生成的状态机框架和测试代码编译成一个可执行文件:
[xiaowp@linuxgam code]$ g++ DoorFSM.cpp TestFSM.cpp -o fsm
由于之前在用fsmc命令生成状态机代码时使用了-d选项,生成的状态机框架中会包含一定的调试信息,包括状态机中每次状态转换时的激活事件、转换前的状态、所经历的转换、转换后的状态等,如下所示:
[xiaowp@linuxgam code]$ ./fsm
DoorFSM:event:'Close'
DoorFSM:state:'Opened'
DoorFSM:transition:'closeDoor'
DoorFSM:new state:'Closed'
DoorFSM:event:'Lock'
DoorFSM:state:'Closed'
DoorFSM:transition:'lockDoor'
DoorFSM:new state:'Locked'
DoorFSM:event:'Unlock'
DoorFSM:state:'Locked'
DoorFSM:transition:'unlockDoor'
DoorFSM:new state:'Unlocked'
DoorFSM:event:'Open'
DoorFSM:state:'Unlocked'
DoorFSM:transition:'openDoor'
DoorFSM:new state:'Opened'
-
框架
+关注
关注
0文章
401浏览量
17460 -
状态机
+关注
关注
2文章
492浏览量
27502 -
python
+关注
关注
56文章
4788浏览量
84555
发布评论请先 登录
相关推荐
如何利用Linux下的工具来自动生成实用的状态机框架?
![如何利用Linux下的工具来自动<b class='flag-5'>生成</b>实用的<b class='flag-5'>状态机</b><b class='flag-5'>框架</b>?](https://file1.elecfans.com/web2/M00/8E/6E/wKgaomTHHS-AfHBhAAA18Y7DHew041.jpg)
[开源框架] 极简信号/状态机框架 NorthFrame
使用ModelSim自动生成状态机FSM的状态转换图
![使用ModelSim自动<b class='flag-5'>生成</b><b class='flag-5'>状态机</b>FSM的<b class='flag-5'>状态</b>转换图](https://file1.elecfans.com//web2/M00/A6/AA/wKgZomUMP4CAMUf1AAASVwbIeec807.jpg)
什么是状态机?状态机5要素
![什么是<b class='flag-5'>状态机</b>?<b class='flag-5'>状态机</b>5要素](https://file.elecfans.com/web2/M00/0C/18/poYBAGD_fReAI7mmAAAbpz2ipdw400.png)
基于单片机的极简图形化状态机框架NorthFrame
![基于单片<b class='flag-5'>机</b>的极简图形化<b class='flag-5'>状态机</b><b class='flag-5'>框架</b>NorthFrame](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
如何构建基于状态机的软件系统
状态机自动生成工具FSME
![<b class='flag-5'>状态机</b>自动<b class='flag-5'>生成</b>工具FSME](https://file1.elecfans.com/web2/M00/8E/6E/wKgaomTHHS-AQz6XAAChI4d48Sg502.jpg)
自动生成程序状态机代码状态机建模方法
![自动<b class='flag-5'>生成</b>程序<b class='flag-5'>状态机</b>代码<b class='flag-5'>状态机</b>建模方法](https://file1.elecfans.com/web2/M00/8E/6B/wKgZomTHHS-AVGSlAACfs4684bY274.jpg)
评论