成都仪器开发:用状态机的方法进行串口触摸屏的界面设计
做工业控制的时候,很多开发者喜欢一步一步来,第一步做什么,接着做什么,发生了某个事件执行某个动作处理,这是最简单也是最符合人的一般思维的方式,简单的控制系统这么做无疑是非常轻松的,可是一旦工业控制系统变得复杂了的话,一般的流程控制或者顺序控制将会十分困难,一是开发者面对复杂的系统很难在短时间内把各种关系捋顺,而且这样做成的系统一旦后期想有一点点的改动都会付出很大的工作量来修改。那么,状态机控制就是解决复杂控制问题的很好的一种方法。
有限状态机(Finite-state machine, FSM),又称为有限状态自动机,简称状态机,是一个数学模型。是一个抽象机器,在任何时候都可以处于有限数量的状态之一。响应某些外部输入,FSM可以从一个状态转换到另一个状态;从一种状态到另一种状态的变化称为过渡。有限状态机是非顺序的,没有事先的设定,跳转到哪个状态由事件决定。
状态机有几个要素:状态,条件,动作和下个状态,在某个状态时在某种条件(事件)下才会执行某个动作跳转到下一个状态,其中动作不是必需的。如图 1为一个3元有限状态机的模型,它有着3个状态,触发状态切换的事件最多有6个。当机器处于状态1时,只有发生了事件1才会切换到状态2,同样,在状态2时只有发生了事件2才会切换到状态1,其余的状态切换流程以此类推。在某一个状态,你可以根据需求定义机器的参数,例如温度达到多少、流量是多少等,在状态机内部再根据控制算法执行相应的动作调整机器的参数。
要使用状态机的方法,我们将要处理的对象划分为一个一个的状态,某一时刻机器只能处于一个特定的状态下,在这个状态下根据输入条件的变化来决定跳转到哪个状态,执行对应的动作,跳转和状态是唯一的。这样的状态机控制法让开发工作不再是复杂的流程控制,思路也会更加清晰一点,工作也就简单了。
最近在做工控、电路板、单片机、仪器、软件开发定制项目(业务Q:2531-2637-26)的时候,用到一个串口触摸屏作为人机交互接口,在这个屏上会做很多界面来用于参数的设置和显示。这时,我就把每个界面当作状态机的一个状态来处理,每个界面上的触摸按键反馈的信号就是状态机的事件,一旦接收到相应的触摸按键的信号(事件),屏的界面就会根据跳转逻辑发生跳转并根据指令控制执行器执行相应的动作。由于是串口触摸屏并用单片机作为的处理器,每个界面(状态)的显示、动作的执行等功能我编写成一个一个的子函数,并在主函数中的while(1)循环中根据状态号来调用,对于触摸按键信号的接收和状态号的切换跳转等简短的指令我在串口中断函数中处理,这样做的好处是让程序结构清晰,又节省了中断程序的执行时间避免中断丢失。
更多精彩,欢迎关注微-信-公-众-号:yonkotech
沙鸥-成都-2019.10.12