- 6
- 0
- 约8.39千字
- 约 38页
- 2017-11-08 发布于湖北
- 举报
5_有限状态机
* 通信软件设计 状态转换 状态转换是整个建模过程中最重要的一个部分,它用来定义有限状态机中的一个状态是如何切换到另一个状态的。例如,当用来控制城门的状态机处于Opened状态时,如果此时有Close事件产生,那么状态机的当前状态将切换到Closed状态,这样一个完整的过程在状态机模型中可以用closeDoor这样一个转换来进行描述。 * 通信软件设计 状态转换 要在FSME中添加这样一个转换,首先需要在界面左边的树形列表中选 States下的Opened项,然后按下键盘上的Insert键来添加一个新的转换,接着在右下角的Name文本框中输入转换的名字closeDoor,在Condition文本框中输入Close表明触发该转换的条件是事件Close的产生,在Target下拉框中选择Closed项表明该转换发生后状态机将被切换到Closed状态,最后再单击Apply按钮,一个新的状态转换关系就定义好了,如图5所示。用同样的办法可以添加状态机所需要的所有转换。 * 通信软件设计 事件建模 在FSME界面左边的树形列表中选 Events项,然后按下键盘上的Insert键来添加一个新的事件,接着在右下方的Name文本框中输入事件的名称,再单击Apply按钮,一个新的事件就创建好了。用同样的办法可以添加状态机所需要的所有事件 * 通信软件设计 自动生成状态机 使用FSME不仅能够进行可视化的状态机建模,更重要的是它还可以根据得到的模型自动生成用C++或者Python实现的状态机框架。首先在FSME界面左边的树形列表中选择Root项,然后在右下角的Name文本框中输入状态机的名字DoorFSM,再从Initial State下拉列表中选择状态Opened作为状态机的初始化状态。 * 通信软件设计 在将状态机模型保存为door.fsm文件之后,使用下面的命令可以生成包含有状态机定义的头文件: [xiaowp@linuxgam code]$ fsmc door.fsm -d -o DoorFSM. 进一步还可以生成包含有状态机实现的框架代码: [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 * 通信软件设计 小结 在面向对象的软件系统中,有些对象具有非常复杂的生命周期模型,使用有限状态机是描述这类对象最好的方法。 作为一种软件设计模式,有限状态机的概念虽然不算复杂,实现起来也并不困难,但它的问题是当状态机的模型复杂到一定的程度之后,会带来实现和维护上的困难。 Linux下的FSME是一个可视化的有限状态机建模工具,而且支持状态机框架代码的自动生成,借助它可以更加轻松地构建基于有限状态机的应用系统。 * 通信软件设计 实验要求 上机内容 完善doorFSM工程,要求: 1) 用户可循环输入事件,并输出事件发生后的城门状态。 2) 自定义跳出循环的条件。 编写一个成绩转换函数,要求: 1) 用户输入分数,程序自动转化成相应的等级。 2) 分数≥90,等级为优 90>分数≥80,等级为良 80>分数≥70,等级为中
您可能关注的文档
- 精选5.对话框的使用---捕获异常.ppt
- 精选5.工程项目质量管理.ppt
- 精选5.幔柱构造成矿理论.ppt
- 精选5.相平衡.ppt
- 精选5.第一讲 优选法· 六、多因素方法.ppt
- 精选5.颜填料及分散理论.ppt
- 精选500强必备培训教材:把信送给加西亚(完整版).ppt
- 精选50430标准讲解.ppt
- 精选50_课题3___金属资源的利用和保护.ppt
- 精选50左右.ppt
- 伟明环保-市场前景及投资研究报告-境内业务稳健运行,印尼市场贡献边际增量.pdf
- 桂东县法院系统招聘考试真题2025.pdf
- 贵州省黔南布依族2026年中考三模物理试题及答案.pdf
- 贵州省黔南州2026年中考语文二模试卷附答案.pdf
- 贵州省铜仁市2026年中考语文二模试卷附答案.pdf
- 2026上半年安徽事业单位联考合肥市庐江县招聘36人备考题库及一套完整答案详解.docx
- 贵州省毕节市2026年中考语文一模试卷附答案.pdf
- 贵州省贵阳市南明区2026年中考语文一模试卷附答案.pdf
- 2026上半年安徽事业单位联考合肥市庐江县招聘36人备考题库及一套参考答案详解.docx
- 贵州省贵阳市白云区2026年中考二模物理试题附答案.pdf
最近下载
- 浙江省温州市2025-2026学年高三年级上学期期末质量评价语文试卷.docx VIP
- 门窗加工安全操作规程手册.docx VIP
- 人体表面放射性污染去污处理对策研究.docx VIP
- HAIER 海尔 海尔Haier冰箱 BCD-649WE 说明书.pdf
- 公共机构节水管理规范.doc VIP
- 如何找回误删微信好友,微信好友一键恢复.doc VIP
- 2012韩山师范学院专升本插班生考试《数据结构》试卷.pdf VIP
- Dragons: Riders of Berk《驯龙记:伯克岛的龙骑手(2012)》第一季第六集完整中英文对照剧本.docx VIP
- 供电设备、供水设备运行维护管理方案.pdf VIP
- 股票操作手册.pdf VIP
原创力文档

文档评论(0)