CN110007597B - 状态轮询和事件驱动软件状态机设计模式的优化方法 - Google Patents
状态轮询和事件驱动软件状态机设计模式的优化方法 Download PDFInfo
- Publication number
- CN110007597B CN110007597B CN201910257474.7A CN201910257474A CN110007597B CN 110007597 B CN110007597 B CN 110007597B CN 201910257474 A CN201910257474 A CN 201910257474A CN 110007597 B CN110007597 B CN 110007597B
- Authority
- CN
- China
- Prior art keywords
- state
- condition
- state machine
- transition
- event
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G05—CONTROLLING; REGULATING
- G05B—CONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
- G05B13/00—Adaptive control systems, i.e. systems automatically adjusting themselves to have a performance which is optimum according to some preassigned criterion
- G05B13/02—Adaptive control systems, i.e. systems automatically adjusting themselves to have a performance which is optimum according to some preassigned criterion electric
- G05B13/04—Adaptive control systems, i.e. systems automatically adjusting themselves to have a performance which is optimum according to some preassigned criterion electric involving the use of models or simulators
- G05B13/042—Adaptive control systems, i.e. systems automatically adjusting themselves to have a performance which is optimum according to some preassigned criterion electric involving the use of models or simulators in which a parameter or coefficient is automatically adjusted to optimise the performance
Landscapes
- Engineering & Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Evolutionary Computation (AREA)
- Medical Informatics (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Automation & Control Theory (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种状态轮询和事件驱动软件状态机设计模式的优化方法,分别针对状态跃迁条件存在逻辑先后依存关系的状况、状态跃迁条件存在时序先后依存关系的状况、历史数据缓存导致的状态机状态数量巨大的状况、状态机间接口定义过于松散导致的状态跃迁不可控的状况,进行优化设计,解决了由于状态跃迁条件之间存在先后依存关系而导致的输出错误、由于缓存历史数据导致的状态机数量庞大、由于状态机之间接口定义过于松散导致的状态跃迁不可控的问题。
Description
技术领域
本发明涉及轨道交通技术领域,尤其涉及状态轮询和事件驱动软件状态机设计模式的优化方法。
背景技术
状态轮询和事件驱动软件状态机作为最早已知的设计模式之一,在实时控制系统和信息通信技术领域被广泛应用。状态机设计的灵活性在给开发人员带来高效与便利的同时,也带来了软件最终输出与设计不符的风险。经过多年的实际应用,特别在软件规模日益庞大、对软件安全性、可靠性要求日益增加的情况下,对状态机设计方法使用不当所造成的影响日益凸显。目前,存在较常见的3类问题,包括:
1)由于状态跃迁条件之间存在先后依存关系而导致的输出错误。例如:
通过状态机实现一个布尔表达式X=α.AND.β.AND.γ(X,α,β,γ均为布尔逻辑变量i.e.值为true/false)。状态机可以表示如图1。
但如果前提条件之间存在时序依存关系,例如将上例修改为条件β为真必须出现在γ为真之前(β-TURE-BEFORE-γ),这种情况在实际工作中屡见不鲜,例如:进路执行与授权必须同时存在,作为道岔锁闭和移动授权进路延伸的前提,同时进路必须先执行才能锁闭,此时的状态机必须作相应的调整,其中一种变化可以表示成如图2所示。问题在于很多情况下,此类前提条件之间存在时序依存关系的场景并非显而易见,这将导致状态机设计缺陷甚至严重错误。
2)由于缓存历史数据导致的状态机数量庞大的问题。状态机设计中经常出现将逻辑运算与实例化数据混淆的情况,特别在事件驱动型状态机设计时。这样的设计没有引入错误,但却极大增加了状态机的复杂度。例如:
在故障报警中如果将解析故障报文状态机的每个状态设置为特定字符,将生成数量巨大的状态机,因为每条报警都有不同的的字符组合。如图3,Moore事件触发的状态机表示了一个“ALARM”字符串的解析算法,是一种正确但低效的状态机设计,其缺陷在于它将所有的历史字符作为其继续跃迁的前提条件。如采用此类设计,字符串的数目将等于状态机的数量。
3)由于状态机之间接口定义过于松散导致的状态跃迁不可控的问题。通过对实际工作中产生问题的分析,发现无论在事件驱动还是基于状态的状态机设计中,完全按照实际应用需求进行状态机设计而不采用结构化和抽象化的设计技术,将导致状态机体量巨大,跃迁复杂,最终无法控制的情况。例如:
如果系统有n种互斥但可以相互跳转的工作状,一种设计方式是在状态机中将这n种工作状态直接映射,那么将产生n*[n-1]种跃迁状态,如下图4,n=4,则状态变迁达到12种。
这样的状态机设计将大大降低设计的可读性和可操作性,系统控制的复杂程度也极大的增加。更为严重的是,由于各个状态间的跳转过于灵活,类似于软件中的“go to”语句,破坏了系统的结构化,可能导致不可以测的系统输出。
发明内容
本发明的目的在于提供一种状态轮询和事件驱动软件状态机设计模式的优化方法,解决背景技术中提出的问题。
实现上述目的的技术方案是:
一种状态轮询和事件驱动软件状态机设计模式的优化方法,针对状态跃迁条件
存在逻辑先后依存关系的状况:
新建状态机,将原有的、需要首先执行的跃迁条件a拆分到该独立状态机,作为状态a;将状态a所作的后续操作b作为跃迁条件放入原有状态机的条件中,替代原有条件;
针对状态跃迁条件存在时序先后依存关系的状况:
不定义事件队列和状态机引擎;在同一个状态机里,将条件拆分成中间状态;在系统初始化和配置之后,在每个应用周期,所有模块都执行一次;
针对历史数据缓存导致的状态机状态数量巨大的状况:
系统处理按照划分的处理周期进行,每个周期,每个模块的每个状态机全部重新执行一遍;执行过程中,每个周期,每个模块以预先定义的顺序实现,并传递带有静态变量的参数作为下一个状态机的输入状态指示;
针对状态机间接口定义过于松散导致的状态跃迁不可控的状况,通过引入中间 /虚拟状态方式解决。
优选的,所述的通过引入中间/虚拟状态方式解决,指:通过将所有逻辑状态按照“正/反”分成一对状态,并根据“正/反”跃迁条件创建并行的状态机。
优选的,针对状态跃迁条件存在时序先后依存关系的状况:
如果状态间跃迁存在多个跃迁条件,则检查多个跃迁条件的序列并在模块的详细设计中指定。
优选的,所述的检查多个跃迁条件的序列并在模块的详细设计中指定,包括:
在模块细节设计中,与一个状态相关联的多个转换按顺序优先;
在源代码中,程序员和单元测试工具通过代码复查检查排他性,确保条件设置是独占的;
在源代码中,程序员严格遵循C编程原则,当使用保留字“switch-case(多分支选择语句,用于多条件分支的逻辑判断)”时,确保每个分支在调整结束时具有“break(跳出条件判断,用于从当前判断分支中跳出)”;并通过单元测试工具和脚本进行复核。
本发明的有益效果是:本发明通过有效的优化方法,使得优化后的状态轮询和事件驱动软件状态机设计模式,解决了由于状态跃迁条件之间存在先后依存关系而导致的输出错误、由于缓存历史数据导致的状态机数量庞大、由于状态机之间接口定义过于松散导致的状态跃迁不可控的问题。同时兼容两者设计方式,所以同时兼备具备执行速度快、执行顺序可控、可维护和易于测试验证的特点。
附图说明
图1是简单布尔逻辑状态机示意图;
图2是存在时序依存关系的布尔逻辑状态机示意图;
图3是将状态定义为字符的字符解析状态机示意图;
图4是松散跳转控制的状态机示意图;
图5是逻辑依存关系状态机解决方案示意图;
图6是周期性、重复、固定顺序的模块执行过程示意图;
图7是多状态并发状态机设计示意图。
具体实施方式
下面将结合附图对本发明作进一步说明。
本发明的状态轮询和事件驱动软件状态机设计模式的优化方法,针对状态跃迁条件存在逻辑先后依存关系的状况:
新建状态机,将原有的、需要首先执行的跃迁条件a拆分到该独立状态机,作为状态a;将状态a所作的后续操作b作为跃迁条件放入原有状态机的条件中,替代原有条件。与既有状态机设计原则有所不同:针对此状况,本发明要求对原有需求进行重新分析,将存在逻辑依存关系的条件(condition)转换成状态 (place/state),将与其相关的操作(action)转换成条件(condition)。这样可以将条件依存关系彻底分解开,形成两次状态跃迁,使条件间的耦合降到最低,可以从根本上避免软件逻辑输出与设计不一致的问题,并进一步提高了可读性和扩展性。
举例说明:考虑一个登记操作,“登记”状态依赖于一个前提条件,即“是否允许被登记”。此时的设计方法是将“是否允许被登记”作为一个独立的状态机处理,并将相应的静态数据结构作为原始状态机的参数传递。这样实现更简单明了,并且为将来条件的添加提供了可扩展性。如图5所示。
针对状态跃迁条件存在时序先后依存关系的状况:
不定义事件队列和状态机引擎;在同一个状态机里,将条件拆分成中间状态;在系统初始化和配置之后,在每个应用周期,所有模块都执行一次(特殊原因,可以是两次)。与既有状态机设计有所不同,当遇到条件之间存在时序先后关系时,本发明不采用将触发条件的事件按照先后队列排序并采用引擎触发事件(实现上例如采用FIFO的queue方法),而是进一步分解条件,将有先后关系的条件转换成先后跃迁的状态,并通过计划(scheduler)硬性执行。这样做,可以避免由于外部输入的异常(例如一系列输入数据的延迟、丢失、乱序等)所导致的软件输出与设计不符,并进一步减少了条件在时序上的耦合,使状态机更加扁平,便于理解、编码实现和纠错,同时大大便利了后期维护和程序的功能拓展。
如果状态间跃迁存在多个跃迁条件,则需要检查多个跃迁条件的序列并在模块的详细设计中指定,以确保多个跃迁条件不存在时序上的先后顺序。具体而言,这个原则可以通过以下方法来保护:
在模块细节设计中,与一个状态相关联的多个转换应按顺序优先,一个简单而有效的方式确保首先处理“高”优先级转换。
在源代码中,程序员和单元测试工具通过代码复查检查排他性,确保条件设置是独占的。
在源代码中,程序员严格遵循C编程原则,当使用保留字“switch-case”(多分支选择语句,用于多条件分支的逻辑判断)时,确保每个分支在调整结束时具有“break”(跳出条件判断,用于从当前判断分支中跳出);并通过单元测试工具和脚本进行复核。
从而,从软件编码实现上,该优化手段可以根据需求硬性规定执行顺序,避免由于外部输入的异常(例如一系列输入数据的延迟、丢失、乱序等)所导致的软件输出与设计不符,在不影响系统功能的情况下,将动态异常分析判断简化成了静态顺序执行,使状态机更加扁平,便于理解、编码实现和纠错,同时大大便利了后期维护和程序的功能拓展。
针对历史数据缓存导致的状态机状态数量巨大的状况:
系统处理按照划分的处理周期进行,每个周期,每个模块的每个状态机全部重新执行一遍;执行过程中,每个周期,每个模块以预先定义的顺序实现,并传递带有静态变量的参数作为下一个状态机的输入状态指示;在系统初始化和配置之后,在每个应用周期,所有模块都执行一次(特殊原因,可以是两次)。针对此状况,本发明采用计划(scheduler)硬性将每个中间状态按照既定的顺序强制执行一遍,并抽取每个先后状态所必须的条件输入作为静态变量保存,后续模块仅关注其前序模块带入的参数作为其输入,避免了后续状态各自独立判断前序状态所累积下来的所有条件,统一由计划器执行,仅保留必要的标志位,从而大大简化了每个状态的逻辑判断算法,释放了由于缓存前序状态累积条件所占用的内存,优化了CPU和计算资源。
例如图6所示,所有模块按照既定次序顺序执行,待下一个周期开始,重复该次序。图6中,Module表示模块。
针对状态机间接口定义过于松散导致的状态跃迁不可控的状况,通过引入中间 /虚拟状态方式解决。
此优化手段特别适用于逻辑状态,通过将所有逻辑状态按照“正/反”分成一对状态,并根据“正/反”跃迁条件创建并行的状态机,增加了状态机设计的可读性,大大减少遗漏逻辑跃迁条件的问题,特别对于新增状态的扩展性有较大优势。
以图4的状态机为例,可以做如下改造:
1)将每个状态(如A)拆分成两个互斥的状态(如A和NOT-A),即引入了一个NOT-A的状态。
2)在初始化阶段,将所有状态并发,形成子状态集合,如图7所示。图中INIT 表示开始,INIT-STATE表示初始状态。
通过分析比较既有状态机实现技术与优化技术在适用领域、设计方法、技术重点和难点的基础上,得出本发明技术的优点和积极效果,如表1所示。
表1
以上实施例仅供说明本发明之用,而非对本发明的限制,有关技术领域的技术人员,在不脱离本发明的精神和范围的情况下,还可以作出各种变换或变型,因此所有等同的技术方案也应该属于本发明的范畴,应由各权利要求所限定。
Claims (3)
1.一种状态轮询和事件驱动软件状态机设计模式的优化方法,其特征在于,针对状态跃迁条件存在逻辑先后依存关系的状况:
新建状态机,将原有的、需要首先执行的跃迁条件a拆分到该独立状态机,作为状态a;将状态a所作的后续操作b作为跃迁条件放入原有状态机的条件中,替代原有条件;
针对状态跃迁条件存在时序先后依存关系的状况:
不定义事件队列和状态机引擎;在同一个状态机里,将条件拆分成中间状态;在系统初始化和配置之后,在每个应用周期,所有模块都执行一次;
针对历史数据缓存导致的状态机状态数量巨大的状况:
系统处理按照划分的处理周期进行,每个周期,每个模块的每个状态机全部重新执行一遍;执行过程中,每个周期,每个模块以预先定义的顺序实现,并传递带有静态变量的参数作为下一个状态机的输入状态指示;
针对状态机间接口定义过于松散导致的状态跃迁不可控的状况,通过引入中间/虚拟状态方式解决;
所述的通过引入中间/虚拟状态方式解决,指:通过将所有逻辑状态按照“正/反”分成一对状态,并根据“正/反”跃迁条件创建并行的状态机。
2.根据权利要求1所述的状态轮询和事件驱动软件状态机设计模式的优化方法,其特征在于,
针对状态跃迁条件存在时序先后依存关系的状况:
如果状态间跃迁存在多个跃迁条件,则检查多个跃迁条件的序列并在模块的详细设计中指定。
3.根据权利要求2所述的状态轮询和事件驱动软件状态机设计模式的优化方法,其特征在于,所述的检查多个跃迁条件的序列并在模块的详细设计中指定,包括:
在模块细节设计中,与一个状态相关联的多个转换按顺序优先;
在源代码中,程序员和单元测试工具通过代码复查检查排他性,确保条件设置是独占的;
在源代码中,程序员严格遵循C编程原则,当使用保留字“switch-case”时,确保每个分支在调整结束时具有“break”;并通过单元测试工具和脚本进行复核。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910257474.7A CN110007597B (zh) | 2019-04-01 | 2019-04-01 | 状态轮询和事件驱动软件状态机设计模式的优化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910257474.7A CN110007597B (zh) | 2019-04-01 | 2019-04-01 | 状态轮询和事件驱动软件状态机设计模式的优化方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110007597A CN110007597A (zh) | 2019-07-12 |
CN110007597B true CN110007597B (zh) | 2022-04-05 |
Family
ID=67169241
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910257474.7A Active CN110007597B (zh) | 2019-04-01 | 2019-04-01 | 状态轮询和事件驱动软件状态机设计模式的优化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110007597B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111273969B (zh) * | 2020-01-20 | 2021-08-10 | 腾讯科技(深圳)有限公司 | 状态切换方法、装置、设备和存储介质 |
CN112711450A (zh) * | 2020-12-29 | 2021-04-27 | 西安精密机械研究所 | 采用函数指针索引实现软件复杂有限状态机状态迁移的方法 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5469553A (en) * | 1992-04-16 | 1995-11-21 | Quantum Corporation | Event driven power reducing software state machine |
JP2002110796A (ja) * | 2000-09-28 | 2002-04-12 | Nec Microsystems Ltd | 半導体集積回路 |
KR20020087103A (ko) * | 2000-03-23 | 2002-11-21 | 인피니언 테크놀로지스 노쓰 아메리카 코포레이션 | 메모리 발생기 제어기의 상태를 식별하기 위한 장치 및 방법 |
CN102096848A (zh) * | 2009-12-09 | 2011-06-15 | Sap股份公司 | 用于在对流事件的查询模式匹配期间进行快速响应的调度 |
CN102646115A (zh) * | 2012-02-17 | 2012-08-22 | 北京星网锐捷网络技术有限公司 | Ac状态机的构建方法及装置 |
HK1166534A1 (zh) * | 2010-11-19 | 2012-11-02 | 阿里巴巴集團控股有限公司 號郵箱 | 種狀態機控制方法、裝置及狀態機系統 |
CN102866821A (zh) * | 2011-07-06 | 2013-01-09 | 卢玉玲 | 三维多媒体编辑交互系统、方法及电脑可读取媒体 |
CN106293895A (zh) * | 2016-08-03 | 2017-01-04 | 深圳中兴网信科技有限公司 | 离散事件关联处理方法和离散事件关联处理装置 |
CN108960220A (zh) * | 2018-10-31 | 2018-12-07 | 上海电气泰雷兹交通自动化系统有限公司 | 基于状态机模型的信号系统通信数据可靠性分析方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10938856B2 (en) * | 2018-03-30 | 2021-03-02 | Intel Corporation | Systems and methods for security protocol execution in a hierarchical state machine-driven execution plan |
-
2019
- 2019-04-01 CN CN201910257474.7A patent/CN110007597B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5469553A (en) * | 1992-04-16 | 1995-11-21 | Quantum Corporation | Event driven power reducing software state machine |
KR20020087103A (ko) * | 2000-03-23 | 2002-11-21 | 인피니언 테크놀로지스 노쓰 아메리카 코포레이션 | 메모리 발생기 제어기의 상태를 식별하기 위한 장치 및 방법 |
EP1266381A1 (en) * | 2000-03-23 | 2002-12-18 | Infineon Technologies North America Corp. | Method and apparatus for an easy identification of a state of a dram generator controller |
JP2002110796A (ja) * | 2000-09-28 | 2002-04-12 | Nec Microsystems Ltd | 半導体集積回路 |
CN102096848A (zh) * | 2009-12-09 | 2011-06-15 | Sap股份公司 | 用于在对流事件的查询模式匹配期间进行快速响应的调度 |
HK1166534A1 (zh) * | 2010-11-19 | 2012-11-02 | 阿里巴巴集團控股有限公司 號郵箱 | 種狀態機控制方法、裝置及狀態機系統 |
CN102866821A (zh) * | 2011-07-06 | 2013-01-09 | 卢玉玲 | 三维多媒体编辑交互系统、方法及电脑可读取媒体 |
CN102646115A (zh) * | 2012-02-17 | 2012-08-22 | 北京星网锐捷网络技术有限公司 | Ac状态机的构建方法及装置 |
CN106293895A (zh) * | 2016-08-03 | 2017-01-04 | 深圳中兴网信科技有限公司 | 离散事件关联处理方法和离散事件关联处理装置 |
CN108960220A (zh) * | 2018-10-31 | 2018-12-07 | 上海电气泰雷兹交通自动化系统有限公司 | 基于状态机模型的信号系统通信数据可靠性分析方法 |
Non-Patent Citations (1)
Title |
---|
CBTC热备冗余系统软件安全切换技术的研究与实现;孙来平;《城市轨道交通研究》;20180810;第18-21页 * |
Also Published As
Publication number | Publication date |
---|---|
CN110007597A (zh) | 2019-07-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Cengic et al. | Formal modeling of function block applications running in IEC 61499 execution runtime | |
CN102520925B (zh) | Aadl2tasm模型转换方法 | |
CN110007597B (zh) | 状态轮询和事件驱动软件状态机设计模式的优化方法 | |
CN112631919B (zh) | 一种对比测试方法、装置、计算机设备及存储介质 | |
CN103970603A (zh) | 一种基于多级反馈队列的事件注入引擎的任务调度方法 | |
US20120011404A1 (en) | Method and system of a processor-agnostic encoded debug-architecture in a pipelined environment | |
CN103218289B (zh) | 一种星载软件测试自动执行方法 | |
CN110569113A (zh) | 分布式任务的调度方法及系统、计算机可读存储介质 | |
CN103995778A (zh) | 一种基于事件和动作的脚本文件生成方法及其装置 | |
CN115390809A (zh) | 一种仿真调度方法及系统 | |
CN108287923B (zh) | 一种可视化接口数据智能提取系统及其设计方法 | |
CN115185627A (zh) | 用于实时仿真的方法、系统和计算机可读存储介质 | |
CN108959058B (zh) | 一种虚拟控制器的组态调试器实现方法 | |
CN109542069B (zh) | 一种基于时间与事件混合驱动的分布式控制系统及方法 | |
Yang et al. | Two formal semantics of a subset of the AADL | |
CN110442338B (zh) | 一种结构分析与设计语言aadl模型的仿真方法 | |
CN114168454A (zh) | 一种基于动态插桩-销桩技术的异步测试方法 | |
CN113504966B (zh) | Gpu集群调度策略模拟方法及gpu集群模拟器 | |
EP4086753A1 (en) | Decision scheduling customization method and device based on information flow | |
Yang et al. | Formal semantics of AADL models with machine-readable CSP | |
CN102819508B (zh) | 响应来自安防监控子系统信号的方法 | |
CN111324458A (zh) | 一种基于Java的大文件下载加速方法 | |
CN118069152B (zh) | 一种基于申威处理器的增强系统实时性方法 | |
CN111596923A (zh) | Haxe静态链接库构建方法、装置和电子设备 | |
CN112463578A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |