《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > 基于有限状态机的自动门控系统软件设计
基于有限状态机的自动门控系统软件设计
2016年微型机与应用第3期
田龙, 何勇灵
( 北京航空航天大学 交通科学与工程学院,北京 100191)
摘要: 采用有限状态机的方法设计了一种自动门控制系统软件,可实现自动门的可靠开闭和精确检测。本文介绍了自动门控系统控制及检测要求,给出了有限状态机的基本原理,建立了基于有限状态机的程序设计模型,给出软件设计的部分关键代码。单步调试及装车实测证明:有限状态机模型有助于规范化解决控制系统软件设计问题。
Abstract:
Key words :

  摘要:采用有限状态机的方法设计了一种自动门控制系统软件,可实现自动门的可靠开闭和精确检测。本文介绍了自动门控系统控制及检测要求,给出了有限状态机的基本原理,建立了基于有限状态机的程序设计模型,给出软件设计的部分关键代码。单步调试及装车实测证明:有限状态机模型有助于规范化解决控制系统软件设计问题。

  关键词:有限状态机;信号检测;自动门控制

0引言

  在某自动门控系统中,根据门控装置配置的光电传感器、接近开关、微动开关和控制按钮的状态,执行开门、关门、锁门及开关门二级缓冲动作。划分门控系统运行状态,确定不同输入条件下门控系统状态转移过程,是设计自动门控系统软件的关键。本文根据自动门控系统配置传感器的信号特征,合理划分门控系统运行状态,采用有限状态机原理,设计了门控系统控制和监测软件,极大地提高了软件设计可靠性。

1输入信号特征

  自动门控系统输入信号包括:锁门状态信号、关门位置信号、关门检测信号、开门检测与位置信号、开门关门控制信号,分别以红外传感器、微动开关、接近传感器和门按钮实现物理动作与电信号转换,嵌入式微控制器根据输入信号的变化,按设计的控制逻辑,控制直流电机拖动自动门动作。自动门控系统原理框图如图1所示。

  

001.jpg

  自动门控系统输入信号特征如下:

  (1) 锁门状态信号,电平电压24 V、0 V有效,在红外传感器被锁舌遮挡时,信号能够保持低电平;

  (2) 关门位置信号,电平电压24 V、24 V有效,当自动门门板上的金属挡板触碰微动开关使其闭合时,信号持续保持高电平;

  (3) 关门检测信号,电平电压24 V、0 V有效,金属挡板遮挡接近传感器时,信号保持低电平;

  (4) 开门检测与位置信号,电平电压24 V、0 V有效,金属挡板遮挡接近传感器时,信号保持低电平,金属挡板通过接近传感器后,信号恢复高电平;

  (5) 开关门控制信号,由门按钮按下时给出电平电压为24 V的控制信号,有效时间<0.5 s,根据当前门状态控制直流电机的正转或者反转。

