一种有限状态机的控制方法及有限状态机技术

技术编号:23851422 阅读:63 留言:0更新日期:2020-04-18 08:51
本发明专利技术公开了一种有限状态机的控制方法及有限状态机,属于计算机应用技术领域,包括根据状态机每个状态的名字和内存地址,创建状态机的每个状态,该状态包括两个父状态和一个final状态,每个父状态各包括三个子状态;状态机当前的状态执行完毕后经postEvent函数指定要跳转的下个状态,其中postEvent函数的第一个参数为要跳转到的下个状态的名字、第二参数为要传递给下个状态的参数;父状态或StateMachine根据下个状态的名字从注册过的状态列表中查找到对应的内存地址,并执行该下个状态的接口函数,每个子状态都有3个执行函数,分别是onEntry,handleTimeout,onExit函数。本发明专利技术采用简单的语言提供了丰富的状态机功能,可移植性强。

A control method of finite state machine and finite state machine

【技术实现步骤摘要】
一种有限状态机的控制方法及有限状态机
本专利技术涉及计算机应用
,特别涉及一种有限状态机的控制方法及有限状态机。
技术介绍
有限状态机实现的功能很简单,即实现各个状态之间的相互转换。但实际应用的状态机可能需要更多的功能,比如状态切换时传递参数,父状态与子状态的包含关系等。目前比较成熟的状态机是QT中实现的有限状态机算法,图1示出了一个典型的QT状态机流程,它可以通过信号驱动机制实现状态之间的切换,支持状态机开始、停止、暂停等功能,同时还支持父状态包含子状态、子状态之间切换、父状态之间切换等功能。图1中,S1状态是一个父状态,它包含3个子状态:S11,S12,S13,当触发button.clicked事件时,三个子状态可以互相切换,而当触发quitButton.clicked事件时,不论状态机目前处于S1状态的何种状态,它可以立刻退出S1状态,进入final状态。虽然QT状态机的功能强大,但该状态机的使用需要用QT编程,要包含QT的一些库,无法在纯净的C/C++代码中编程。而其他的状态机实现算法,例如《C专家编程》中实现的有限状态机或者其它公司代码中的状态机,例如TI官方代码中的任务状态机,实现的功能都比较简单,它们使用函数指针跳转表来实现各状态之间的切换。
技术实现思路
本专利技术的目的在于克服现有技术存在的缺陷,提供了一种可以采用C++编码实现且包含多种功能的有限状态机。为实现以上目的,本专利技术采用一种有限状态机的控制方法,包括:根据状态机每个状态的名字和内存地址,创建状态机的每个状态,该状态包括两个父状态和一个final状态,每个父状态各包括三个子状态;所述状态机当前的状态执行完毕后经postEvent函数指定要跳转的下个状态,其中postEvent函数的第一个参数为要跳转到的下个状态的名字、第二参数为要传递给下个状态的参数;父状态或StateMachine根据下个状态的名字从注册过的状态列表中查找到对应的内存地址,并执行该下个状态的接口函数;子状态间跳转时,首先执行onEntry函数,并在下个跳转的状态与当前状态相同时,则执行handleTimeout函数;以及在下个跳转的状态与当前状态不同时,则执行当前状态的onExit函数再执行onEntry函数。进一步地,所述根据状态机每个状态的名字和内存地址,创建状态机的每个状态,包括:创建状态机的两个父状态和一个final状态,final状态继承自State类;创建两个父状态各自的三个子状态,每个子状态继承自State类;将每个父状态各自下的三个子状态添加到对应的父状态中并设置初始执行状态;将两个父状态和final状态添加到StateMachine中,并设置StateMachine的初始执行状态;所述父状态向所述StateMachine注册,并发送其名字和内存地址;所述子状态向父状态注册,并发送其名字和内存地址。进一步地,所述状态机启动时,先进入到一个父状态,并根据相应的切换信号,切换到另一个父状态;当所述状态机接收到stopmachine信号时,状态机由当前状态切换至final状态。另一方面,采用一种有限状态机,采用如上所述的有限状态机的控制方法。与现有技术相比,本专利技术存在以下技术效果:本专利技术中的状态机可采用纯C++编码,可以嵌入到各种平台使用,该状态机还可提供多种功能,包括子状态切换、父状态切换、子状态循环和状态间传递参数等。附图说明下面结合附图,对本专利技术的具体实施方式进行详细描述:图1是QT状态机流程图;图2是一种有限状态机的控制方法的流程示意图;图3是本专利技术状态机的流程图;图4是本专利技术状态机的核心算法示意图。具体实施方式为了更进一步说明本专利技术的特征,请参阅以下有关本专利技术的详细说明与附图。所附图仅供参考与说明之用,并非用来对本专利技术的保护范围加以限制。如图2所示,本实施例公开了一种有限状态机的控制方法,包括如下步骤S1至S4:S1、根据状态机每个状态的名字和内存地址,创建状态机的每个状态,该状态包括两个父状态和一个final状态,每个父状态各包括三个子状态;S2、所述状态机当前的状态执行完毕后经postEvent函数指定要跳转的下个状态,其中postEvent函数的第一个参数为要跳转到的下个状态的名字、第二参数为要传递给下个状态的参数;S3、父状态或StateMachine根据下个状态的名字从注册过的状态列表中查找到对应的内存地址,并执行该下个状态的接口函数;S4、子状态间跳转时,首先执行onEntry函数,并在下个跳转的状态与当前状态相同时,则执行handleTimeout函数;以及在下个跳转的状态与当前状态不同时,则执行当前状态的onExit函数再执行onEntry函数。需要说明的是,本状态机采用简单的语言提供了丰富的状态机功能,使用简单,可移植性强,可以有效的简化代码逻辑,更加合理的组织程序结构,可维护性强。进一步地,上述步骤S1:根据状态机每个状态的名字和内存地址,创建状态机的每个状态,具体包括如下细分步骤:创建状态机的两个父状态和一个final状态,final状态继承自State类;创建两个父状态各自的三个子状态,每个子状态继承自State类;将每个父状态各自下的三个子状态添加到对应的父状态中并设置初始执行状态;将两个父状态和final状态添加到StateMachine中,并设置StateMachine的初始执行状态;所述父状态向所述StateMachine注册,并发送其名字和内存地址;所述子状态向父状态注册,并发送其名字和内存地址。以下列举该状态机的具体用法:该用法在threadMachine.cpp文件中,代码如下:首先创建2个父状态和一个final状态,final状态继承自State类State*pWorkState=newState(pStateMachine);State*pChargeState=newState(pStateMachine);StateFinal*pStateFinal=newStateFinal(pStateMachine);然后创建pWorkState状态的三个子状态,每个状态都继承自State类StateGetJob*pStateGetJob=newStateGetJob(pWorkState);StateGotoPoint*pStateGotoPoint=newStateGotoPoint(pWorkState);StateFinish*pStateFinish=newStateFinish(pWorkState);再创建pChargeState状态的三个子状态,每个状态都继承自State类StateBeginCha本文档来自技高网...

