有限状态机在开放式数控系统中的应用

来源:互联网

点击:1434

A+ A-

所属频道:新闻中心

关键词:开放式 数控系统 有限状态机

    xit  在机械加工领域,控制逻辑规定了机床控制器完成特定功能所必须的步骤或事件的序列。当向机床中添加新的部件、增加新的控制算法或替换已存在的子系统时,其控制逻辑必然发生改变。为使控制软件具有复用性和重构能力,需要研究控制逻辑的建模方法和软件重构。控制逻辑反映了系统的动态特征,采用动态行为模型来构造。在面向对象方法中,行为表示对象为完成某种功能而进行的一系列处理操作,是指对象做什么;动态行为模型表示瞬时的、行为化的系统的控制性质,它规定了系统中对象的合法变化序列。

      本文采用面向对象的编程技术,基于模块化思想构造开放式数控系统以层级式有限状态机(Fi2nite State Machine , FSM) 作为其行为模型,建立了有限状态机基础类库,以确保有限状态机机制的实施。该类库具有定义和修改有限状态机的接口,使模块内部控制逻辑的定义与实现相分离。当扩充系统功能时,如添加对刀具的状态监控,可以基于有限状态机机制完成对系统的行为重构。

    1 有限状态机

      FSM由一定数目的状态和相互之间的转移构成,在任何时候只能处于给定数目状态中的一个。它以一种事件驱动的方式工作,当接收到一个事件时,状态机产生一个输出,同时也可能伴随着状态的转移。它包括以下一些构成要素:

      (1) 状态 是对象的生命周期中满足某种条件、执行某些动作或等待某些事件发生的一个阶段,能持续一段时间。

      (2) 转移 是从一个状态节点(源状态) 到另一个状态节点(目标状态) 的移动,发生状态转移时,对象会相应地执行某些动作。

      (3) 事件 是一个在时空中显式出现的特定现象,它可以触发状态转移。事件可以来自外部,也可以是内部生成的。

      (4) 动作 是对象在状态发生转移时所作的一系列处理操作。

      对于复杂系统,如采用上述基本FSM 建模,可能存在成百上千的状态,导致系统效率下降,且难于验证和维护。因此,出现了对基本FSM 的扩充,如层级式FSM。层级式FSM 由一系列基本FSM 按照层级方式组织起来,一个或多个下层FSM 对应于上层FSM 中的某一状态(称其为组合状态) 。当FSM 处于某一组合状态时,一个或多个下层FSM可以并行或顺序执行。

    2 基于有限状态机的行为模型

      2.1 机床的行为建模

      FSM 经常用来模型化反应式系统,反应式系统对外部和内部事件作出反应,属于事件驱动系统。在确定性的反应式系统中,输入事件的顺序和数值决定了系统响应的顺序和数值。

      数控系统根据输入的信息(如数控程序、操作面板的输入、传感器反馈信息) 控制机床移动,实现加工操作(如轴运动、换刀、停止机床等) ,其行为是可预见的,属于典型的反应式系统。因此,将外部输入的信息表示为FSM 的输入事件,将机床的加工操作表示为FSM 的动作,采用FSM 作为机床的行为模型。

      采用状态转移图表示机床行为的简化FSM ,它描述了该系统可以根据用户的命令实现轴进给、停止,并在监控到刀具破损后停止轴运动。其FSM 包含3 个状态:系统就绪( system ready) 、轴运动(axis moving) 和刀具破损(tool broken) 。可以处理3 个事件:其中两个代表用户的请求即进给(move) 和停止( stop) ,一个代表传感器反馈信息即刀具破损。机床可完成的操作被抽象为FSM 中的动作moveAxis () 、stopAxis () 。机床的动态行为以FSM 方式被清晰、规范化地描述出来。可以看出,在FSM 中,状态转移触发动作的过程就是机床实现加工操作的过程。

      实际应用中机床行为复杂,其状态数目庞大,笔者将整个系统按照层级方式分解为一系列子功能模块,整个系统的行为被分解为子系统的行为,并用单独的FSM 描述,然后再把这些模块集成起来构成系统,得到层级式FSM 所表述的整个系统行为模型 。采用层级式FSM 进行行为建模,可实现系统行为的结构化、层次化表达。最终,机床的行为可以看作是各模块行为的集成,机床的加工过程就是各模块FSM 的转移过程。

      2.2 行为建模方法

      本文基于FSM ,采用以下方法来模型化机床的行为:

      (1) 考察对象的运行周期,识别相应的、较固定的、具有某些相同特点的时间段,将其抽象为状态。

      (2) 考察对象能否从一个状态变为另一个状态,如果能变,探究状态变化的原因(抽象为事件) ,确定是否伴随发生一些反应(抽象为动作) ,从而定义转移,转移=〈事件,动作,目标状态〉。另外,还存在一种自身转移,它是源状态等于目标状态的转移,触发自身转移的事件可能是对象内部自生成的,如刷新事件(up date) ,可参见下文的例子。

      (3) 考察每个状态,看其是否应该分解。通过对状态的层次结构分解,将一个大的状态分解为若干子状态,分解层数的多少取决于系统的复杂程度;再逐步细化,直到所有的状态都是原子的(不再分解的) ,确定原子状态之间的转移形成状态机。通过上述方法完成系统的有限状态机规划。

    3 基于有限状态机的行为重构机理

      机床FSM 的内容实际上由状态集合、事件集合、转移集合和动作集合组成,称之为状态表。在实际应用中,由于系统的配置发生变化(增删设备、引入新功能或新的控制算法等) 而改变系统的行为时,对数控软件系统而言,则需重新规划FSM ,创建新的状态表。

      状态表可以采用链表的结构,链表中的每个单元都包含一个状态标志,还有一个指向转移集合的指针。每个转移又包含一个触发它的事件标志和动作集,以及指向下一个状态的指针,其中动作集是状态转移时被调用函数的完整集合。状态表的组织结构。每个状态具有一系列转移(转移集) , 其中, 状态state7 为组合状态, 对应状态state7. 1 和state7. 2 构成的下一层FSM。当系统需求改变而导致行为发生变化时,对应状态表内容的添加、删除和替换,如图3 中阴影表格所示,可以进行动作的替换(采用modifiedAction ()替换action3 () ) ,添加新的状态( newState) 、新的转移( &t ran7) 和新的事件(newEvent1) 。通过对状态表的修改来完成基于FSM 的系统行为重构。由于FSM 采用层级式管理,行为改变通常仅对特定子系统产生影响,只需要修改相应模块的状态表即可。一般情况下,将一个新的状态表以文件的形式保存,在系统启动时加载,就可以实现执行代码级别的行为重构。为此,对于每个模块,设计了多个状态表来规定它在不同系统模式下的不同行为,系统启动时只加载其中一个状态表,使同一模块可以满足于不同的应用。当系统行为变化涉及到修改动作集时,就需要编写源代码,因为动作是在状态转化时被调用的函数。

      为了便于创建和修改状态表,还设计了FSM基础类库。它不仅提供了定义、查询和修改状态表的接口,而且是FSM 机制运行的驱动中心,其作用与硬件设备驱动程序类似。系统运行时,FSM 基础类库负责接收事件,在状态表中根据当前状态查找对应的转移,触发规定的动作,进而实现了系统的特定功能。FSM 基础类库是实现系统行为重构的关键。

      因此,在行为重构过程中, 设计者不必关心FSM 机制的实施细节,只需负责FSM 的重新规划和动作集合的编程(如果需要) ,可大大减少重构的时间和成本。

    4 重构实例验证

      现以一个实例,即向已有三轴铣床数控软件中添加监控刀具破损功能,来演示系统行为重构的能力。

      4.1 三轴铣床软件系统的原始构成

      (1) 任务协调器 进行任务分配,并协调各个模块的运行。

      (2) 译码模块 完成语法检查、译码和刀具补偿功能。

      (3) 轴组模块 完成加减速处理和插补功能,向各轴发送相应的设定点协调它们的运动。

      (4) 轴模块 接收来自轴组的设定点,进行单轴控制,向外部设备发送信号。

      按照前述的行为建模规则,任务协调模块、轴组模块、轴模块的简化FSM 其中,任务协调器是控制软件的调度中心,FSM 位于系统的顶层,其他模块FSM 在其管理下并行运行,状态的自动(auto) 或手动(manual) 方式对应于系统的加工模式。

      4.2 重构实现

      下面在原有系统中集成监控功能,以监控刀具破损为例,证实基于FSM 构造的系统具有行为重构能力。

      监控刀具破损功能指在主轴刀具发生破损或断裂时,系统能够及时检测到该情况,并自动停止所有轴。笔者编制了单独的模块,以实现刀具破损监控功能。通过读取外部传感器测得的主轴功率,依据一定的规则判定刀具破损,发出刀具破损(broken)事件(刀具破损判定规则不在本文研究范围内) 。监控刀具破损模块也在任务协调器的调度下周期性运行,在发生刀具破损时,它向任务协调器的标准接口发送broken 事件。

      任务协调器对broken 事件做出反应,其行为发生变化,因此需要规划FSM ,修改状态表,包括增加新的状态、事件、转移和动作,虚线框内为新增FSM 部分。在其处理broken 事件的动作(对应于任务协调器的成员函数toolBrokenAction() ) 中向轴组发出stop 事件,而轴组模块已经具有处理stop 事件的能力,控制逻辑不发生改变,因此轴组和轴模块的FSM 不受影响,无需作任何修改。对状态表内容的修改包括增加一个刀具破损Tool_Broken”状态,以及和刀具破损状态相关的两个转移,还有与循环加工Incycle”状态相关的一个转移。这些新增条目可以利用FSM 类库提供的方法addTransition 来创建。该函数原型为CFiniteS2tateMachine : :addTransition ( st ring state , st ring e2vent , st ring next State , CFSMAction action) 。其中,CFiniteStateMachine 表示FSM 类, st ring 表示字符串类, state 表示对象当前所处状态的名称,e2vent 表示对象接收事件的名称,nextState 表示对象将转移的下一状态的名称,CFSMAction 表示FSM动作类,action 表示对象转移过程中被触发的动作。

      void CTaskCoordinator ∷setup FSM() / / 任务协调器建立FSM  {  addTransition (Idle, setAuto , Auto ”, & CTaskCoordina2  tor : : setAutoAction) ;/ / 原有转移  ?  / / 添加刀具破损、恢复、复位事件对应的转移  addTransition ( InCycle , ; broken,  Tool _ Broken ,  &CTaskCoordinator : :toolBrokenAction) ;  addTransition ( Tool _ Broken ,  resume ,  InCycle ,  &CTaskCoordinator : : resumeAction) ;  addTransition ( Tool _ Broken ,  reset ,  Idle ,  &CTaskCoordinator : : resetAction) ;  }

      可以看出,通过FSM 基础类库提供的方法能够方便、高效地改变状态表。此外,模块开发者还需要完成断刀处理动作, 即toolBrokenAction , re2sumeAction 和resetAction 的编程。

      每个模块都要经过调试正确后进行集成,最终可获得具有刀具破损监控功能的三轴数控铣床xi't 。上述重构过程已在一开放式三轴数控铣床实验台上实现,达到了系统重构的目标。通过在三轴铣床系统中添加刀具破损检测功能,说明本系统也能够集成其他外部传感器信号,实施用户特有的控制策略。

    5 结论

      FSM 作为系统的动态行为模型,使系统具有了行为重构能力,大大增强了开放性。基于有限状态机的行为建模的优点是:提供了构造系统动态行为的统一方式;可以对每个模块的行为单独检验,有助于错误的发现; FSM 采用层级方式管理,使系统的行为变化转变为对部分模块FSM 的修改;有限状态机基础类库提供了修改和存取模块内部控制逻辑的接口,使控制逻辑的定义与实现相分离。

    (审核编辑: 智汇张瑜)