CN101957751B - 一种状态机的实现方法及装置 - Google Patents
一种状态机的实现方法及装置 Download PDFInfo
- Publication number
- CN101957751B CN101957751B CN 201010193439 CN201010193439A CN101957751B CN 101957751 B CN101957751 B CN 101957751B CN 201010193439 CN201010193439 CN 201010193439 CN 201010193439 A CN201010193439 A CN 201010193439A CN 101957751 B CN101957751 B CN 101957751B
- Authority
- CN
- China
- Prior art keywords
- state
- incident
- relation
- state machine
- response
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
本发明公开了一种状态机的实现方法及装置,主要技术方案包括:确定当前生成的事件以及状态机当前的状态;查找预先确定的存在响应关系的状态与事件的对应关系,判断当前生成的事件以及状态机当前的状态是否存在响应关系;若存在响应关系,则根据预先确定的存在响应关系的状态与事件对应的处理函数标识和转换的下一状态,确定出状态机当前的状态和当前生成的事件对应的处理函数标识以及转换的下一状态,并在执行确定的处理函数标识对应的处理函数成功后,控制所述状态机跳转至确定出的下一状态;若不存在响应关系,则控制所述状态机保持当前状态。采用该技术方案实现状态机,提高了状态转换的效率,并且易于维护。
Description
技术领域
本发明涉及状态机技术领域,尤其涉及一种状态机的实现方法及装置。
背景技术
有限状态机(Finite State Machine,FSM)又称为有限状态自动机或简称状态机,表示有限个状态以及这些状态之间的转移和动作等行为的数学模型。一般情况下,有限状态机通过状态、事件、转换和动作之间的关系来控制状态的转换,其中:
状态(State)指对象在其生命周期中的一种状况,处于某个特定状态中的对象必然会满足某些条件、执行某些动作或者等待某些事件;
事件(Event)指在时间和空间上占有一定位置,并且对状态机来讲是有意义的那些事情,即事件通常会引起状态的变迁,促使状态机从一种状态切换到另一种状态;
转换(Transition)指两个状态之间的一种关系,表明对象将在第一个状态中执行一定的动作,并将在某个事件发生(即某个特定条件满足)时进入第二个状态;
动作(Action)指状态机中可以执行的原子操作,所谓原子操作指它们在运行的过程中不能被其他消息所中断,必须一直执行下去。
状态机作为一种概念性机器,它能采取某种动作来响应一个外部事件。具体采取的动作不仅能取决于接收到的事件,还能取决于各个事件的相对发生顺序。之所以能做到这一点,是因为状态机能够跟踪一个内部状态,它会在收到事件后进行更新。另外,采取的行动还会决定并更新机器的状态。这样一来,任何逻辑都可建模成一系列事件/状态组合。在软件领域,状态机被普遍用于搜索引擎的分词、编译器实现、游戏开发和工作流引擎实现等,例如,在游戏开发中,通常用FSM实现游戏中人物的控制和任务的触发等,在工作流引擎实现中,通常用FSM来实现对于流程实例、活动实例、转移实例、工作项实例的状态迁移。
与其他常用的设计模式有所不同,程序员想要在软件系统中加入状态机时,必须额外编写一部分用于逻辑控制的代码,对于状态机的实现,目前常用的方法有以下两种:
一种方法是使用switch语句实现状态机,其基本思路是为状态机中的每一种状态设置一个case分支,用于对该状态进行处理。每个case分支都对相应状态下的状态转换条件(即触发状态转换的事件)以及动作进行了描述,能够控制状态机较好地工作,但该switch语句实现状态机的方法中,代码的可读性并不理想,主要原因是实现状态机转换时,检查状态转换条件和进行状态转换都混杂在一个case分支中,即混杂在当前状态中完成。显然,如果在每种状态下都需要分别检查多个不同的转换条件,并且需要根据检查结果控制状态机切换到不同的状态,对状态机各状态的控制效率很低,并且,由于如果状态机的状态很多,或者状态之间的转换关系复杂,则代码就会显得复杂混乱,这样,如果需要对状态机进行维护,则存在很大困难,甚至不可维护。
另一种方法是使用函数指针数组实现状态机,状态机实质上就是维护一个“状态-事件”的二维矩阵关系,因此可以采用二维函数指针数组的方法,形如(*process)()process_function[state][event],即通过设定的“状态-事件”的二维矩阵关系,控制状态机的跳转以及相应动作的实现。该方法能够更加直观地实现状态机,但使用该方法实现状态机时,由于动作是为特定的状态和事件设计的,那么一个动作可能混杂不同的逻辑处理,因此状态机转换的效率很低,并且,event(事件)的编号必须从0开始连续编号,因此,如果在某个状态下增加一个事件,其它状态即使不需要考虑这个事件,也需要增加相应的处理以保证矩阵的完整性,因此,对状态机的维护过程很复杂,尤其在系统非常复杂时,状态机甚至不可维护。
综上所述,采用现有技术实现的状态机,对状态机各状态的控制效率低,并且维护过程复杂。
发明内容
有鉴于此,本发明实施例提供一种状态机的实现方法及装置,采用该技术方案实现状态机,提高了对状态机各状态的控制效率,并且易于维护。
本发明实施例通过如下技术方案实现:
根据本发明实施例的一个方面,提供了一种状态机的实现方法。
根据本发明实施例提供的状态机的实现方法,包括:
若根据为状态机定义的状态、事件以及处理函数的关系,确定状态机为不确定有限状态机,则将为所述状态机定义的状态、事件以及处理函数的关系转换为确定有限状态机对应的状态、事件以及处理函数的关系;
确定当前生成的事件以及所述状态机当前的状态;
查找预先确定的存在响应关系的状态与事件的对应关系,判断所述当前生成的事件以及所述状态机当前的状态是否存在响应关系;
若存在响应关系,则根据预先确定的存在响应关系的状态与事件对应的处理函数标识和转换的下一状态,确定出所述状态机当前的状态和所述当前生成的事件对应的处理函数标识以及转换的下一状态,并
在执行确定的所述处理函数标识对应的处理函数成功后,控制所述状态机跳转至确定出的下一状态;
若不存在响应关系,则控制所述状态机保持当前状态;
其中,将为所述状态机定义的状态、事件以及处理函数的关系转换为确定有限状态机对应的状态、事件以及处理函数的关系,包括:
根据为状态机定义的状态、事件以及处理函数的关系,确定对应多个转换的下一状态的当前状态;
针对确定出的对应多个转换的下一状态的当前状态,分别执行:
构造与所述多个转换的下一状态分别对应的响应事件;
建立各响应事件与所述当前状态之间的响应关系;以及
根据各响应关系中响应事件对应的转换的下一状态,建立各响应关系中所述当前状态对应的下一状态。
根据本发明实施例的另一个方面,还提供了一种状态机的实现装置。
根据本发明实施例提供的状态机的实现装置,包括:
关系转换单元,用于在确定状态机为不确定有限状态机时,在根据为状态机定义的状态、事件以及处理函数的关系生成状态表之前,将为状态机定义的状态、事件以及处理函数的关系转换为确定有限状态机对应的状态、事件以及处理函数的关系;
所述关系转换单元,具体包括:
当前状态确定模块,用于根据为状态机定义的状态、事件以及处理函数的关系,确定对应多个转换的下一状态的当前状态;
关系建立模块,用于针对所述当前状态确定模块确定出的当前状态,分别执行:构造与所述多个转换的下一状态分别对应的响应事件,建立各响应事件与所述当前状态之间的响应关系,并根据各响应关系中响应事件对应的转换的下一状态,建立各响应关系中所述当前状态对应的下一状态;
状态以及事件确定单元,用于确定当前生成的事件以及状态机当前的状态;
响应关系确定单元,用于查找预先确定的存在响应关系的状态与事件的对应关系,判断所述状态以及事件确定单元确定的所述事件以及所述状态是否存在响应关系;
状态控制单元,用于在所述响应关系确定单元确定不存在响应关系时,控制所述状态机保持当前状态;在所述响应关系确定单元确定存在响应关系时,根据预先确定的存在响应关系的状态与事件对应的处理函数标识和转换的下一状态,确定出所述状态以及事件确定单元确定的所述状态和事件对应的处理函数标识以及转换的下一状态,并在执行确定的所述处理函数标识对应的处理函数成功后,控制所述状态机跳转至确定出的下一状态。
通过本发明实施例提供的上述至少一个技术方案实现状态机时,首先确定当前生成的事件以及状态机当前的状态,通过查找预先确定的存在响应关系的状态与事件的对应关系,判断当前生成的事件以及状态机当前的状态是否存在响应关系,若存在响应关系,则根据预先确定的存在响应关系的状态与事件对应的处理函数标识和转换的下一状态,确定出状态机当前的状态和当前生成的事件对应的处理函数标识以及转换的下一状态,并在执行确定的处理函数标识对应的处理函数成功后,控制状态机跳转至确定出的下一状态;若不存在响应关系,则控制该状态机保持当前状态。根据该技术方案,预先确定存在响应关系的状态与事件的对应关系及其存在响应关系的状态与事件对应的处理函数标识和转换的下一状态,从而在实现状态机时,能够通过查找该预先确定的对应关系确定当前状态和事件对应的动作(即处理函数标识)以及转换的下一状态,代码清晰,能够快速、准确地实现对状态机状态的控制,提高了状态机的控制效率;并且,根据本发明实施例,状态机的动作(即处理函数)不依赖于状态和事件,代码简单,易于维护。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:
图1为本发明实施例提供的状态机的实现方法流程图一;
图2为本发明实施例提供的状态机的实现方法流程图二;
图3为本发明实施例提供的状态图示例;
图4为本发明实施例提供的生成二维数组的流程图;
图5为本发明实施例提供的通过状态机事件处理函数执行状态处理的流程图;
图6为本发明实施例提供的不确定有限状态机转换为确定有限状态机的流程图;
图7为本发明实施例提供的不确定有限状态机对应的状态图示例;
图8为本发明实施例提供的图6对应的确定有限状态机对应的状态图示例;
图9为本发明实施例提供的执行确定的处理函数失败时的流程图;
图10为本发明实施例提供的状态机的实现装置示意图一;
图11为本发明实施例提供的状态机的实现装置示意图二;
图12为本发明实施例提供的状态机的实现装置示意图三;
图13为本发明实施例提供的状态机的实现装置示意图四;
图14为本发明实施例提供的图13中的关系转换单元结构示意图;
图15为本发明实施例提供的状态机的实现装置示意图五。
具体实施方式
为了给出提高状态机各状态的控制效率以及易于维护的实现方案,本发明实施例提供了一种状态机的实现方法及装置,以下结合说明书附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。并且在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
根据本发明实施例,首先提供了一种状态机的实现方法,该方法基于预先确定的控制信息实现,其中,该预先确定的控制信息包括:存在响应关系的状态与事件的对应关系,及其存在响应关系的状态与事件对应的处理函数标识和转换的下一状态。
具体地,确定上述控制信息的过程,包括:
根据为状态机定义的状态、事件以及处理函数的关系生成状态表,其中:
若状态所在行与事件所在列的交叉单元格中存储有信息,则表示该状态与事件存在响应关系,该单元格中存储的信息为存在响应关系的该状态和事件对应的处理函数标识以及转换的下一状态;
若状态所在行与事件所在列的交叉单元格为空,则表示该状态与事件不存在响应关系。
如图1所示,基于上述预先确定的控制信息,在监控到状态机中有事件生成时,控制状态机的过程主要包括如下步骤:
步骤101、确定当前生成的事件以及状态机当前的状态。
步骤102、查找预先确定的存在响应关系的状态与事件的对应关系;
步骤103、判断当前生成的事件以及状态机当前的状态是否存在响应关系,若否,执行步骤104,否则执行步骤105;
步骤104、控制该状态机保持当前状态,至此结束流程。
步骤105、根据预先确定的存在响应关系的状态与事件对应的处理函数标识和转换的下一状态,确定出状态机当前的状态和当前生成的事件对应的处理函数标识以及转换的下一状态;
步骤106、执行确定的处理函数标识对应的处理函数,并在执行成功后,控制状态机跳转至确定出的下一状态,至此结束流程。
图1所示流程为在状态机中有事件生成时,根据预先确定的信息控制状态机的过程,实际应用中,需要对状态机中事件进行监控,在每次有新的事件生成时,通过上述步骤控制状态机的状态。
根据本发明优选实施例,将生成的状态表通过二维数组结构进行保存,将处理函数标识与处理函数的对应关系通过一维数组结构保存。如图2所示,基于该二维数组结构保存的控制信息以及一维数组结构保存的处理函数信息,实现状态机控制的过程,包括如下步骤:
步骤201、为状态机定义状态、事件以及处理函数的关系;
步骤202、根据为状态机定义的状态、事件以及处理函数的关系生成一个二维数组以及一个一维数组;
上述步骤201以及步骤202独立地构成了对状态机的状态、事件以及处理函数的关系的预处理过程,根据该预处理得到的二维数组以及一维数组用于控制后续状态机的实现。
步骤203、监控状态机中的事件,在有新的事件生成时,确定当前生成的事件以及状态机当前的状态;
步骤204、通过查找生成的二维数组确定该事件以及状态是否存在响应关系,若否,执行步骤205,若是,执行步骤206;
步骤205、控制该状态机保持当前状态;
步骤206、通过查找生成的二维数组确定存在响应关系的该状态和事件对应的处理函数标识以及转换的下一状态;
步骤207、通过查找生成的一维数组确定与该处理函数标识对应的处理函数,并在执行确定的处理函数成功后,控制该状态机跳转至确定出的下一状态。
上述步骤203以及步骤207独立地构成了实现状态机的过程,即根据预先生成的一维数组以及二维数组控制状态机的状态。
图2所示流程的步骤201中,为状态机定义的状态、事件以及处理函数的关系包括:
状态机包括的状态以及响应各状态的事件;
存在响应关系的状态和事件对应的处理函数以及转换的下一状态。
上述关系通常通过图3所示的状态图表示,从图3表示的关系可以直观地确定各状态以及对应的响应状态,其中,状态机对应的各状态分别通过STATE0、STATE1、STATE2、STATE3、STATE4表示(图3中示出了5种状态,实际应用中,可能包括更多的状态);事件通过EVENT0、EVENT1、EVENT2、EVENT3、EVENT4、EVENT5、EVENT6(图3中示出了6种事件,实际应用中,可能包括更多的事件);状态之间的关系通过箭头表示,例如,从状态STATE0出来的箭头EVENT0指向下一状态STATE1,即在STATE0状态下收到EVENT0事件,则触发相应的处理函数,并在执行处理函数成功后,状态机从状态STATE0转换为STATE1。其中,为了简化状态图,图3所示的状态图仅表示了状态以及事件之间的关系,对于存在响应关系的状态和事件对应的处理函数,通过其它方式表示,例如,通过单独的状态图表示,或通过列表方式表示,当然也可以在该图3所示的状态图中标出相应的处理函数标识,具体可以有多种表示方式,此处不再一一列举。
图2所示流程的步骤202中,生成的二维数组用于表示状态与事件的关系以及存在响应关系的状态和事件对应的处理函数标识以及转换的下一状态。如图4所示,本发明实施例中,根据为状态机定义的状态、事件以及处理函数的关系生成该二维数组的过程,具体包括如下步骤:
步骤401、根据为状态机定义的状态、事件以及处理函数的关系,生成状态表;
步骤402、根据定义的二维数组的数据结构,将生成的状态表转换为二维数组。
图4所示流程的步骤401中,状态表的列可以表示状态机对应的状态,状态表的行可以表示事件。假设状态机有M个状态和N个事件,那么除去首行和首列外,状态表就有M列N行。当然,也可以通过状态表的行表示状态机对应的状态,通过状态表的列表示事件。图3所示状态图对应的状态表格式具体可以如下表:
STATE0 | STATE1 | STATE2 | STATE3 | STATE4 | |
EVENT0 | |||||
EVENT1 | |||||
EVENT2 | |||||
EVENT3 | |||||
EVENT4 | |||||
EVENT5 | |||||
EVENT6 |
根据上表所示结构,结合图3中所示的状态图中的状态转换关系以及相应的响应事件,生成状态表的过程如下;
上述状态表的行与列交叉的单元格用于表示状态与事件的关系,具体地,可以如上表所示,通过状态表的行表示事件,通过状态表的列表示状态,根据本发明实施例,也可以通过状态表的列表示事件,通过状态表的行表示状态,具体表示方式可以灵活设置。本发明以下实施例中,以通过状态表的行表示事件,通过状态表的列表示状态为例说明,根据该状态表,在状态和事件存在响应关系时,通过该单元格表示存在响应关系的状态和事件对应的处理函数标识以及转换的下一状态,若状态和事件不存在响应关系,则该单元格为空。
从图3所示的状态图可以看到,从状态STATE0出来的箭头EVENT0,指向下一状态STATE1,那么在状态表的STATE0列和EVENT0行交叉的单元格首先写入转换的下一状态STATE1,假设从STATE0到STATE1依次执行的处理函数对应的标识分别为A、B、C,则把相应的处理函数标识ABC也写入该单元格中,如下表所示:
根据上述生成STATE0列EVENT0行对应单元格的过程,可以确定行和列交叉的单元表示状态和事件的关系,如果状态Y要响应事件X,那么表X行和Y列交叉的单元格就填上Y状态的下一状态Z和执行的动作(即处理函数标识),根据此原理,可以将图3所示状态图生成如下表所示的状态表:
图3中存在响应关系的状态和事件对应的处理函数标识如前所述,可以通过其它方式表示,在生成上述状态表时,可以获取该通过其它方式表示的处理函数标识以及处理函数的对应关系信息,并结合图3生成上述的状态表。例如,上表中,STATE0和EVENT0交叉的单元格表达了如下信息:
在STATE0状态下,如果发生了EVENT0事件,那么执行处理函数标识为A、B、C的处理函数,在执行完所有处理函数后,状态机转换到STATE1状态。上表中,若状态Y和事件X对应的单元为空,则表示该状态Y不响应事件X。
图4所示流程的步骤402、将生成的状态表转换为二维数组,即通过二维数组来描述状态表,该二维数组的数据结构可以为:
fsm_state_event[MAX_STATE][MAX_EVENT]
该二维数组可以称作状态-事件数组,数组元素的结构可以定义如下:
其中:
next_stat表示下一状态;
actlist表示对应的处理函数标识。
其中,可以进一步定义状态和事件的枚举类型,分别表示状态ID和事件ID,具体如下:
上述代码用于表示状态的ID。
上述代码用于表示事件的ID。
根据上述数据结构,最终生成的状态-事件数组表,可以如下所示:
图2所示流程的步骤202中,生成的一维数组用于表示各处理函数标识分别对应的处理函数,具体地,状态表中提到处理函数,也即状态机执行的动作,可以通过形如fsm_act_tab[]的一维数组存放。实际应用中,数组大小为26,可以存放26个处理函数,从设计上考虑,状态机一般不会超过26个原子操作,可以通过字母作为处理函数的标识,例如,状态表中的字母“A”表示第0个处理函数,“B”表示第1个处理函数,“C”表示第2个处理函数,依次类推,26个字母就对应26个处理函数,状态表中没有出现的字母,在fsm_act_tab[]对应位置为NULL。函数数组定义如下:
上述代码表示处理函数标识与处理函数之间的对应关系。
根据本申请优选实施例,在具体应用时,状态和事件都通过分布为各状态以及分别为各事件分配的标识ID表示,基于此,通过以上实施例定义的一维数组以及二维数组,在状态机的实现过程中,当有事件生成时,以状态机当前状态ID和生成事件ID查找对应的二维数组,从确定的二维数组fsm_state_event中获取相应元素,即“next_stat”和“actlist”。在成功获取到相应元素后,根据元素中“actlist”指定的处理函数标识查找fsm_act_tab,找到对应的处理函数并执行,在执行成功后,状态机转换到状态表中指定的下一跳状态。实际应用中,该过程可以通过状态机事件处理函数fsm_proc_event()完成,具体流程如图5所示,包括如下步骤:
步骤501、执行Cur_item=fsm_state_event[cur_state][event_no],即根据当前状态和事件从以二维数组表示的状态表中取元素;
其中:cur_state表示当前状态,event_no表示当前事件ID。
步骤502、判断Cur_item=NULL是否为真(TRUE),若为真,则结束流程,否则(FALSE)执行步骤503;
步骤503、计算“actlist”字符的长度L,并取i=0;
步骤504、从actlist中取第i个字母(即处理函数标识);
步骤505、从fsm_act_tab中取与该字母对应的处理函数,并执行;
步骤506、判断函数是否执行成功,若是,则执行步骤507,否则结束;
步骤507、执行i++;
步骤508、判断i<L是否为真,若是,执行步骤504,若否,执行步骤509;
步骤509、状态机跳转至Cur_item的next_stat,并结束。
为了更好地理解本发明实施例,以设备的热插拔为例,该功能一般涉及到6个事件,即:PUSH、PULL、remove、no remove、install、no install,6个状态,即:none、installed、run_config、running、run_remove、conflict。首先对这些事件和状态编号,按照状态图构建状态表。假设状态机当前状态是running(即设备运行正常),如果用户拔出设备,中断立即产生PUSH事件,根据running状态的ID号和PUSH事件的ID号就能从状态表中查到处理函数标识,执行查到的处理函数标识对应的处理函数后,状态转换到表中指定的下一状态run_remove。
实际应用中,有限状态机可以分为确定有限状态机(DFA)和不确定有限状态机(NFA)。它们的区别是NFA对同一事件完全有可能有多种理解方式,也就是说它的下一状态可能有多种,而DFA则只有唯一的下一状态。上述方法实现了有限确定状态机,因为在状态表中,一个状态和一个事件对应唯一的下一状态(DFA)。当出现一个状态和一个事件对应多个下一状态(NFA)的情况时,需要进行预处理,针对此问题,本发明优选实施例中,在根据为状态机定义的状态、事件以及处理函数的关系生成状态表之前,还包括如下步骤:
根据为状态机定义的状态、事件以及处理函数的关系,确定该状态机的类型;
若根据为状态机定义的状态、事件以及处理函数的关系,确定该状态机为确定有限状态机,则可以直接根据该为状态机定义的状态、事件以及处理函数的关系生成状态表;
若确定该状态机为不确定有限状态机,则在根据为状态机定义的状态、事件以及处理函数的关系生成状态表之前,还可以执行如下步骤:
将为状态机定义的状态、事件以及处理函数的关系转换为确定有限状态机对应的状态、事件以及处理函数的关系。
其中,将为状态机定义的状态、事件以及处理函数的关系转换为确定有限状态机对应的状态、事件以及处理函数的关系,如图6所示,具体包括如下步骤:
步骤601、根据为状态机定义的状态、事件以及处理函数的关系,确定对应多个转换的下一状态的当前状态;
步骤602、针对确定的当前状态,分别构造与多个转换的下一状态分别对应的响应事件;
步骤603、针对确定的当前状态,分别建立各响应事件与当前状态之间的响应关系,并根据各响应关系中响应事件对应的转换的下一状态,建立各响应关系中当前状态对应的下一状态。
为了更好地理解上述实施例,以下结合具体的状态图对上述实施例进行说明:
如图7所示,为状态机对应的状态图,根据图3所示的状态图,在STATE1状态下,如果EVENT1事件发生,下一状态可能是STATE0,也可能是STATE2。因此,需要将NFA转换为DFA,具体可通过如下方法:
构造函数A,该函数A用于确定在STATE1状态和EVENT1事件下与多个转换的下一状态(即STATE0以及STATE2)分别对应的响应事件,如STATE0对应EVENT3,STATE2对应EVENT4;并建立各响应事件与STATE1之间的响应关系,根据各响应关系中响应事件对应的转换的下一状态,建立各响应关系中STATE1对应的下一状态。根据构造的该函数A,在状态机运行过程中,根据状态机当前运行环境从当前状态对应的多个转换的下一状态中选择实际转换的下一状态,即在STATE1状态下收到EVENT1事件时调用该函数A,根据该函数A控制最终进入STATE0还是STATE2。如果分析的结果是进入STATE0,那么函数A发出中间事件EVENT3(STATE0对应的响应事件),如果要进入STATE2,那么函数A发出中间事件EVENT4(STATE2对应的响应事件)。状态机执行完函数A后又进入STATE1,并收到根据函数A的执行结果发出的EVENT3或者EVENT4。此时,在STATE1状态下我们就可以根据EVENT3或者EVENT4设置STATE1的真正下一状态。根据该方法转换后的状态图如图8所示,即在STATE1状态下,收到EVENT3事件,则进入STATE0,收到EVENT4事件,则进入STATE2。根据图8所示的状态图,生成的状态表如下表所示:
根据上述实施例提供的方法,间接地实现了同一状态下同一事件对应不同的下一状态的情况。由于EVENT3和EVENT4是状态机自身产生的,是为实现NFA而做的特殊处理,则只有STATE1才响应这两个事件,其它的状态不做处理,因此,根据本发明实施例,虽然NFA转换成DFA增加了事件,但并没有增加状态表的复杂度。
为了使本发明实施例提供的上述技术方案更具有适应性,能够满足更多的情况,本申请实施例还提供了状态机自我修复的机制,在状态机的处理过程中,通常会有这样的情况,处理函数返回错误往往不是因为不可恢复的故障导致,而是因为时机还不成熟,例如,某些条件未得到满足。因此,为了避免由于此类问题导致状态机终止的情况,本发明实施例将处理函数返回失败的原因进行细分,状态机的事件处理函数fsm_proc_event()根据具体的原因,决定该如何处理。
在状态机的具体实现过程中,进一步结合图1所示流程,即在图1所示流程的步骤106中,若执行确定的处理函数失败,则如图9所示,该方法还进一步包括如下步骤:
步骤901、确定该处理函数执行失败的原因;
步骤902、根据设定的原因与返回值的对应关系,确定与该原因对应的返回值;
步骤903、根据确定的返回值,确定对执行失败的处理函数的处理方式。
实际应用中,处理函数的返回值类型可定义如下
其中:
FSM_ACT_ST_DONE表示函数执行成功能够转换到下一状态;
FSM_ACT_ST_SLEEP表示状态机可能缺少一些条件,导致动作不能完成;在遇到这种情况时,状态机会sleep(即休眠)一段时间,若到达休眠阈值,则重新调用返回该值的处理函数;
返回FSM_ACT_ST_PEND与返回FSM_ACT_ST_SLEEP情况类似,但后续处理不同。当返回FSM_ACT_ST_PEND时,状态机不会主动进行错误处理,而是需要等待外部事件来重新激活状态机,并调用返回该值的处理函数;
FSM_ACT_ST_FAILED指出现了不可恢复的故障,没有办法再改变状态机,除非reset状态机(即重启状态机)。
例如,在状态发生转换时要调用标识为“A”、“B”、“C”的处理函数,处理函数A执行成功,但处理函数B返回“FSM_ACT_ST_SLEEP”,这说明没有满足状态机转换的条件,但只是时间问题,那么状态机会sleep(休眠)一段时间,然后再次调用处理函数B,如果再次调用处理函数B还是返回“FSM_ACT_ST_SLEEP”,则重复以上操作,如果返回成功就继续执行下一处理函数,即执行处理函数C。
通过以上实施例实现的状态机,有以下优点:
1、由于所有的状态机都能转换成状态表来描述,因此,本申请实施例提供的方法通用性很强,如果要实现新的状态机,那么只需构造出状态-事件数组和处理函数数组即可。
2、使用本申请实施例提供的方法实现的状态机易于维护,例如,在某一状态下的事件需要添加处理函数,那么只需要做两件事:在处理函数数组中添加函数;在状态-事件数组中添加表示该处理函数的处理函数标识。如果状态机要增加一个状态或者增加一个事件,也只是在状态-事件数组中添加一列或者一行。
3、本申请实施例提供的状态机的实现方法,代码可读性很强,能够从状态-事件二维数组中看出状态->事件->动作->下一状态的关系,状态-事件数组就是对状态机最直观的反映。
相应地,与上述状态机的实现方法流程对应,本发明实施例还提供了一种状态机的实现装置,如图10所示,该装置包括:
状态以及事件确定单元1001、响应关系确定单元1002以及状态控制单元1003;
其中:
状态以及事件确定单元1001,用于确定当前生成的事件以及状态机当前的状态;
响应关系确定单元1002,用于查找预先确定的存在响应关系的状态与事件的对应关系,判断状态以及事件确定单元1001确定的所述事件以及所述状态是否存在响应关系;
状态控制单元1003,用于在响应关系确定单元确定不存在响应关系时,控制状态机保持当前状态;在响应关系确定单元1002确定存在响应关系时,根据预先确定的存在响应关系的状态与事件对应的处理函数标识和转换的下一状态,确定出所述状态以及事件确定单元确定的所述状态和事件对应的处理函数标识以及转换的下一状态,并在执行确定的所述处理函数标识对应的处理函数成功后,控制所述状态机跳转至确定出的下一状态。
如图11所示,本申请优选实施例中,图10所示的装置还可以进一步包括:
对应关系预处理单元1004,用于确定存在响应关系的状态与事件的对应关系及其存在响应关系的状态与事件对应的处理函数标识和转换的下一状态。
具体地,本发明优选实施例中,图11所示的装置包括的对应关系预处理单元1004,具体用于:
根据为状态机定义的状态、事件以及处理函数的关系生成状态表,其中若状态所在行与事件所在列的交叉单元格或状态所在列与事件所在行的交叉单元格中存储有信息,则表示该状态与该事件存在响应关系,所述信息为存在响应关系的该状态和该事件对应的处理函数标识以及转换的下一状态;若所述交叉单元格为空,则表示该状态与该事件不存在响应关系。
如图12所示,本申请优选实施例中,图11所示的装置还可以进一步包括:
状态机类型确定单元1005,用于根据为状态机定义的状态、事件以及处理函数的关系,确定所述状态机的类型;
相应地,对应关系预处理单元1004,具体用于在状态机类型确定单元1005确定所述状态机为确定有限状态机时,根据为状态机定义的状态、事件以及处理函数的关系生成状态表。
如图13所示,本申请优选实施例中,图12所示的装置还可以进一步包括:
关系转换单元1006,用于在状态机类型确定单元1005确定所述状态机为不确定有限状态机时,在对应关系预处理单元1004根据为状态机定义的状态、事件以及处理函数的关系生成状态表之前,将为状态机定义的状态、事件以及处理函数的关系转换为确定有限状态机对应的状态、事件以及处理函数的关系。
如图14所示,本申请优选实施例中,图13所示的装置中包括的关系转换单元1006,具体包括:
当前状态确定模块1006A,用于根据为状态机定义的状态、事件以及处理函数的关系,确定对应多个转换的下一状态的当前状态;
关系建立模块1006B,用于针对当前状态确定模块1006A确定出的当前状态,分别执行:构造与所述多个转换的下一状态分别对应的响应事件,建立各响应事件与所述当前状态之间的响应关系,并根据各响应关系中响应事件对应的转换的下一状态,建立各响应关系中所述当前状态对应的下一状态。
如图15所示,本申请优选实施例中,图10所示的装置还可以进一步包括:
处理函数执行单元1007,用于在执行确定的所述处理函数失败时,确定所述处理函数执行失败的原因,根据设定的原因与返回值的对应关系,确定与所述原因对应的返回值,并根据确定的所述返回值,确定对执行失败的所述处理函数的处理方式。
应当理解,以上装置包括的单元或/和模块仅为根据该装置实现的功能进行的逻辑划分,实际应用中,可以进行上述单元或/和模块的叠加或拆分。并且该实施例提供的状态机的实现装置所实现的功能与上述实施例提供的状态机的实现方法流程一一对应,对于该装置所实现的更为详细的处理流程,在上述方法实施例中已做详细描述,此处不再详细描述。
通过本发明实施例提供的上述至少一个技术方案实现状态机时,首先确定当前生成的事件以及状态机当前的状态,通过查找预先确定的存在响应关系的状态与事件的对应关系,判断确定的该事件以及该状态是否存在响应关系,若存在响应关系,则根据预先确定的存在响应关系的状态与事件对应的处理函数标识和转换的下一状态,确定出确定的该状态和事件对应的处理函数标识以及转换的下一状态,并在执行确定的处理函数标识对应的处理函数成功后,控制状态机跳转至确定出的下一状态;若不存在响应关系,则控制该状态机保持当前状态。根据该技术方案,预先确定存在响应关系的状态与事件的对应关系及其存在响应关系的状态与事件对应的处理函数标识和转换的下一状态,从而在实现状态机时,能够通过查找该预先确定的对应关系确定当前状态和事件对应的动作(即处理函数标识)以及转换的下一状态,代码清晰,能够快速、准确地实现对状态机状态的控制,提高了状态机的控制效率;并且,根据本发明实施例,状态机的动作(即处理函数)不依赖于状态和事件,代码简单,易于维护。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (10)
1.一种状态机的实现方法,其特征在于,包括:
若根据为状态机定义的状态、事件以及处理函数的关系,确定状态机为不确定有限状态机,则将为所述状态机定义的状态、事件以及处理函数的关系转换为确定有限状态机对应的状态、事件以及处理函数的关系;
确定当前生成的事件以及所述状态机当前的状态;
查找预先确定的存在响应关系的状态与事件的对应关系,判断所述当前生成的事件以及所述状态机当前的状态是否存在响应关系;
若存在响应关系,则根据预先确定的存在响应关系的状态与事件对应的处理函数标识和转换的下一状态,确定出所述状态机当前的状态和所述当前生成的事件对应的处理函数标识以及转换的下一状态,并
在执行确定的所述处理函数标识对应的处理函数成功后,控制所述状态机跳转至确定出的下一状态;
若不存在响应关系,则控制所述状态机保持当前状态;
其中,将为所述状态机定义的状态、事件以及处理函数的关系转换为确定有限状态机对应的状态、事件以及处理函数的关系,包括:
根据为状态机定义的状态、事件以及处理函数的关系,确定对应多个转换的下一状态的当前状态;
针对确定出的对应多个转换的下一状态的当前状态,分别执行:
构造与所述多个转换的下一状态分别对应的响应事件;
建立各响应事件与所述当前状态之间的响应关系;以及
根据各响应关系中响应事件对应的转换的下一状态,建立各响应关系中所述当前状态对应的下一状态。
2.如权利要求1所述的方法,其特征在于,确定存在响应关系的状态与事件的对应关系及其存在响应关系的状态与事件对应的处理函数标识和转换的下一状态,包括:
根据为状态机定义的状态、事件以及处理函数的关系生成状态表,其中若状态所在行与事件所在列的交叉单元格或状态所在列与事件所在行的交叉单元格中存储有信息,则表示该状态与该事件存在响应关系,所述信息为存在响应关系的该状态和该事件对应的处理函数标识以及转换的下一状态;若所述交叉单元格为空,则表示该状态与该事件不存在响应关系。
3.如权利要求2所述的方法,其特征在于,将生成的所述状态表通过二维数组结构进行保存。
4.如权利要求2所述的方法,其特征在于,根据为状态机定义的状态、事件以及处理函数的关系生成状态表之前,还包括:
根据为状态机定义的状态、事件以及处理函数的关系,确定所述状态机为确定有限状态机。
5.如权利要求1所述的方法,其特征在于,若执行确定的处理函数标识对应的处理函数失败,则所述方法还包括:
确定所述处理函数执行失败的原因;
根据设定的原因与返回值的对应关系,确定与所述原因对应的返回值;
根据确定的所述返回值,确定对执行失败的所述处理函数的处理方式。
6.一种状态机的实现装置,其特征在于,包括:
关系转换单元,用于在确定状态机为不确定有限状态机时,在根据为状态机定义的状态、事件以及处理函数的关系生成状态表之前,将为状态机定义的状态、事件以及处理函数的关系转换为确定有限状态机对应的状态、事件以及处理函数的关系;
所述关系转换单元,具体包括:
当前状态确定模块,用于根据为状态机定义的状态、事件以及处理函数的关系,确定对应多个转换的下一状态的当前状态;
关系建立模块,用于针对所述当前状态确定模块确定出的当前状态,分别执行:构造与所述多个转换的下一状态分别对应的响应事件,建立各响应事件与所述当前状态之间的响应关系,并根据各响应关系中响应事件对应的转换的下一状态,建立各响应关系中所述当前状态对应的下一状态;
状态以及事件确定单元,用于确定当前生成的事件以及状态机当前的状态;
响应关系确定单元,用于查找预先确定的存在响应关系的状态与事件的对应关系,判断所述状态以及事件确定单元确定的所述事件以及所述状态是否存在响应关系;
状态控制单元,用于在所述响应关系确定单元确定不存在响应关系时,控制所述状态机保持当前状态;在所述响应关系确定单元确定存在响应关系时,根据预先确定的存在响应关系的状态与事件对应的处理函数标识和转换的下一状态,确定出所述状态以及事件确定单元确定的所述状态和事件对应的处理函数标识以及转换的下一状态,并在执行确定的所述处理函数标识对应的处理函数成功后,控制所述状态机跳转至确定出的下一状态。
7.如权利要求6所述的装置,其特征在于,还包括:
对应关系预处理单元,用于确定存在响应关系的状态与事件的对应关系及其存在响应关系的状态与事件对应的处理函数标识和转换的下一状态。
8.如权利要求7所述的装置,其特征在于,所述对应关系预处理单元,具体用于:
根据为状态机定义的状态、事件以及处理函数的关系生成状态表,其中若状态所在行与事件所在列的交叉单元格或状态所在列与事件所在行的交叉单元格中存储有信息,则表示该状态与该事件存在响应关系,所述信息为存在响应关系的该状态和该事件对应的处理函数标识以及转换的下一状态;若所述交叉单元格为空,则表示该状态与该事件不存在响应关系。
9.如权利要求8所述的装置,其特征在于,还包括:
状态机类型确定单元,用于根据为状态机定义的状态、事件以及处理函数的关系,确定所述状态机的类型;
所述对应关系预处理单元,具体用于在所述状态机类型确定单元确定所述状态机为确定有限状态机时,根据为状态机定义的状态、事件以及处理函数的关系生成状态表。
10.如权利要求6所述的装置,其特征在于,还包括:
处理函数执行单元,用于在执行确定的所述处理函数失败时,确定所述处理函数执行失败的原因,根据设定的原因与返回值的对应关系,确定与所述原因对应的返回值,并根据确定的所述返回值,确定对执行失败的所述处理函数的处理方式。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201010193439 CN101957751B (zh) | 2010-06-04 | 2010-06-04 | 一种状态机的实现方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201010193439 CN101957751B (zh) | 2010-06-04 | 2010-06-04 | 一种状态机的实现方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101957751A CN101957751A (zh) | 2011-01-26 |
CN101957751B true CN101957751B (zh) | 2013-07-24 |
Family
ID=43485095
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201010193439 Expired - Fee Related CN101957751B (zh) | 2010-06-04 | 2010-06-04 | 一种状态机的实现方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101957751B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106547525A (zh) * | 2015-09-21 | 2017-03-29 | 阿里巴巴集团控股有限公司 | 一种执行完全状态模式的web app的方法和装置 |
Families Citing this family (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102096580B (zh) * | 2011-01-30 | 2017-03-22 | 瑞斯康达科技发展股份有限公司 | 状态机相关信息存储方法及装置 |
CN102685095A (zh) * | 2011-12-26 | 2012-09-19 | 北京安天电子设备有限公司 | 基于风险级别事件处理的方法及系统 |
CN104021038B (zh) * | 2014-04-22 | 2017-07-07 | 上海华力微电子有限公司 | 一种管理设备状态转换关系的方法 |
CN105467984A (zh) * | 2014-09-03 | 2016-04-06 | 上海联影医疗科技有限公司 | X射线成像系统中采集设备及其状态迁移控制方法与装置 |
CN104881297A (zh) * | 2015-06-19 | 2015-09-02 | 上海斐讯数据通信技术有限公司 | 一种状态机管理方法及系统 |
CN105045603A (zh) * | 2015-08-24 | 2015-11-11 | 北京金山安全软件有限公司 | 一种构建有限状态机模型框架的方法、装置及电子装置 |
CN106484385B (zh) * | 2015-09-01 | 2019-09-17 | 北京自动化控制设备研究所 | 一种大气测量装置软件中嵌入式软件状态机的实现方法 |
CN106125682B (zh) * | 2016-07-18 | 2019-03-12 | 北京七星华创电子股份有限公司 | 半导体设备工艺运行状态的管理及管理装置 |
CN107656819A (zh) * | 2016-07-25 | 2018-02-02 | 武汉票据交易中心有限公司 | 一种业务流程的处理方法及相关系统 |
EP3340044A1 (en) * | 2016-12-22 | 2018-06-27 | Ecole Nationale de l'Aviation Civile | Method and apparatus for processing software code |
CN108626850B (zh) * | 2017-03-20 | 2020-06-12 | 台达电子工业股份有限公司 | 空调设备的远程智能有限状态机控制系统 |
CN107357592A (zh) * | 2017-07-27 | 2017-11-17 | 郑州云海信息技术有限公司 | 一种基于状态机机制的事件处理方法及装置 |
CN107609137B (zh) * | 2017-09-20 | 2021-03-09 | 苏州浪潮智能科技有限公司 | 一种页面响应方法、装置及其使用的页面响应设备 |
CN107729211B (zh) * | 2017-09-30 | 2020-09-18 | 湖北华中光电科技有限公司 | 一种mcu系统的状态响应方法 |
CN107992332A (zh) * | 2017-11-24 | 2018-05-04 | 江苏神州信源系统工程有限公司 | 一种状态机的实现方法及系统 |
CN110083406A (zh) * | 2018-01-26 | 2019-08-02 | 广东亿迅科技有限公司 | 基于文本二维表格的状态机定义方法及其系统 |
CN108845844A (zh) * | 2018-05-30 | 2018-11-20 | 郑州云海信息技术有限公司 | 一种状态转换方法及装置 |
CN109731334B (zh) * | 2018-11-22 | 2020-08-11 | 腾讯科技(深圳)有限公司 | 状态的切换方法和装置、存储介质、电子装置 |
CN109646959B (zh) * | 2018-12-05 | 2022-03-08 | 深圳市迷你玩科技有限公司 | 基于状态机管理非玩家角色npc的方法及相关设备 |
CN110310170A (zh) * | 2019-05-24 | 2019-10-08 | 深圳壹账通智能科技有限公司 | 订单处理方法、装置、电子设备及存储介质 |
CN111427633A (zh) * | 2020-02-28 | 2020-07-17 | 惠州市德赛西威汽车电子股份有限公司 | 一种汽车音响状态机及其管理方法 |
CN112307167A (zh) * | 2020-10-30 | 2021-02-02 | 广州华多网络科技有限公司 | 文本切句方法、装置、计算机设备和存储介质 |
CN115885253A (zh) * | 2020-12-28 | 2023-03-31 | 深圳元戎启行科技有限公司 | 有限状态机的控制方法、装置、计算机设备和存储介质 |
CN115842416A (zh) * | 2023-02-14 | 2023-03-24 | 北京舍得叔叔科技有限公司 | 三状态开关控制方法 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1225695C (zh) * | 2002-01-11 | 2005-11-02 | 互慧科技股份有限公司 | 程序测试系统及方法 |
EP1717715B1 (en) * | 2005-04-25 | 2018-06-06 | EntIT Software LLC | State machine-driven interactive system and associated methods |
CN1815448A (zh) * | 2005-12-31 | 2006-08-09 | 北京佳讯飞鸿电气有限责任公司 | 一种高效易维护有限状态机的实现方法 |
US7512634B2 (en) * | 2006-06-05 | 2009-03-31 | Tarari, Inc. | Systems and methods for processing regular expressions |
US20080034427A1 (en) * | 2006-08-02 | 2008-02-07 | Nec Laboratories America, Inc. | Fast and scalable process for regular expression search |
CN101174261B (zh) * | 2006-11-03 | 2010-04-14 | 北京航空航天大学 | 基于扩展有限状态机的多正则表达式联合搜索方法 |
CN100589491C (zh) * | 2007-06-07 | 2010-02-10 | 中兴通讯股份有限公司 | 一种追踪协议栈状态机切换的方法 |
CN101247401B (zh) * | 2008-03-14 | 2011-05-25 | 中兴通讯股份有限公司 | 基于消息驱动的状态机处理方法和装置 |
-
2010
- 2010-06-04 CN CN 201010193439 patent/CN101957751B/zh not_active Expired - Fee Related
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106547525A (zh) * | 2015-09-21 | 2017-03-29 | 阿里巴巴集团控股有限公司 | 一种执行完全状态模式的web app的方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN101957751A (zh) | 2011-01-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101957751B (zh) | 一种状态机的实现方法及装置 | |
CN102346671B (zh) | 基于可扩展式脚本语言的计算方法 | |
Tofts | Processes with probabilities, priority and time | |
CN112549029B (zh) | 一种基于行为树的机器人行为控制方法及装置 | |
CN102662725B (zh) | 一种事件驱动的高并发流程虚拟机实现方法 | |
CN111949454B (zh) | 一种基于微服务组件的数据库系统及相关方法 | |
CN104572290A (zh) | 消息处理线程的控制方法及装置 | |
CN106681820B (zh) | 基于消息组合的可扩展大数据计算方法 | |
CN109254763A (zh) | 一种基于有限状态机的核电厂控制软件设计方法 | |
US9292795B2 (en) | Interpretation engine using three predicate values and content addressable memory | |
CN106062716A (zh) | 在单任务系统中实现多任务的方法、装置及单任务系统 | |
CN108536531A (zh) | 一种基于单片机的任务调度和电源管理方法 | |
CN103309734A (zh) | 基于优先级分组的嵌入式任务调度方法 | |
CN107589993A (zh) | 一种基于linux实时操作系统的动态优先级调度算法 | |
CN101976204A (zh) | 面向服务的异构多核计算平台及其使用的任务调度方法 | |
CN101027642A (zh) | 处理器 | |
CN114995226B (zh) | 一种针对航天嵌入式设备的流程控制系统及方法 | |
US20100318751A1 (en) | Multiple error management in a multiprocessor computer system | |
CN109977514A (zh) | 一种雷达同步数据流图模型调度序列生成方法 | |
CN110412947A (zh) | 工业设备控制方法及其系统、存储设备 | |
CN102077513B (zh) | 用于管理网络的方法和网络 | |
CN108491250B (zh) | 复杂系统可靠性仿真的自适应智能体通信方法及系统 | |
CN100389411C (zh) | 在嵌入式实时操作系统中实现逻辑中断优先级的方法 | |
US20030204639A1 (en) | Task dispatch in priority pre-emptive real-time operating systems | |
CN103473032B (zh) | 独立主动构件和可运行主动构件组装模型及构件拆分方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CP01 | Change in the name or title of a patent holder | ||
CP01 | Change in the name or title of a patent holder |
Address after: 350002 19 Building, Citrus Industrial Park, 618 Jinshan Road, Cangshan District, Fuzhou, Fujian. Patentee after: RUIJIE NETWORKS Co.,Ltd. Address before: 350002 19 Building, Citrus Industrial Park, 618 Jinshan Road, Cangshan District, Fuzhou, Fujian. Patentee before: Fujian Star Network Ruijie Networks Co.,Ltd. |
|
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20130724 Termination date: 20210604 |