【技术保护点】
1.一种有限状态机的控制方法,其特征在于,包括:/n根据状态机每个状态的名字和内存地址,创建状态机的每个状态,该状态包括两个父状态和一个final状态,每个父状态各包括三个子状态;/n所述状态机当前的状态执行完毕后经postEvent函数指定要跳转的下个状态,其中postEvent函数的第一个参数为要跳转到的下个状态的名字、第二参数为要传递给下个状态的参数;/n父状态或StateMachine根据下个状态的名字从注册过的状态列表中查找到对应的内存地址,并执行该下个状态的接口函数;/n子状态间跳转时,首先执行onEntry函数,并在下个跳转的状态与当前状态相同时,则执行handleTimeout函数;以及在下个跳转的状态与当前状态不同时,则执行当前状态的onExit函数再执行onEntry函数。/n

【技术特征摘要】
1.一种有限状态机的控制方法,其特征在于,包括:
根据状态机每个状态的名字和内存地址,创建状态机的每个状态,该状态包括两个父状态和一个final状态,每个父状态各包括三个子状态;
所述状态机当前的状态执行完毕后经postEvent函数指定要跳转的下个状态,其中postEvent函数的第一个参数为要跳转到的下个状态的名字、第二参数为要传递给下个状态的参数;
父状态或StateMachine根据下个状态的名字从注册过的状态列表中查找到对应的内存地址,并执行该下个状态的接口函数;
子状态间跳转时,首先执行onEntry函数,并在下个跳转的状态与当前状态相同时,则执行handleTimeout函数;以及在下个跳转的状态与当前状态不同时,则执行当前状态的onExit函数再执行onEntry函数。


2.如权利要求1所述的有限状态机的控制方法,其特征在于,所述根据状态机每个状态的名字和内存地址,创建状态机的每个状...

【专利技术属性】
技术研发人员:宋强白俊锋王庆祥许志瑜
申请(专利权)人:合肥科大智能机器人技术有限公司科大智能科技股份有限公司科大智能电气技术有限公司
类型:发明
国别省市:安徽;34

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1