CN116089045A - 状态机状态同步切换方法、装置、可读介质及电子设备 - Google Patents
状态机状态同步切换方法、装置、可读介质及电子设备 Download PDFInfo
- Publication number
- CN116089045A CN116089045A CN202310097137.2A CN202310097137A CN116089045A CN 116089045 A CN116089045 A CN 116089045A CN 202310097137 A CN202310097137 A CN 202310097137A CN 116089045 A CN116089045 A CN 116089045A
- Authority
- CN
- China
- Prior art keywords
- state
- module
- switching
- target
- entry
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Hardware Redundancy (AREA)
Abstract
本申请公开了一种多模块之间的状态机的状态同步切换方法、装置、计算机可读介质及电子设备,所述方法包括:在检测到状态切换指令时,获取从当前状态切换至目标状态的进入参数;在所述进入参数满足所述目标状态的进入条件时,向各第二模块发送状态切换请求;所述状态切换请求用于指示所述第二模块检测是否可切换至所述目标状态;在接收到所有所述第二模块的状态切换确认信息时,向各所述第二模块发送状态切换通知;所述状态切换通知用于指示所述第二模块切换至所述目标状态;从所述当前状态进入所述目标状态。本申请技术方案使得多个模块构成的整体系统在进行状态机的状态切换时,可以进行正确的状态切换,避免整体系统状态切换异常。
Description
技术领域
本申请属于计算机技术领域,具体涉及一种多模块之间的状态机的状态同步切换方法、装置、计算机可读介质及电子设备。
背景技术
在计算机科学中,有限状态机被广泛用于软件工程。有限状态机是一种用来进行目标对象行为建模的工具,其作用主要是描述目标对象在它的生命周期内所经历的状态序列,以及如何响应来自外界的各种事件。当一个产品或系统包括多个模块时,如分布式系统,多个模块之间的状态变化通常是相互关联的,即一个模块的状态变化可能引起其他模块的状态变化。然而,在相关技术中,多个模块使用同一套状态机时,存在多个模块的状态变化无法同步的问题,容易导致如分布式系统这种包含多个模块的系统或产品的整体状态记录出错。
需要说明的是,在上述背景技术部分公开的信息仅用于加强对本申请的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。
发明内容
本申请的目的在于提供一种多模块之间的状态机的状态同步切换方法、装置、计算机可读介质及电子设备,以解决相关技术中的分布式系统中多模块状态无法同步的问题。
本申请的目标特性和优点将通过下面的详细描述变得显然,或部分地通过本申请的实践而习得。
根据本申请实施例的一个方面,提供一种状态切换方法,应用于第一模块,包括:
在检测到状态切换指令时,获取从当前状态切换至目标状态的进入参数;
在所述进入参数满足所述目标状态的进入条件时,向各第二模块发送状态切换请求;所述状态切换请求用于指示所述第二模块检测是否可切换至所述目标状态;
在接收到所有所述第二模块的状态切换确认信息时,向各所述第二模块发送状态切换通知;所述状态切换通知用于指示所述第二模块切换至所述目标状态;
从所述当前状态进入所述目标状态。
根据本申请实施例的一个方面,提供一种状态切换方法,应用于第二模块,包括:
当接收到第一模块发送的状态切换请求时,获取从当前状态切换至目标状态的进入参数;所述状态切换请求用于指示所述第二模块检测是否可切换至所述目标状态;
在所述进入参数满足所述目标状态的进入条件时,向所述第一模块返回状态切换确认信息;
在接收所述第一模块发送的状态切换通知时,从所述当前状态进入所述目标状态。
根据本申请实施例的一个方面,提供一种状态切换装置,应用于第一模块,包括:
进入参数获取模块,用于在检测到状态切换指令时,获取从当前状态切换至目标状态的进入参数;
切换请求发送模块,用于在所述进入参数满足所述目标状态的进入条件时,向各第二模块发送状态切换请求;所述状态切换请求用于指示所述第二模块检测是否可切换至所述目标状态;
切换通知发送模块,用户在接收到所有所述第二模块的状态切换确认信息时,向各所述第二模块发送状态切换通知;所述状态切换通知用于指示所述第二模块切换至所述目标状态;
状态切换模块,用于从所述当前状态进入所述目标状态。
根据本申请实施例的一个方面,提供一种状态切换装置,应用于第二模块,包括:
进入参数获取模块,用于当接收到第一模块发送的状态切换请求时,获取从当前状态切换至目标状态的进入参数;所述状态切换请求用于指示所述第二模块检测是否可切换至所述目标状态;
状态切换确认模块,用于在所述进入参数满足所述目标状态的进入条件时,向所述第一模块返回状态切换确认信息;
状态切换模块,用于在接收所述第一模块发送的状态切换通知时,从所述当前状态进入所述目标状态。
根据本申请实施例的一个方面,提供一种计算机可读介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如以上技术方案中的状态切换方法。
根据本申请实施例的一个方面,提供一种电子设备,该电子设备包括:处理器;以及存储器,用于存储所述处理器的可执行指令;其中,所述处理器被配置为经由执行所述可执行指令来执行如以上技术方案中的状态切换方法。
根据本申请实施例的一个方面,提供一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行如以上技术方案中的状态切换方法。
在本申请实施例提供的技术方案中,在检测到状态切换指令时,获取从当前状态切换至目标状态的进入参数,在该进入参数满足目标状态的进入条件时,向各第二模块发送状态切换请求以确认各第二模块是否也可切换至目标状态,在收到各第二模块的状态切换确认信息后,才从当前状态进入目标状态。如此,即便检测到状态切换指令,每个模块在进行状态切换前,在通过目标状态的进入参数和进入条件验证确保自身可进入后,也同步确保其他模块同样满足目标状态的进入条件,从而使得多个模块构成的整体系统在进行状态机的状态切换时,可以进行正确的状态切换,避免整体系统状态切换异常。并且,在每个模块的进入参数满足目标状态的进入条件时才进行状态切换,可以避免某个模块的错误切换导致系统各个模块均进入错误的状态,提高了系统整体状态切换的可靠性。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得目标的附图。
图1示意性地示出了应用本申请技术方案的示例性系统架构框图。
图2示意性地示出了本申请一个实施例提供的状态机状态同步切换方法的流程图。
图3示意性地示出了本申请一个实施例提供的状态机状态同步切换方法。
图4示意性地示出了本申请一个实施例提供的状态变化示意图。
图5示意性地示出了本申请一个实施例提供的状态机状态同步切换方法的流程图。
图6示意性地示出了本申请一个实施例提供的状态机状态同步切换方法的流程图。
图7示意性地示出了本申请一个实施例提供的状态机状态同步切换方法的流程图。
图8示意性地示出了本申请实施例提供的状态切换装置的结构框图。
图9示意性地示出了本申请实施例提供的状态切换装置的结构框图。
图10示意性示出了适于用来实现本申请实施例的电子设备的计算机系统结构框图。
具体实施方式
现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本申请将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。
此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本申请的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本申请的技术方案而没有特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知方法、装置、实现或者操作以避免模糊本申请的各方面。
附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。
图1示意性地示出了应用本申请技术方案的示例性系统架构框图。
如图1所示,系统架构100为分布式系统,包括多个模块,为便于区分,将系统架构100中的模块分别记为第一模块110和第二模块120,第一模块110可以是分布式系统多个模块中的任一个模块,第二模块120可以是分布式系统多个模块中除第一模块110以外的其他模块。
在一些实施例中,系统架构100中的模块可以是独立的设备,例如服务器或终端设备,终端设备可以包括智能手机、平板电脑、笔记本电脑、智能语音交互设备、智能家电、车载终端等等。在另一些实施例中,系统架构100还可以是具备多种功能的设备系统,则系统架构100中的模块可以是该设备系统的各个功能模块。
例如,在一示例中,系统架构100可以为车辆系统,系统架构100中的模块可以包括车辆系统中的发动机模块、电池管理模块、制冷模块等等。在另一示例中,系统架构100可以为储能设备,则系统架构100中的模块可以包括储能设备中的逆变模块、直流变换模块、电池模块等等。
系统架构100中的各模块通过提供通信链路的各种连接类型的通信介质进行通信,该通信链路可以是有线通信链路或者无线通信链路。
在本申请实施例中,当第一模块110检测到状态切换指令时,获取从当前状态切换至目标状态的进入参数。在确定进入参数满足目标状态的进入条件时,向第一模块110各第二模块120发送状态切换请求;状态切换请求用于指示第二模块120检测是否可切换至目标状态;第二模块120是系统架构100的多个模块中除第一模块110以外的模块,或者,第二模块120也可以理解为需要与第一模块110同步切换状态的模块。
当第二模块120接收到第一模块110发送的状态切换请求时,第二模块120获取从当前状态切换至目标状态的进入参数。在进入参数满足目标状态的进入条件时,第二模块120向第一模块110返回状态切换确认信息。
第一模块110在接收到所有第二模块120的状态切换确认信息时,向各第二模块120发送状态切换通知,并从当前状态进入目标状态;状态切换通知用于指示第二模块120切换至目标状态。
同时,第二模块120在接收第一模块110发送的状态切换通知时,从当前状态进入目标状态。如此,实现了系统架构100中多个模块的状态同步切换,系统架构100中的每个模块均通过各自从当前状态切换至目标状态的进入参数来判断自身是否符合状态切换条件,并在所有模块都符合状态切换条件时进行各个模块的状态切换,保证了各模块间状态的同步切换,使得系统架构100的整体状态准确可靠。
下面结合具体实施方式对本申请提供的状态机状态同步切换方法做出详细说明。
图2示意性地示出了本申请一个实施例提供的状态机状态同步切换方法的流程图,该状态机状态同步切换方法可以应用于图1所示系统架构100中的第一模块110。如图2所示,该状态机状态同步切换方法包括步骤210至步骤240,具体如下:
步骤210、在检测到状态切换指令时,获取从当前状态切换至目标状态的进入参数。
具体地,本申请中的状态机指有限状态机(Finite State Machine,FSM),有限状态机所包含的状态的数量是有限的,且各状态之间不重叠。分布式系统中的第一模块在某一时刻一定处于某一个状态,在此状态下,当该第一模块的输入产生变化时,该第一模块的状态可能发生改变,此时触发状态切换指令。状态切换指令用于指示第一模块从当前状态切换至目标状态,第一模块可以在检测到发生特定事件时触发状态切换指令。以冰箱系统为例,冰箱的发动机模块(例如,压缩机)在第一时刻处于稳定运行状态,当温度过高时,为了避免设备损坏,发动机模块需要进入停止状态,那么“运行状态”相当于发动机模块的当前状态,“停止状态”相当于发动机模块的目标状态,当检测到“温度过高”这一特定事件发生时,触发从运行状态切换为停止状态的状态切换指令。
从当前状态切换至目标状态的进入参数,是引起第一模块进行状态切换的参数,可以包括触发第一模块的状态变换的特定事件的相关参数,例如,对于发动机模块而言,其进入参数可能是电流、电压、温度、转速等。
示例性的,以第一模块为发动机模块为例,发送机模块的当前状态为停止状态,要使发动机模块变更为运行状态,需要向发动机提供额定电压,那么,发动机电压达到额定电压是发动机模块改变状态的特定事件。当向发动机模块供电时,发动机电压产生变化,那么发动机的电压变化可以作为一个事件,记为目标事件。将目标事件与状态转移条件进行比较,相当于将发动机电压与额定电压进行比较,当发动机电压达到额定电压时,即表明发生了使发动机模块改变状态的特定事件,此时触发将发动机模块从停止状态切换为运行状态的状态切换指令。
步骤220、在进入参数满足目标状态的进入条件时,向各第二模块发送状态切换请求;状态切换请求用于指示第二模块检测是否可切换至目标状态。
具体地,在进入参数满足目标状态的进入条件时,认为第一模块可以从当前状态切换至目标状态的条件。状态切换指令是基于第一模块在当前状态发生某种事件时所产生的指令,也就是说,状态切换指令是考虑了当前状态所产生的指令,而没有考虑到当前状态切换后的目标状态。
本申请实施例通过判别进入参数是否满足目标状态的进入条件,从而将第一模块的状态切换与目标状态联系起来。如此,在进行状态切换时,不仅通过状态切换指令考虑到触发当前状态改变的事件,还可以从进入参数是否符合目标状态的进入条件来进一步判断第一模块所请求切换的目标状态是否准确,或者说,判断导致第一模块进行状态切换的事件是否准确,提高了状态切换的准确性和可靠性。
在本申请实施例中,第二模块是分布式系统中,与第一模块使用同一状态机的其他模块,或者,也可以理解为需要与第一模块同步切换状态的其他模块。在分布式系统中,一个模块的状态变化可能需要引起其他模块的状态变化,例如,当电源模块从关闭状态切换为开启状态时,发动机模块将会从停止状态变更为运行状态。在进入参数满足目标状态的进入条件时,向各第二模块发送状态切换请求,通过该状态切换请求,可以使分布式系统中的其他模块检测是否能够同步进行状态切换,即第二模块检测能够切换至各自对应的目标状态。如此,使得第一模块在进行状态切换时,分布式系统中的其他模块也能够接收到状态切换指令,进而能够保证分布式系统的整体状态切换。
需要说明的是,第一模块所对应的目标状态和第二模块所对应的目标状态可以为同一状态,或者,也可以为不同的状态。
当第一模块所对应的目标状态和第二模块所对应的目标状态为同一状态时,表示第一模块和第二模块受同一状态机控制。在同一状态下,第一模块和第二模块需要执行相同的操作,或者,分别执行不同的操作。例如,电源模块和发动机模块可以受同一状态机控制,处于同一状态下。但是,在同一状态下,该状态设定了电源模块和发动机模块执行不同的操作。比如,在运行状态下,电源模块执行的操作是为发动机模块供电,发动机模块执行的操作是输出机械能,带动其他组件/模块运动。
当第一模块所对应的目标状态和第二模块所对应的目标状态不是同一状态时,表示第一模块和第二模块可以受到不同的状态机控制,但是不同的状态机需要同步切换状态。例如,电源模块和发动机模块可以由不同的状态机控制,当电源模块对应的状态机从关闭状态切换为开启状态时,发动机模块对应的状态机需要同步切换,从停止状态切换为运行状态。
步骤230、在接收到所有第二模块的状态切换确认信息时,向各第二模块发送状态切换通知;状态切换通知用于指示第二模块切换至目标状态。
具体地,当第二模块确认自身可以进行状态切换时,第二模块向第一模块发送状态切换确认信息,相当于同意第一模块进行状态切换。当接收到所有第二模块的状态切换确认信息时,向各第二模块发送状态切换通知,从而使得各第二模块能够基于该状态切换通知实现状态的同步切换。
在本申请的一些实施例中,第一模块可以在接收到超过预设数值的目标第二模块的状态切换确认信息时,即认为可以进行状态切换,继而向各第二模块发送状态切换通知。当大部分的第二模块返回了状态切换确认信息,例如95%的第二模块返回了状态切换确认信息,此时可以认为第一模块所进行的状态切换是正确的,其他第二模块未反馈状态切换确认信息可能是数据丢包、网络波动等因素引起的数据传输不及时问题,不影响各模块的状态切换。
步骤240、从当前状态进入目标状态。
具体地,第一模块从当前状态切换至目标状态,各第二模块也在状态切换通知的指示下完成各自状态的切换,实现分布式系统各模块状态的同步切换。
在本申请实施例提供的技术方案中,在检测到状态切换指令时,获取从当前状态切换至目标状态的进入参数,在该进入参数满足目标状态的进入条件时,向各第二模块发送状态切换请求以确认各第二模块是否也可切换至目标状态,在收到各第二模块的状态切换确认信息后,才从当前状态进入目标状态。如此,即便检测到状态切换指令,每个模块在进行状态切换前,在通过目标状态的进入参数和进入条件验证确保自身可进入后,也同步确保其他模块同样满足目标状态的进入条件,从而使得多个模块构成的整体系统在进行状态机的状态切换时,可以进行正确的状态切换,避免整体系统状态切换异常。并且,在每个模块的进入参数满足目标状态的进入条件时才进行状态切换,可以避免某个模块的错误切换导致系统各个模块均进入错误的状态,提高了系统整体状态切换的可靠性。
图3示意性地示出了本申请一个实施例提供的状态机状态同步切换方法,本实施例是对上述实施例的进一步细化。如图3所示,该方法应用于第一模块,包括步骤310至步骤380,具体如下:
步骤310、在检测到目标事件时,获取当前状态的状态转移条件。
具体而言,目标事件是可能引起第一模块的状态改变的事件,其可以是某个操作或动作的发生,也可以是某些参数的改变,例如,按钮被按下,或者电压从一个数值变化为另一个数值。当前状态的状态转移条件是指改变第一模块当前所处状态所必须的条件,相当于预先设定的改变状态的事件。
步骤320、在目标事件满足状态转移条件时,确定状态转移条件对应的目标状态并触发状态切换指令。
具体地,当目标事件满足状态转移条件时,说明当前发生了可以改变第一模块所处状态的事件,第一模块需要进行状态切换,第一模块改变后的状态就是状态转移条件所对应的目标状态,为了将第一模块从当前状态切换至目标状态,故而触发状态切换指令。可以理解,当目标事件不满足状态转移条件时,说明当前所发生事件不足以引起第一模块的状态改变,故而不触发状态切换指令。
在一些情况下,当前状态的状态转移条件可能有多个,那么目标事件满足状态转移条件是指目标事件满足多个状态转移条件中的任一个,那么目标状态就是目标事件所满足的状态转移条件所对应的目标状态。示例性的,图4示意性地示出了本申请一个实施例提供的状态变化示意图。如图4所示,第一模块包括三种状态:状态A、状态B和状态C,其中,当第一模块处于状态A时触发事件1,那么第一模块的状态可以切换为状态B;当第一模块处于状态A时触发事件2,那么第一模块的状态可以切换为状态C;当第一模块处于状态B时触发事件3,那么第一模块的状态可以切换为状态C。
当第一模块当前处于状态A时,若检测目标事件,该目标事件可以是事件1或事件2或其他事件,则获取状态A的状态转移条件,包括事件1和事件2。将目标事件与状态A的状态转移条件进行匹配,当目标事件符合状态A的状态转移条件时,说明目标事件为事件1或事件2,此时进一步确定目标事件是事件1还是事件2。若目标事件是事件1,则确定目标状态为状态B,并触发由状态A切换至状态B的状态切换指令。若目标事件是事件2,则确定目标状态为状态C,并触发由状态A切换至状态C的状态切换指令。当目标事件不符合状态A的状态转移条件时,说明目标事件既不是事件1,也不是事件2,此时不触发状态切换指令。
步骤330、在检测到状态切换指令时,确定触发状态切换指令的目标事件。
步骤340、将目标事件、当前状态以及目标状态确定为从当前状态进入目标状态的进入参数。
步骤350、将进入参数输入目标状态的进入判断函数以确定进入参数是否满足目标状态的进入条件。
在本申请实施例中,将目标事件、当前状态和目标状态共同作为目标状态的进入参数,而进入参数用于确认第一模块是否可以从当前状态切换至目标状态,相当于在进行第一模块的状态切换时,从目标事件、当前状态和目标状态三个方面进行了考虑,相较于相关技术中仅考虑目标事件和当前状态就进行状态切换的方案,本申请实施例可以实现特定状态的保护,有利于各模块状态切换条件的修改和维护。
示例性的,图4示意性地示出了本申请一个实施例提供的状态变化示意图。在实际的开发过程中,由于状态机的功能较为复杂,开发难度高,状态机中的不同状态可能会由不同的研发人员开发,不同的研发人员会简单交流各自状态的开发思路,但是难以做到完全的信息同步。此时,有可能会出现研发人员甲在开发状态A时,允许从状态A切换到状态C。但是,研发人员乙在开发状态C时,没有考虑到从状态A直接切换到状态C的情况。此时,如果该状态机直接从状态A切换到状态C,可能会出现程序故障。
以前述场景为例,在相关技术中,由于状态切换仅从当前状态的触发事件考虑,当第一模块处于状态A并触发事件2时,必然会切换至状态C,即相关技术无法实现在特定情况下,第一模块仅能由状态B触发事件3时变更为状态C,而不能由状态A触发事件2时变更为状态C的功能。
而根据本申请提供的技术方案,当第一模块处于状态A时,若检测到触发事件1,则生成状态切换指令,此时获取事件1、状态A和状态C作为进入参数。然后判断进入参数是否满足状态C的进入条件,状态C的进入条件包括状态B和事件3,显然该进入参数不满足状态C的进入条件,那么此时第一模块无法进行状态切换,生成状态切换失败信息。
在本申请实施例中,在状态机中注册状态时,需要注册的内容有:进入判断函数、进入执行函数、任务运行函数、运行执行间隔、切换判断函数和退出执行函数。进入判断函数在进行状态切换时调用,用于判断其他状态是否进入本状态的条件,故而在判断进入参数是否满足条件时,是将进入参数输入至目标状态的进入判断函数,通过进入判断函数的执行来确定进入参数是否满足目标状态的进入条件。进入执行函数是在其他状态进入本状态时所执行的函数,相当于将其他状态切换为本状态,进入执行函数通常在进入判断函数确定进入参数输入满足本状态的进入条件时执行。当检测到目标事件时,调用切换判断函数,以判断是否需要进行状态切换。当确定进行状态切换时,调用退出执行函数,即退出当前状态。
运行执行间隔为任务运行函数的调用间隔,也就是任务运行函数的执行周期。在第一模块处于某个状态时,周期性地调用该状态的任务运行函数,用以执行该状态对应的预设动作。例如,冰箱进入启动状态时,启动状态具有一任务运行函数,通过周期性执行启动状态的任务运行函数来实现启动状态对应业务的周期性执行,启动状态的业务如进行状态查询并向底层驱动发送启动命令,当检测到启动完成,会产生启动完成事件,继而触发状态转换,以使冰箱切换到制冷状态。
步骤360、在进入参数满足目标状态的进入条件时,向各第二模块发送状态切换请求。
步骤370、在接收到所有第二模块的状态切换确认信息时,向各第二模块发送状态切换通知。
步骤380、从当前状态进入目标状态。
在本申请实施例中,在第一模块的状态变化过程中,可以记录每次事件的发生时间、当前状态、目标状态、切换结果等信息,形成第一模块的状态切换日志,以便后续使用。
图5示意性地示出了本申请一个实施例提供的状态机状态同步切换方法的流程图,该方法应用于第一模块。如图5所示,该方法包括:
S501、调用当前状态的进入执行函数。进入执行函数的执行使得第一模块处于当前状态。
S502、调用当前状态的任务运行函数。任务运行函数周期性执行,用以执行当前状态对应的预设动作,例如,查询是否产生引起状态变化的事件。
S503、判断是否产生目标事件。若是,则进入S504;若否,则进入S511。
S504、调用当前状态的切换判断函数,以判断是否有目标状态需要切换。切换判断函数用于判断是否目标事件是否满足当前状态的状态转移条件;若满足,则表明有新的状态需要切换,新的状态即为目标状态,此时触发状态切换指令,并获取目标事件、当前状态和目标状态作为目标状态的进入参数,然后进入S505;若不满足,则表明目标事件无法引起状态变化,无需触发状态切换指令,进入S511。
S505、调用目标状态的进入判断函数,以判断进入参数是否满足目标状态的进入条件。若满足,则进入S506;若不满足,则进入S511。
S506、发送状态切换请求到其他模块。
S507、确定是否接收到所有模块的状态切换确认信息。若是,则进入S508;若否,则进入S511。
S508、发送状态切换通知到其他模块。
S509、调用当前状态的退出执行函数,以便退出当前状态,进入目标状态。
S510、目标状态切换为当前状态,完成状态切换,此后以目标状态作为当前状态,返回S501,继续进行状态切换的判断。
S511、是否到达当前状态运行间隔。当前状态运行间隔是指当前状态的任务运行函数的运行执行间隔。若是,则进入S502,周期性调用当前状态的任务运行函数;若否,则进入S512。
S512、延时。若未达到当前状态的任务运行函数的运行执行间隔,则继续延时等待,此时可以延时设定时长(例如1ms)后进入S503,以判断是否发生目标事件。
图6示意性地示出了本申请一个实施例提供的状态机状态同步切换方法的流程图,该方法可以应用于图1所示系统架构中的第二模块120,该第二模块也是上述实施例中的第二模块。如图6所示,本申请实施例提供的状态机状态同步切换方法包括步骤610至步骤630,具体如下:
步骤610、当接收到第一模块发送的状态切换请求时,获取从当前状态切换至目标状态的进入参数;状态切换请求用于指示第二模块检测是否可切换至目标状态。
具体地,当第二模块接收到第一模块发送的状态切换请求时,为了保证整体系统的状态变换,第二模块需同步进行状态变化,故而第二模块获取从自身的当前状态切换至目标状态的进入参数。该进入参数的定义已在前述实施例中进行了详细介绍,在此不再赘述。
步骤620、在进入参数满足目标状态的进入条件时,向第一模块返回状态切换确认信息。
具体地,当第二模块确认进入参数满足自身目标状态的进入条件时,表明第二模块可以响应第一模块发起的状态切换请求而进行状态同步切换,故而向第一模块返回状态切换确认信息。
步骤630、在接收第一模块发送的状态切换通知时,从当前状态进入目标状态。
具体地,当第一模块接收到所有第二模块发送的状态切换确认信息后,第一模块会再次向第二模块发送状态切换通知,第二模块根据该状态切换通知进行状态的同步切换,从当前状态切换至目标状态。
第二模块进行状态切换的具体过程与前述第一模块进行状态切换的过程相同,详情可以参考前述实施例中的相关描述,在此不再赘述。
在本申请实施例提供的技术方案中,第二模块在接收到第一模块发送的状态切换请求时,获取从当前状态进入目标状态的进入参数,然后在进入参数满足目标状态的进入条件时,向第一模块返回状态切换确认信息,并基于第一模块发送的状态切换通知从当前状态进入目标状态,如此,实现了第二模块跟随第一模块进行状态切换的功能,实现了分布式系统的整体状态切换,避免了因单一模块的状态变化二导致的整体系统的状态异常的情况发生。
在本申请的一个实施例中,当第二模块判断进入参数不满足目标状态的进入条件时,则说明第一模块的状态变化不能引起第二模块的同步变化,可能是第一模块对状态变化产生了误判,此时第二模块不进行状态切换,同时向第一模块返回状态切换失败信息,以使第一模块也不进行状态切换,从而避免了第一模块的误判导致整体系统状态的错误切换。
在本申请的一个实施例中,第二模块在向第一模块返回状态切换确认信息后,若在预设时长内未接收到状态切换通知,则说明分布式系统存在异常情况,例如第一模块出现异常,或者第一模块和第二模块之间的通信出现异常,此时向第一模块发送状态切换失败信息,以避免在系统异常情况下进行状态切换。
在本申请的一个实施例中,第二模块可以定时向第一模块发送自身的状态信息,这样可以避免因第一模块和第二模块间的通信链路出现短暂异常而导致各模块间数据不同步的问题。
图7示意性地示出了本申请一个实施例提供的状态机状态同步切换方法的流程图,该方法应用于第二模块。如图7所示,该方法包括:
S701、判断是否收到状态切换请求。若是,则进入S702;若否,则不断循环,直至接收到第一模块发送的状态切换请求。
S702、调用目标状态的进入判断函数,由判断函数判断进入参数是否满足目标状态的进入条件。当进入参数满足目标状态的进入条件时,进入S704;当进入参数不满足目标状态的进入条件时,进入S706。
S703、发送状态切换确认信息到第一模块。
S704、是否收到第一模块发送的状态切换通知。若是,则进入S705;若否,则进入S706。
S705、切换到目标状态。第二模块从当前状态切换至目标状态。
S706、发送状态切换失败信息到第一模块。在不满足目标状态的进入条件,或者未接收到第一模块发送的状态切换通知时,发送状态切换失败信息到第一模块,然后进入S701,进行下一次状态切换的判断。
应当注意,尽管在附图中以特定顺序描述了本申请中方法的各个步骤,但是,这并非要求或者暗示必须按照该特定顺序来执行这些步骤,或是必须执行全部所示的步骤才能实现期望的结果。附加的或备选的,可以省略某些步骤,将多个步骤合并为一个步骤执行,以及/或者将一个步骤分解为多个步骤执行等。
以下介绍本申请的装置实施例,可以用于执行本申请上述实施例中的状态切换方法。图8示意性地示出了本申请实施例提供的状态切换装置的结构框图,该装置应用于第一模块。如图8所示,该状态机状态同步切换装置包括:
进入参数获取模块810,用于在检测到状态切换指令时,获取从当前状态切换至目标状态的进入参数;
切换请求发送模块820,用于在所述进入参数满足所述目标状态的进入条件时,向各第二模块发送状态切换请求;所述状态切换请求用于指示所述第二模块检测是否可切换至所述目标状态;
切换通知发送模块830,用户在接收到所有所述第二模块的状态切换确认信息时,向各所述第二模块发送状态切换通知;所述状态切换通知用于指示所述第二模块切换至所述目标状态;
状态切换模块840,用于从所述当前状态进入所述目标状态。
在本申请的一个实施例中,所述装置还包括:
状态转移条件获取模块,用于在检测到目标事件时,获取当前状态的状态转移条件;
状态切换指令触发模块,用于在所述目标事件满足所述状态转移条件时,确定所述状态转移条件对应的目标状态并触发状态切换指令。
在本申请的一个实施例中,进入参数获取模块810具体用于:
确定触发所述状态切换指令的目标事件;
将所述目标事件、所述当前状态以及所述目标状态确定为所述进入参数。
在本申请的一个实施例中,所述状态机的每个状态包括进入判断函数;
条件判断模块,用于将所述进入参数输入所述目标状态的进入判断函数以确定所述进入参数是否满足所述目标状态的进入条件。
在本申请的一个实施例中,所述状态机的每个状态包括任务运行函数,所述装置还包括:
运行模块,用于周期性调用所述当前状态的任务运行函数以执行所述当前状态对应的预设动作,直至退出所述当前状态。
图9示意性地示出了本申请实施例提供的状态切换装置的结构框图,该装置应用于第二模块。如图9所示,该状态机状态同步切换装置包括:
进入参数获取模块910,用于当接收到第一模块发送的状态切换请求时,获取从当前状态切换至目标状态的进入参数;所述状态切换请求用于指示所述第二模块检测是否可切换至所述目标状态;
状态切换确认模块920,用于在所述进入参数满足所述目标状态的进入条件时,向所述第一模块返回状态切换确认信息;
状态切换模块930,用于在接收所述第一模块发送的状态切换通知时,从所述当前状态进入所述目标状态。
在本申请的一个实施例中,所述装置还包括:
第一失败信息发送模块,用于在所述进入参数不满足所述目标状态的进入条件时,向所述第一模块返回状态切换失败信息。
在本申请的一个实施例中,所述装置还包括:
第二失败信息发送模块,用于在预设时长内未接收到所述状态切换通知时,向所述第一模块发送状态切换失败信息。
本申请各实施例中提供的状态切换装置的具体细节已经在对应的方法实施例中进行了详细的描述,此处不再赘述。
图10示意性地示出了用于实现本申请实施例的电子设备的计算机系统结构框图。
需要说明的是,图10示出的电子设备的计算机系统1000仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图10所示,计算机系统1000包括中央处理器1001(Central Processing Unit,CPU),其可以根据存储在只读存储器1002(Read-Only Memory,ROM)中的程序或者从存储部分1008加载到随机访问存储器1003(Random Access Memory,RAM)中的程序而执行各种适当的动作和处理。在随机访问存储器1003中,还存储有系统操作所需的各种程序和数据。中央处理器1001、在只读存储器1002以及随机访问存储器1003通过总线1004彼此相连。输入/输出接口1005(Input/Output接口,即I/O接口)也连接至总线1004。
以下部件连接至输入/输出接口1005:包括键盘、鼠标等的输入部分1006;包括诸如阴极射线管(Cathode Ray Tube,CRT)、液晶显示器(Liquid Crystal Display,LCD)等以及扬声器等的输出部分1007;包括硬盘等的存储部分1008;以及包括诸如局域网卡、调制解调器等的网络接口卡的通信部分1009。通信部分1009经由诸如因特网的网络执行通信处理。驱动器1010也根据需要连接至输入/输出接口1005。可拆卸介质1011,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1010上,以便于从其上读出的计算机程序根据需要被安装入存储部分1008。
特别地,根据本申请的实施例,各个方法流程图中所描述的过程可以被实现为计算机软件程序。例如,本申请的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分1009从网络上被下载和安装,和/或从可拆卸介质1011被安装。在该计算机程序被中央处理器1001执行时,执行本申请的系统中限定的各种功能。
需要说明的是,本申请实施例所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(Erasable Programmable Read Only Memory,EPROM)、闪存、光纤、便携式紧凑磁盘只读存储器(Compact Disc Read-Only Memory,CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本申请的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本申请实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、触控终端、或者网络设备等)执行根据本申请实施方式的方法。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。
Claims (10)
1.一种状态机状态同步切换方法,应用于第一模块,其特征在于,包括:
在检测到状态切换指令时,获取从当前状态切换至目标状态的进入参数;
在所述进入参数满足所述目标状态的进入条件时,向各第二模块发送状态切换请求;所述状态切换请求用于指示所述第二模块检测是否可切换至所述目标状态;
在接收到所有所述第二模块的状态切换确认信息时,向各所述第二模块发送状态切换通知;所述状态切换通知用于指示所述第二模块切换至所述目标状态;
从所述当前状态进入所述目标状态。
2.根据权利要求1所述的状态机状态同步切换方法,其特征在于,所述在检测到状态切换指令时,获取从当前状态进入目标状态的进入参数之前,所述方法还包括:
在检测到目标事件时,获取当前状态的状态转移条件;
在所述目标事件满足所述状态转移条件时,确定所述状态转移条件对应的目标状态并触发状态切换指令。
3.根据权利要求1所述的状态机状态同步切换方法,其特征在于,所述获取从当前状态进入目标状态的进入参数包括:
确定触发所述状态切换指令的目标事件;
将所述目标事件、所述当前状态以及所述目标状态确定为所述进入参数。
4.根据权利要求1所述的状态机状态同步切换方法,其特征在于,所述状态机的每个状态包括进入判断函数;
在所述进入参数满足所述目标状态的进入条件时,向各第二模块发送状态切换请求之前,所述方法还包括:
将所述进入参数输入所述目标状态的进入判断函数以确定所述进入参数是否满足所述目标状态的进入条件。
5.根据权利要求1-4任一项所述的状态机状态同步切换方法,其特征在于,所述状态机的每个状态包括任务运行函数,所述方法还包括:
周期性调用所述当前状态的任务运行函数以执行所述当前状态对应的预设动作,直至退出所述当前状态。
6.一种状态机状态同步切换方法,应用于第二模块,其特征在于,包括:
当接收到第一模块发送的状态切换请求时,获取从当前状态切换至目标状态的进入参数;所述状态切换请求用于指示所述第二模块检测是否可切换至所述目标状态;
在所述进入参数满足所述目标状态的进入条件时,向所述第一模块返回状态切换确认信息;
在接收所述第一模块发送的状态切换通知时,从所述当前状态进入所述目标状态。
7.根据权利要求6所述的状态机状态同步切换方法,其特征在于,所述方法还包括:
在所述进入参数不满足所述目标状态的进入条件时,向所述第一模块返回状态切换失败信息。
8.根据权利要求6所述的状态机状态同步切换方法,其特征在于,在在所述进入参数满足所述目标状态的进入条件时,向所述第一模块返回状态切换确认信息之后,所述方法还包括:
在预设时长内未接收到所述状态切换通知时,向所述第一模块发送状态切换失败信息。
9.一种计算机可读介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现权利要求1至8中任意一项所述的状态机状态同步切换方法。
10.一种电子设备,其特征在于,包括:
处理器;以及
存储器,用于存储所述处理器的可执行指令;
其中,所述处理器执行所述可执行指令使得所述电子设备执行权利要求1至8中任意一项所述的状态机状态同步切换方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310097137.2A CN116089045A (zh) | 2023-01-18 | 2023-01-18 | 状态机状态同步切换方法、装置、可读介质及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310097137.2A CN116089045A (zh) | 2023-01-18 | 2023-01-18 | 状态机状态同步切换方法、装置、可读介质及电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116089045A true CN116089045A (zh) | 2023-05-09 |
Family
ID=86186763
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310097137.2A Pending CN116089045A (zh) | 2023-01-18 | 2023-01-18 | 状态机状态同步切换方法、装置、可读介质及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116089045A (zh) |
-
2023
- 2023-01-18 CN CN202310097137.2A patent/CN116089045A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5778536B2 (ja) | 電子制御装置及び車両制御システム | |
CN107070731B (zh) | 一种主从仲裁方法及系统 | |
CN110035446B (zh) | 心跳数据发送方法、装置、电子设备及可读介质 | |
US11449381B2 (en) | Apparatus and method for diagnosing communication fault | |
JP2023527195A (ja) | ベースライン監視方法、装置、読み取り可能な媒体、及び電子機器 | |
EP4155119A1 (en) | Method for controlling charging of vehicle, and device, program, medium, and vehicle | |
CN116700776A (zh) | 电池管理系统的信息管理方法、装置、设备及存储介质 | |
CN116089045A (zh) | 状态机状态同步切换方法、装置、可读介质及电子设备 | |
CN112667270A (zh) | 语音处理资源的更新方法、计算机设备及存储装置 | |
CN104539493A (zh) | 基于usb接口实现的智能终端对智能家电的管控系统及其实现方法 | |
CN114537146B (zh) | 一种车辆控制方法、装置、电子设备和存储介质 | |
CN114825594A (zh) | 不间断电源的控制方法及控制装置 | |
CN115933591A (zh) | 一种控制器诊断方法、装置、设备和存储介质 | |
CN115829537A (zh) | 电池储能系统运维方法、装置、计算机设备和存储介质 | |
CN114546926B (zh) | 核心簇同步、控制方法、数据处理方法、核心、设备、介质 | |
KR20200042471A (ko) | 충전 방법, 단말 및 컴퓨터 저장 매체 | |
CN114425787A (zh) | 机器人自动测试的控制方法、装置、服务器及存储介质 | |
CN113383331A (zh) | 看门狗系统、看门狗方法以及包括看门狗系统的电池管理系统 | |
CN106776035B (zh) | 实现跨系统多单据算法的对接方法、系统及请求异构系统 | |
CN116225666B (zh) | 一种操作系统任务调度方法、装置、电子设备及存储介质 | |
CN114448293B (zh) | 电机同步控制方法、系统、车辆及存储介质 | |
CN116001705B (zh) | 一种车辆数据监控方法、装置、设备及存储介质 | |
CN116700923A (zh) | 定时作业执行方法、装置、设备、存储介质及产品 | |
CN115617616A (zh) | 一种服务器fru的运行监测方法、装置、设备及存储介质 | |
CN113961350A (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 |