2输入信号检测方法

  2.1检测方式

  在嵌入式系统设计中,检测一个数字量,只需要检测数字量端口的高低电平。为了提高检测到的数字量的可靠性,一般采用滤波、多次检测的方式[1]。但是对于自动门控系统,系统需要实时、快速、稳定地检测到输入信号,因此要充分利用输入信号特征,系统状态对输入信号的屏蔽要求进行信号检测[2]。本文采用如下方法:

  (1) 输入信号中断处理,沿触发;

  (2) 按钮设备采用防抖处理;

  (3) 针对不同门状态,屏蔽无关输入信号;

  (4) 同时监测各个门状态下的设备信号。

  通过上述几种对输入信号处理的方法,能够实时获取输入信号,及时处理。在这些信号处理的过程中,实际上是在自动门的多个状态下分别获取的,每一个状态不仅与输入信号相关,也与前一状态相关[3]。

  2.2划分门状态

  在自动门工作过程中,通过接收输入信号,根据当前门状态进行开门动作、关门动作、锁门指示以及开关门二级缓冲等动作。自动门在同一时刻只能处于一种门状态,同时为了提高自动门的可靠性,在一个门状态下,程序能够屏蔽其他无关设备信号的变化。

  本文针对自动门控制系统,定义了6个门状态:

  (1) 开门状态,表征自动门在完全开门后的停止状态;

  (2) 正在开门状态,表征自动门从完全关门位向开门位移动的状态;

  (3) 关门状态,表征自动门在完全关门后的停止状态;

  (4) 正在关门状态,表征自动门从完全开门位向关门位移动的状态;

  (5) 锁门状态,表征自动门机械锁死,卫生间有人占用的状态;

  (6) 故障状态,表征自动门输入设备或自动门轨迹上有障碍物,无法正常开关门的状态。

  2.3关于有限状态机

  通过对信号处理的分析,采用有限状态机的方式建模将使信号处理更加方便可靠。有限状态机(Finite State Machine, FSM)常见于数字时序电路设计,是概念上、理论上的一种机器。有限状态机包括:一组有限的状态集,是描述系统中不同状态的集合;一个起始状态,指示系统开始时的状态;一组输入符号集,是系统接收的不同输入信息的集合;一个状态转移函数,将输入符号和当前状态映射到下一状态[4]。

  当输入符号串时,有限状态机随即进入起始状态,在任意特定时刻,只能处于其中一种状态。状态的转换依赖于当前状态、输入符号(触发条件)和转换函数,转换时间理论上为0[5]。

  根据已定义的门状态,各状态机对应的输入符号集及状态转换函数如下:

  (1)S1,开门(STATE_OPENED):门外开门按钮触发时保持,门内开关门按钮触发或延时40 s后转入正在关门状态。在正在开门状态下,当开门接近开关由高电平转为低电平时转入。

  (2)S2,关门(STATE_CLOSED):无外部触发时保持,门内开关门按钮、门外开门按钮触发时转入正在开门状态。在正在关门状态下,当微动开关由低电平转为高电平时转入;在锁门状态下,当光电开关由低电平转为高电平时转入。

  (3)S3,正在开门(STATE_OPENING):在此状态下,门按钮触发时保持,当开门接近开关由高电平转为低电平时转入开门状态。在关门状态下,当门按钮触发时转入;在正在关门状态下,当异物或人阻挡门关闭时转入。

  (4)S4,正在关门(STATE_CLOSING):在此状态下,门按钮触发时保持,当异物或人阻挡门关闭时转入正在开门状态。在开门状态下,门内开关门按钮触发时转入;在故障状态下,门内开关门按钮触发时转入。

  (5)S5,锁门(STATE_LOCKED):在此状态下,门按钮触发时保持,当光电开关由低电平转为高电平转入关门状态。在关门状态下,光电开关由高电平转为低电平时转入。

  (6)S6,故障(STATE_FAULT):在此状态下,门外开门按钮触发时保持,当门内开关门按钮触发时转入正在关门状态。在连续关门失败两次之后,门打开并转入。基于有限状态机的门控制过程如图2。

002.jpg

3设计实现

  在自动门控制系统中,通过中断检测信号上升沿或下降沿变化,实时获取相应传感器状态信息并使系统当前状态跳转到另一状态,使用switch…case语句在每次循环中检测系统状态,并执行相应动作[6]。软件程序使用C语言实现,包括程序定义状态机、信号实时检测、状态执行任务等[7]。

  3.1状态机

  状态机的定义为:

  typedef enumSTATE

  {

  STATE_OPENED,//S1:开门状态

  STATE_CLOSED,//S2:关门状态

  STATE_OPENING,//S3:正在开门状态

  STATE_CLOSING,//S4:正在关门状态

  STATE_LOCKED,//S5:锁门状态

  STATE_FAULT//S6:故障状态

  } STATE

  3.2信号实时检测

  外部传感器有一个关门微动开关,一个关门接近开关,一个开门接近开关,一个锁门光电开关,另有两个门按钮——开门按钮与开关门按钮,分别连接至控制板的POS1,POS2,POS3,LOCK,SW1,SW2六个信号端口。由于各个传感器的设计不同,微动开关采用24 V供电,高电平有效,两个接近开关和一个光电开关采用24 V供电,低电平有效。在程序内部,初始化四个信号端口对应的I/O口,初始化中断,其中微动开关、两个门按钮配置为上升沿触发,关门接近开关、锁门光电开关配置为下升沿触发,开门接近开关上升下降沿触发。信号检测代码位于中断服务函数中[8]。

  相关的中断控制包括:

  (1)微动开关信号上升沿进入中断,系统状态设置为关门状态;

  (2)关门接近开关信号下降沿进入中断,给出自动门关门减速控制信号;

  (3)开门接近开关信号下降沿进入中断,给出自动门开门减速控制信号,上升沿进入中断,系统状态设置为开门状态;

  (4)锁门光电开关信号下降沿进入中断,系统状态设置为锁门状态,上升沿进入中断,系统状态设置为关门状态;

  (5)门按钮信号上升沿进入中断,控制自动门开门或关门,同时设置系统状态为正在开门状态或正在关门状态。

  3.3状态执行任务

  在进行状态循环检测之前,需要对系统上电之后的门状态进行一次判断,使门关闭。状态循环检测由while循环实现,采用switch语句在每个分支case对应的状态执行相应的动作。

  while(1)

  {

  switch(STATE)

  {

  case STATE_OPENED:

  ID1 = ID2 = 0;

  DRV1 = DRV3 = 0;

  TIM_SetCompare1(TIM3,DRV1);

  TIM_SetCompare3(TIM3,DRV3);

  ……

  break;

  case STATE_CLOSED:

  ID1 = ID2 = OCUP = 0;

  DRV1 = 0, DRV3 = stopspeed;

  TIM_SetCompare1(TIM3,DRV1);

  TIM_SetCompare3(TIM3,DRV3);

  ……

  break;

  case STATE_OPENING:

  if(BUFF_OPEN==0) OpenDoor_Control();

  while(!BUFF_OPEN)

  {

  …… //电机过流检测

  }

  CloseToOpen();

  ……

  break;

  case STATE_CLOSING:

  if(BUFF_CLOSE==0) CloseDoor_Control();

  while(!BUFF_CLOSE)

  {

  …… //电机过流检测

  }

  OpenToClose ();

  ……

  break;

  case STATE_LOCKED:

  ID1 = ID2 = OCUP = 1;

  break;

  case STATE_FAULT:

  FAULT = 1;

  break;

  default:

  delay_ms(5);

  break;

  }

  }

