基于有限状态机的工控系统软件设计
技
术
创
新
中文核心期刊 《微计算机信息》(测控自动化)2008 年第 24 卷第 4-1 期
360元 / 年 邮局订阅号:82-946 《现场总线技术应用 200 例》
控 制 系 统
基于有限状态机的工控系统软件设计
Finite State Machine Based Software Design for Industrial Controlling System
(1.中国科学院自动化所综合信息中心实验室;2.中国科学院研研究生院)梁 俊 1,2 台宪青 1
LIANG JUN TAI XIANQING
摘要:通过分析工控系统的特性,提出采用状态机的思想进行工控软件设计。详细论述了高速状态机的错步问题以及控制层
中状态机的状态划分问题。结合具体的应用实例,给出了基于状态机的实现方法。实验表明,采用状态机的设计方法有助于
准确描述受控对象的行为,软件的健壮性和可靠性得到显著提高。
关键词:有限状态机;工控软件;控制环;状态划分
中图分类号:TP311.1 文献标识码:A
Abstract:A new method of using FSM (finite state machine) to implement the design of industrial controlling software is proposed by
analyzing the special character of it. The “error step”of high speed state machine and the state partition of state machine are dis-
cussed in details. Combining practical examples, the state machine based design is given. Experiment result verifies that the object
behavior can be described much more precisely by state machine based controlling software, meanwhile, the robustness and reliability
of the software are also remarkably improved.
Key words:state machine,industrial control,control loop,state demarcation
文章编号:1008- 0570(2008)04- 1- 0054- 03
1 引言
1.1 工控软件的一般问题
工控软件设计可分为基于控制环和基于实时操作系统两
大类。控制环是把各个功能模块连接成首尾相接的环状结构。
其特点为任何一个功能模块都不能出现死循环,甚至循环次数
太多的循环语句都应避免出现。以保证能够在实时意义上尽可
能快地遍历各功能模块,从而满足实时多任务的需求。在各功
能模块中一般用状态机来描述模块所处的状态。而实时操作系
统则可以通过一套底层机制根据优先级和各任务状态调度各
功能模块。此时各功能模块就以“任务”作为表现形式。但是在
每个任务内部仍然为一个独立的控制环结构,仍然需要用状态
机描述。本文将结合工程实践论述状态机在工控中的应用,给
出通用模型和注意要点。
1.2 有限状态机
有限状态机是一种重要的思想方法。从数学的角度看,它
实际是一个五元组 M = (I, O, S, δ, λ),其中 I,O 分别表示输入
输出,S 为状态向量,δ为次态方程(δ: S×I - >S),λ表示输出方程
(λ: S×I - > O)。有限状态机从结构体系上有层级状态机,并发状
态机等。层级状态机类似于软件中的子程序调度:更高层的一个
状态对应于较低层的一个状态机。这个高层的状态处于底层状
态机的某个状态中。这个低层状态称为子状态。与子程序调用
受到系统堆栈深度制约不一样,层级状态机可以由开发者根据
控制对象的层次性运动规律任意指定深度。与子程序的目的一
样,层级状态机也是为了提高控制软件的模块化程度,降低状
态分析的复杂度。并发状态机偏重于描述状态机的调度。状态
机本身不能实现什么并发功能,并发的实现是通过软件调度
的。如果把状态机理解成一个任务,那么就能理解并发的实现。
在控制环中,一个“任务”就是一个功能模块,我们只需要把多
个状态机串联在环中,也就是实现了多输入多输出的并发控
制。此时,多个状态机在空间上是并存的,然而却是分时调用
的,调用的周期等同于控制环扫描一周的时间。不过如果 CPU
运算速度足够快,这个周期将会足够的快,达到“实时”的程度,
从而这多个状态机也就实现了“并发”运行。同理,在多任务操
作系统中,“并发”的实现就更容易理解了,除了在单个任务内
存在控制环的并发控制外,在任务之间也同样存在多状态机的
并发运行。当然,从 CPU 的角度而言,只要是单核的,也就从来
不存在真正的“并发”,它在任何一个特定的时间点都只能处理
某个特定状态机。不过多任务操作系统却提供了一套底层机制
来调度原来仅靠控制环来调度的任务。
2 有限状态机在前后台信息交互中
的作用
工控系统一般都具有人机对话界面。其通常的操作模式为
用户进入某个页面,选取某项操作并执行。人机对话界面通常
被设定为一个独立模块。该模块软件结构为一个消息控制环。
用户在硬件接口的操作会通过接口的驱动程序封装成消息加
入到专属界面模块的消息队列中。消息控制环循环扫描该队
列,如有新消息则提取并解释然后封装成新消息发往后台执
行。前后台软件的接口模块负责分发界面消息到各个执行模
块。消息应包括目标模块的编码,命令编码以及命令参数。前后
台接口模块的软件结构多采用以下两种模式。
梁 俊: 硕士研究生
基金项目:国家 973 资助项目(2002CB312200),
信息产业部电子信息产业发展基金重点资助项目
54- -
邮局订阅号:82-946 360 元 / 年
技
术
创
新
控 制 系 统
《PLC 技术应用 200 例》
您的论文得到两院院士关注
模式一 模式二
图 1 两种消息分发结构
模式一的输出结构根据消息数据的目标模块编码直接分
发消息到各模块中。模式二则是根据当前系统所处的状态再分
发消息到各模块中。也就是说模式二在模式一的基础上增加了
一个系统级的状态机。下面我们看看两种不同的输出结构会带
来何种影响。
工控软件设计者通常会碰到两种情况。一是在研发阶段,
界面任务与控制任务联调时,双方均有可能出错。对于界面任
务而言,有可能自身原因误发消息;而对控制任务,也有可能输
出时序出错。此时需要在联调中快速定位故障,缩短研发周期。
二是在产品运行中由于恶劣工况的影响,导致缓冲区数据发生
异常。比如消息头的模块编码发生位翻转,则会直接导致控制
任务接收到错误的界面消息。对于模式一,如果界面消息出错
则会出现全局的混乱。比如模块 1 收到消息后开始输出一个控
制时序,期间界面层又发来一个错误的消息,使其分发到模块
2,于是模块 2 马上开始输出时序。这个不希望输出的时序在工
控中有可能会导致灾难。而在联调时出现这种现象,则无法立
刻判断到底是模块 1 还是界面层出的问题。但如果采用模式二
则可以屏蔽这种混乱。如下图
模式一 模式二
图 2 不同分发结构对错误消息的处理示意图
我们可以看到由于模式二采用全局状态机标定当前软件
所处的状态,消息首先会到达相应的状态处理程序,然后才进
行分发。此时分发语句可以根据当前的状态屏蔽不应该被调用
的模块。即使消息出现错误,也会过滤掉,等待正确消息的到
来。而且可进一步优化为当收到错误消息可以通知界面层。可
见在控制软件前后台的接口层增加一个标记后台状态的全局
状态机有助于增强软件的健壮性。
3 状态机的错步问题
工控软件本质上是根据一定的逻辑条件给出有序的输出。
根据输出的次序可以划分不同的状态。逻辑条件在嵌入式领域
中就是用户的输入和传感器的状态。正是这些条件决定了状态
的跃迁。在这里我们探讨的是根据传感器输入而建立的状态
机。很明显,它的运行速度比前述系统级状态机高很多。这种状
态机分布在软件的控制层中,正是它们使得受控对象能够有序
精确高速的运行。对于这样高速运转的状态机,如果考虑不周
全,会使其产生失步或者跳步,即高速状态机中的错步现象。由
于控制层的状态机的跃迁条件来源于传感器信号,如果不能完
全跟踪到传感器信号的变化,则跃迁条件将被遗漏,导致状态
机不能跃迁到新的状态。这就会导致失步。有两种情况会导致
传感器信号的检测遗漏:一是采样频率不够高,漏掉了一些保持
时间较短的信号。这可以通过硬件上提高采样频率得到解决。
二是状态机设计的缺陷,详见以下例子。
图 3 出现失步的状态机
由图 3 可以看出,状态 1 根据传感器 a 信号跃迁到状态 2,
状态 2 根据传感器 b 信号跃迁到状态 3。如果 b 信号在 a 信号
前发出了一个完整的脉冲,由于根据状态图在状态 1 时并不需
要检测 b 信号,因此当跃迁到状态 2 以后,状态机就出现失步
了。解决这个问题需要预先分析好 a,b 信号的关系。如果是 b
信号一定出现在 a 信号前,那不妨把状态 1 和 2 的条件判断对
调,如果两个信号是并发关系的,那就要合并状态机 1,2,把 a,
b 信号作为跃迁到 3 的综合条件。因此解决失步问题的要点在
于仔细考察受控对象处于此状态时所可能出现的传感器信号
变化及其变化关系。
在处理“输入- 输出对”时要注意防止状态机跳步。“输入-
输出对”是嵌入式领域中经常遇到的控制模式,类似于应答机
制。控制层给出一个输出,使得传感器信号产生变化并反馈,过
一段时间后,控制对象运动完成,传感器信号恢复初态,此时控
制层可以撤消原输出并给出相关处理。设计者会有意无意的把
注意力放在“什么时候撤消输出”,因此设计出如图 4(a)所示的
有潜在问题的状态机。
(a)有隐患的状态机
(b)正确的状态
图 4 出现跳步的状态图
可是控制对象在收到控制层输出的驱动产生运动,传感器
感知运动并给出信号变化是需要时间的。根据图 4(a)的状态机,
很可能跳过传感器信号变化的状态,而直接到达“撤消输出”的
状态。结果导致控制层的输出仅仅是一瞬而过甚至是无法输
出,这就是跳步。为解决跳步问题,就需要设计者仔细分析所有
的“输入- 输出对”,把状态细分。如图 4(b)所示,增加一个等待
对象运动的新状态,确保上一状态的输出驱使对象真正运动以
后才判断对象运动停止。然而在细分状态的同时也要注意防止
失步。状态分得越细,越要注意分析此状态中所有可能出现的
信号变化。
4 状 态 机 在 工 控 软 件 中 的 状 态 划
分问题
把一个状态机看作是一个动作模块,并把这些模块串联起
55- -
技
术
创
新
中文核心期刊 《微计算机信息》(测控自动化)2008 年第 24 卷第 4-1 期
360元 / 年 邮局订阅号:82-946 《现场总线技术应用 200 例》
控 制 系 统
来,就可以实现这几个动作的并发输出。如果是基于操作系统
的,状态机还可以放在不同的任务中,也可以实现并发输出。每
个状态机设定一个空闲状态,当不需要其运转时让其进入该状
态。同一个控制环的状态机之间的通信可以用标志位或者状态
变量,不同任务的状态机可以通过一个全局的结构体交互信
息,实现同步。
状态机的调度并不困难,关键在于如何根据受控对象的运
动规律来划分状态机动作模块。在实际应用中,“周期性”是解
决问题的关键。从复杂的运动时序中归纳出带有“往复运动”性
质的输出,连同与其同步的其他输入输出归入一个状态机中。
这样每个具有“往复运动”性质的运动模态都建立一个状态机。
同时,可以运用上文介绍的方法实现这几个运动模态的并发和
同步控制。
下面通过某型进油系统来说明如何划分状态机。某型进油
系统分左右两路。每路由一油链,摆臂,拨动滑板组成。油链上装
载多个装油模块。摆臂把模块提升到滑板,并由滑板推进到燃烧
舱中,然后油链步进一次。全过程双路交替供油。供油分为低速
供油和高速供油。时序如下图,黑色横线代表动作持续时间。
图 5 供油系统低速供油时序图
图 6 供油系统高速供油时序图
先分析低速供油的情况。可以看出油槽下降- 油门关- 油槽
上升- 油门开- 滑板(左或右)这几个动作是交替出现,在滑板动
作完成以后,油槽又开始新一轮的动作。由于这种周期性,可以
把这几个动作归入状态机 A 中。而油链动作是由滑板动作触发
的,当滑板运动到一定位置时候油链会启动,油链的运动会持
续到下一次同侧运动开始后。如果把油链运动也归入状态机 A
中,就打破了 A 的周期性,从而增加了 A 的状态确定复杂化。
另外从运动的本质上来说,油链运动被状态机 A 中的滑板运动
所激发,因而把油链运动定义在另一个状态机 B 更为合理。B
是在 A 运动到某个状态时所触发的,触发后,B 和 A 就是并发
运行的状态机。
高速供油与低速时序的区别在于在左路状态机 A 的周期
没有完成的情况下,右路的状态机 A 已经开始了。但是尽管如
此,对于单路而言,油槽下降- 油门关- 油槽上升- 油门开- 滑板
(左或右)仍然呈现周期性。所以应该为左右两路各建立一个状
态机 A,也就是 A1 和 A2。A1 和 A2 的状态机代码是一样的,当
判断油槽重新上升后马上触发相对一侧的状态机。同理对于油
链运动,也应该建立 B1 和 B2 状态机。在多任务系统中,左右两
路可以分别建立一个任务。把 Ax 和 Bx 归入其中一个任务中。
综上所述,根据周期划分受控对象的运动,并建立相应的
状态机,就可以描述各种复杂并行的时序输出。
5 结论
本文结合嵌入式工控软件设计的工程实践,分析了状态机
思想在软件设计中的应用。给出了状态机在嵌入式软件中前后
台信息交互的通用模型;分析了高速状态机容易出现的错步问
题;最后结合某型供油系统,给出了划分状态机的周期性准则,
该准则对于分析受控对象运动具有一定的参考价值。
创新点: 提出通过分析控制对象的周期性来划分状态机模
块的方法,更准确的描述控制对象的运动,同时通过多个状态
机的并发运行,实现控制对象的并发时序输出。
参考文献
[1]周怀得,肖传,伟郝志航.基于 DSP 和 CPLD 的智能相机系统
设计与研制[ J ]微计算机信息,2006,Vol.22,No.17.
[2]王剑,赵海燕. 基于 CPLD 的控制器冗余设计[J]微计算机信息.
2005 Vol.12, No.23
[3]James R. Armstrong F. Gail Gray: VHDL Design Representation
and Synthesis. China Machine Press.
[4]赵世霞,杨丰,刘揭生.VHDL 与微机接口设计。 北京,清华大
学出版社,2004。
[5]王诚,薛小刚,钟信潮.Xilinx ISE 使用详解。北京:人民邮电出
版社,2004。
[6]杨庆. 有限状态机的设计与优化.湖北民族学院学报(自然科
学版),Vol.24,No.1,Mar 2006.
[7]邬杨波,王曙光,胡建平.有限状态机的 VHDL 设计与优化.信
息技术.VOL.28,NO.1,Jan.2004.
[8]Alain Girault,Bilung Lee,and Edward A.Lee,”Hierarchical Finite
State Machines with Multiple Concurrency Models”,IEEE Trans.
Computer - Aided Design Of Integrated Circuits And Systems,Vol
18,No.6,pp. 742- 760,June,1999.
作者简介:梁俊(1978- ),男,硕士研究生,主要研究方向:嵌入式
系统设计;台宪青(1965- ),男,研究员,硕士生导师。
Biography:Liang Jun, Male, Born in Guangzhou, guangdong
province in 1978,master. Research interest: embedded system
design. TAI xian- qing, Male, Born in 1965, Professor, Doctor
Director, Research Field: Intelligent System, Digital Image Pro-
cessing Technology.
(100080 北京 中国科学院自动化所综合信息中心实验室)
梁俊 台宪青
(100080 北京 中国科学院研研究生院)梁俊
通讯地址:(100080 北京市 北京市海淀区中科院自动化所综
合信息中心实验室)梁俊
(收稿日期:2008.1.5)(修稿日期:2008.3.5)
地址:北京海淀区皂君庙 14 号院鑫雅苑 6 号楼 601 室
微计算机信息杂志收 邮编:100081
电话:010-62132436 010-62192616(T/F)
《现场总线技术应用200例》已出版,
每册定价 110 元(含邮资),汇至
56- -
基于有限状态机的工控系统软件设计.pdf