CN111026467B - 一种有限状态机的控制方法及有限状态机 - Google Patents

一种有限状态机的控制方法及有限状态机 Download PDF

Info

Publication number
CN111026467B
CN111026467B CN201911244086.1A CN201911244086A CN111026467B CN 111026467 B CN111026467 B CN 111026467B CN 201911244086 A CN201911244086 A CN 201911244086A CN 111026467 B CN111026467 B CN 111026467B
Authority
CN
China
Prior art keywords
state
state machine
machine
states
father
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201911244086.1A
Other languages
English (en)
Other versions
CN111026467A (zh
Inventor
宋强
白俊锋
王庆祥
许志瑜
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hefei Technological University Intelligent Robot Technology Co ltd
Original Assignee
Hefei Technological University Intelligent Robot Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hefei Technological University Intelligent Robot Technology Co ltd filed Critical Hefei Technological University Intelligent Robot Technology Co ltd
Priority to CN201911244086.1A priority Critical patent/CN111026467B/zh
Publication of CN111026467A publication Critical patent/CN111026467A/zh
Application granted granted Critical
Publication of CN111026467B publication Critical patent/CN111026467B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4498Finite state machines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Exchange Systems With Centralized Control (AREA)
  • Debugging And Monitoring (AREA)

Abstract

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

Description

一种有限状态机的控制方法及有限状态机
技术领域
本发明涉及计算机应用技术领域,特别涉及一种有限状态机的控制方法及有限状态机。
背景技术
有限状态机实现的功能很简单,即实现各个状态之间的相互转换。但实际应用的状态机可能需要更多的功能,比如状态切换时传递参数,父状态与子状态的包含关系等。
目前比较成熟的状态机是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注册,并发送其名字和内存地址;
所述子状态向父状态注册,并发送其名字和内存地址。
进一步地,所述状态机启动时,先进入到一个父状态,并根据相应的切换信号,切换到另一个父状态;
当所述状态机接收到stop machine信号时,状态机由当前状态切换至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=new State(pStateMachine);
State*pChargeState=new State(pStateMachine);
StateFinal*pStateFinal=new StateFinal(pStateMachine);
然后创建pWorkState状态的三个子状态,每个状态都继承自State类
StateGetJob*pStateGetJob=new StateGetJob(pWorkState);
StateGotoPoint*pStateGotoPoint=new StateGotoPoint(pWorkState);
StateFinish*pStateFinish=new StateFinish(pWorkState);
再创建pChargeState状态的三个子状态,每个状态都继承自State类
StateBeginCharge*pStateBeginCharge=newStateBeginCharge(pChargeState);
StateOpenDoor*pStateOpenDoor=new StateOpenDoor(pChargeState);
StateCloseDoor*pCloseDoor=new StateCloseDoor(pChargeState);
将pWorkState状态的三个子状态添加到pWorkState父状态中并设置初始执行状态
pWorkState->addState("get job",pStateGetJob);
pWorkState->addState("goto point",pStateGotoPoint);
pWorkState->addState("finished",pStateFinish);
pWorkState->setInitState(pStateGetJob);
将pChargeState状态的三个子状态添加到pWorkState父状态中并设置初始执行状态
pChargeState->addState("begin charge",pStateBeginCharge);
pChargeState->addState("open door",pStateOpenDoor);
pChargeState->addState("close door",pCloseDoor);
pChargeState->setInitState(pStateBeginCharge);
将两个父状态以及final状态添加到pStateMachine中
pStateMachine->addState("work state",pWorkState);
pStateMachine->addState("charge state",pChargeState);
pStateMachine->addFinalState(pStateFinal);
设置pStateMachine的初始执行状态
pStateMachine->setInitState(pWorkState);
启动状态机
pStateMachine->start();
特别地,状态机启动后,首先执行pWorkState中的pStateGetJob状态,当该状态执行结束后,继续执行pWorkState状态中的其它状态,当pStateMachine收到父状态切换信号后,状态机从pWorkState状态中退出,然后执行pChargeState的pStateBeginCharge状态,当状态机收到停止信号后,执行pStateFinal状态的接口函数。
需要说明的是,如图4所示,State.cpp和StateMachine.cpp,State.cpp是该状态机的基类,实现了状态机每个状态的方法,StateMachine.cpp继承自State类,负责状态机的启停,以及管理父状态之间的切换工作,子状态之间的切换工作由父状态完成。每个状态都有自己的名字,在创建父状态时,父状态要向StateMachine注册,提供自己的名字和内存地址,子状态创建后要向父状态注册,提供自己的名字和内存地址。当一个状态执行完毕跳转到下一个状态时,通过postEvent函数指定要执行的下个状态,postEvent函数的第一个参数是要跳转到的下个状态的名字,第二个参数是要传递给下个状态的参数,可以为空,父状态或StateMachine根据下个状态的名字从注册过的状态列表中找到它的内存地址,然后执行该状态的接口函数。
每个子状态都有3个执行函数,分别是onEntry,handleTimeout,onExit函数,当首次进入该状态时,会执行onEntry函数,执行一些初始化工作,当下个跳转的状态跟当前状态相同时,则执行handleTimeout函数,当下个跳转的状态跟当前状态不同时,则先执行当前状态的onExit函数,执行一些清理工作,然后再执行下个状态的onEntry函数。
进一步地,本实施例中的状态机采用纯C++编码,可以嵌入到各种平台中使用。该状态机提供了多种功能,包括子状态切换,父状态切换,子状态循环,状态间传递参数等,如图3所示:状态机启动之前,要先初始化一下它的父状态,以确定当状态机进入到do job状态或goto charge状态时,该先执行哪个子状态;并初始化一下整个状态机的初始态,以确定状态机启动时要进入哪个父状态。上图3中的状态机启动时会先进入do job状态,当状态机收到switch to goto charge信号时,会切换到goto charge状态,当状态机收到stopmachine信号时,不论状态机处在哪种状态,都会切换到finale状态。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (4)

1.一种有限状态机的控制方法,其特征在于,包括:
根据状态机每个状态的名字和内存地址,创建状态机的每个状态,该状态包括两个父状态和一个final状态,每个父状态各包括三个子状态;
所述状态机当前的状态执行完毕后经postEvent函数指定要跳转的下个状态,其中postEvent函数的第一个参数为要跳转到的下个状态的名字、第二参数为要传递给下个状态的参数;
父状态或StateMachine根据下个状态的名字从注册过的状态列表中查找到对应的内存地址,并执行该下个状态的接口函数;
子状态间跳转时,首先执行onEntry函数,并在下个跳转的状态与当前状态相同时,则执行handleTimeout函数;以及在下个跳转的状态与当前状态不同时,则执行当前状态的onExit函数再执行onEntry函数。
2.如权利要求1所述的有限状态机的控制方法,其特征在于,所述根据状态机每个状态的名字和内存地址,创建状态机的每个状态,包括:
创建状态机的两个父状态和一个final状态,final状态继承自State类;
创建两个父状态各自的三个子状态,每个子状态继承自State类;
将每个父状态各自下的三个子状态添加到对应的父状态中并设置初始执行状态;
将两个父状态和final状态添加到StateMachine中,并设置StateMachine的初始执行状态;
所述父状态向所述StateMachine注册,并发送其名字和内存地址;
所述子状态向父状态注册,并发送其名字和内存地址。
3.如权利要求1所述的有限状态机的控制方法,其特征在于,所述状态机启动时,先进入到一个父状态,并根据相应的切换信号,切换到另一个父状态;
当所述状态机接收到stop machine信号时,状态机由当前状态切换至final状态。
4.一种有限状态机,其特征在于,采用如权利要求1-3任一项所述的有限状态机的控制方法。
CN201911244086.1A 2019-12-06 2019-12-06 一种有限状态机的控制方法及有限状态机 Active CN111026467B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911244086.1A CN111026467B (zh) 2019-12-06 2019-12-06 一种有限状态机的控制方法及有限状态机

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911244086.1A CN111026467B (zh) 2019-12-06 2019-12-06 一种有限状态机的控制方法及有限状态机

Publications (2)

Publication Number Publication Date
CN111026467A CN111026467A (zh) 2020-04-17
CN111026467B true CN111026467B (zh) 2022-12-20

Family

ID=70204601

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911244086.1A Active CN111026467B (zh) 2019-12-06 2019-12-06 一种有限状态机的控制方法及有限状态机

Country Status (1)

Country Link
CN (1) CN111026467B (zh)

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103049603A (zh) * 2012-12-13 2013-04-17 南京大学 一种带并发的状态机图转换到自动机的方法
CN104239013A (zh) * 2013-06-17 2014-12-24 上海联影医疗科技有限公司 基于委托的分散式状态机及其处理方法
CN105244042A (zh) * 2015-08-26 2016-01-13 安徽建筑大学 一种基于有限状态自动机的语音情感交互装置与方法
CN105845137A (zh) * 2016-03-18 2016-08-10 中国科学院声学研究所 一种语音对话管理***
CN106997293A (zh) * 2016-01-26 2017-08-01 上海大唐移动通信设备有限公司 有限状态机的实现方法及装置
CN108491238A (zh) * 2018-01-22 2018-09-04 中国电子科技集团公司第十五研究所 一种针对危化品电子交易订单的状态机及设计方法

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9218169B2 (en) * 2013-11-19 2015-12-22 Google Inc. Callpath finder
CN106502770B (zh) * 2015-09-07 2021-09-21 上海畅星软件有限公司 一种基于有限状态机的hmi状态迁移方法
US10678562B2 (en) * 2016-11-17 2020-06-09 K&M Systems, Inc. Systems and methods for facilitating real-time analytics

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103049603A (zh) * 2012-12-13 2013-04-17 南京大学 一种带并发的状态机图转换到自动机的方法
CN104239013A (zh) * 2013-06-17 2014-12-24 上海联影医疗科技有限公司 基于委托的分散式状态机及其处理方法
CN105244042A (zh) * 2015-08-26 2016-01-13 安徽建筑大学 一种基于有限状态自动机的语音情感交互装置与方法
CN106997293A (zh) * 2016-01-26 2017-08-01 上海大唐移动通信设备有限公司 有限状态机的实现方法及装置
CN105845137A (zh) * 2016-03-18 2016-08-10 中国科学院声学研究所 一种语音对话管理***
CN108491238A (zh) * 2018-01-22 2018-09-04 中国电子科技集团公司第十五研究所 一种针对危化品电子交易订单的状态机及设计方法

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
19.QT-事件发送函数sendEvent()、postEvent();诺谦;《博客园 https://www.cnblogs.com/lifexy/p/9042862.html》;20180515;全文 *
A Lightweight Finite State Machine C++ Library aimed at Seamless Integration with Robotic Middlewares;Victores J G et al.;《Towards Humanoid Robots OS Workshop at HUMANOIDS 2016》;20161130;全文 *
一个有限状态机的 C++ 实现;刘伟;《InfoQ https://www.infoq.cn/article/ft3J9SxtC0UgDbYdlzxP?utm_source=related_read_bottom》;20191120;全文 *
基于有限状态机的C++重载唯一性确定;牟永敏 等;《计算机应用研究》;20140430;第31卷(第04期);全文 *

Also Published As

Publication number Publication date
CN111026467A (zh) 2020-04-17

Similar Documents

Publication Publication Date Title
US9665396B2 (en) Controlling tasks performed by a computing system using instructions generated to control initiation of subroutine execution
JP2011501323A5 (zh)
CN108595210B (zh) 实现零开销循环的处理器
JP2017531375A (ja) マイクロコード化シーケンサを伴うアナログ/デジタル変換
EP2755138B1 (en) Testing implementation parameters of a computer program in a distributed environment
CN111026467B (zh) 一种有限状态机的控制方法及有限状态机
CN112817664A (zh) 一种数据处理***、方法及芯片
Vistein et al. Flexible and continuous execution of real-time critical robotic tasks
KR102212352B1 (ko) 로봇 제어 방법 및 장치
KR101235330B1 (ko) 임베디드 소프트웨어 개발 도구 통합 관리 장치 및 방법
CN104597820A (zh) 一种扩展单片机硬件定时器的方法
CN105786450A (zh) 一种标书文件导入方法和装置
JP5140652B2 (ja) ロボット用ソフトウェアコンポーネントのスレッド処理システム及び方法
CN100498714C (zh) 使用状态机构建电视机软件***的方法
CN111399813A (zh) 一种用于对象的状态切换***和方法
CN109932997A (zh) 一种可编程逻辑控制器内核***
CN107291038B (zh) 一种软件plc指令解析执行方法
TW201810048A (zh) 嵌入式系統之操作方法與控制晶片
KR100557518B1 (ko) 시스템 대규모 집적 회로, 그 설계 방법, 및 그에 대한프로그램
CN111371816A (zh) 一种基于条件触发的通信方法、***及通信设备
CN111371820A (zh) 一种基于定时器触发的通信方法、***及通信设备
KR101767418B1 (ko) 임베디드 운영체제에서 로직의 우선순위 보장 방법 및 그 장치
Ware et al. Supervisory control with progressive events
CN109308215B (zh) 一种基于纤程的交互方法、交互***及计算机装置
CN109518410B (zh) 一种洗衣机的控制方法及洗衣机

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
TA01 Transfer of patent application right

Effective date of registration: 20201020

Address after: 230088 No. 5111 Wangjiang West Road, hi tech Zone, Anhui, Hefei

Applicant after: Hefei Technological University Intelligent Robot Technology Co.,Ltd.

Address before: 230088 No. 5111 Wangjiang West Road, hi tech Zone, Anhui, Hefei

Applicant before: Hefei Technological University Intelligent Robot Technology Co.,Ltd.

Applicant before: CSG SMART SCIENCE & TECHNOLOGY Co.,Ltd.

Applicant before: CSG SMART ELECTRIC TECHNOLOGY Co.,Ltd.

TA01 Transfer of patent application right
GR01 Patent grant
GR01 Patent grant