4测试与验证

  4.1软件仿真、在线仿真测试

  采用KEIL自带的软件仿真工具进行测试。首先进行信号检测任务的测试,通过软件模拟给出外部设备信号,分步调试观察外部设备信号的变化,能够使程序跳入中断服务函数内,并在执行完控制量设置之后能够跳出中断服务函数,回到主循环。其次进行有限状态机功能测试,对于在不同状态下接收到的每一个外部设备信号,确认是否能将其他无关信号屏蔽,能否在当前状态下产生相对应的控制量,能否实时监测相关信号是否正常,能否接收有效的外部设备信号并跳转到下一状态。

  采用在线仿真测试,测试内容与软件仿真相似,不同之处是将JLINK在线调试器连接到控制板,外部设备信号由真实的外部设备给出,显示输出信号占用的指示灯和故障指示灯也连接到控制板上,在线调试的优点在于既能做接近于真实情况的实验,又能在线调试控制板,观察各个信号的变化。

  4.2装车测试

  此测试采用CRH380高速动车组列车的残疾人卫生间门控装置以及传感器,替换原有控制器。在装车测试中,针对自动门关门、开门、缓冲、防夹功能以及故障、占用指示功能进行逐一测试。

5结论

  采用有限状态机实现自动门状态控制与检测的方法,能够可靠检测外部设备信号,在相应状态下能够屏蔽无关设备信号,提高了自动门实时控制的可靠性。

  参考文献

  [1] 施先旺, 刘婷婷, 李国良. 采用有限状态机实现控制指令的可靠检测[J]. 火箭推进, 2011, 37(5): 63-68.

  [2] 何剑宇, 刘兢兢. 有限状态机建模在嵌入式按键设计中的应用[J]. 沈阳师范大学学报: 自然科学版, 2012, 30(2): 168-171.

  [3] 徐智穹, 刘健, 邱浩. 有限状态机在嵌入式软件设计中的应用[J]. 低压电器, 2008(13):20-22.

  [4] 冯竞楠. 利用有限状态机的交通灯控制系统设计与仿真[J]. 电子设计工程, 2011, 19(12): 156-159.

  [5] Miro Samek.嵌入式系统的微模块化程序设计——实用状态图C/C++实现[M]. 敬石钧,陈丽蓉,译.北京:北京航空航天大学出版社, 2004.

  [6] 李晓锋, 宋锐, 曾小宝. 有限状态机在嵌入式系统中的实现及应用[J]. 广西轻工业, 2008, 24(4): 38-39.

  [7] 范晶,胡爱兰.基于状态机的PEX8311的DMA实现[J].微型机与应用,2014,33(22):30-33.

  [8] 宰文姣.基于步进电机的自动门系统设计[J].微型机与应用,2015,34(5):30-31,34.


此内容为AET网站原创,未经授权禁止转载。