PLC状态机编程第一篇-状态机介绍

时间:2024-02-25 20:55:30

状态机的一般概念

过去我在学习PLC编程时,看的大部分书仅仅停留在软件的操作上,没有真正讲述如何组织程序,这里我们讲一个通用的描述控制算法的方法,就是状态机,和SFC很类似,其实SFC也是源于状态机啦。状态机是UML中的概念,在嵌入式开发中应用很广,但在PLC编程中基本没有流行。下面是一张用matlab画的状态机,包含了大部分基本元素。它描述的就是启保停电路,经典的控制。。。我们会在这个电路的基础上慢慢扩展。

motorStartStop

这个状态机中包含两个状态,分别是Off和On,这两个状态只能有一个是激活的,这和SFC一样。Off状态上带个小箭头的,表示这个系统激活,Off状态就激活,也就是SFC中的初始步。Off状态到On状态中间有两根带方向的转移线,转移线上分别有两个条件。当按下start按钮后,〔start〕条件激活,状态转移至On状态(注意,转移方向是单向的),再按下stop按钮后,〔stop〕条件激活,状态由Off转移到On,从而完成电机的启保停电路,很方便吧。那这样的状态机我们分别用梯形图和ST语言来表示。

startStopLad

很简单吧,用状态机来表示启保停电路,乍一看这么这么复杂啊,传统的很简单。。如果控制任务复杂,那么它的优势就来了,不容易出错,程序容易理解。这里有几点要注意:

  1. 需要给它一个初始步,这里初始步是Off,startupSet是在OB100中的,PLC启动是置“1",保证Off步能激活。
  2. 每个步的复位条件必需用上升沿,否则就不行了,原理自己想想。。

下面我们再这个状态机上扩展一键启停电路,传统的程序基本是经验法,我到现在都记不住,状态机吗,就很方便了。

pStartStop

我们对这个状态机作简要说明,我们前面的状态机只能有一个激活步,这里的两个带虚线框的步可以同时处于激活状态,这是并行结构,为啥要用并行呢,因为一键启停要用到沿触发,左边的的那个步主要是用来处理next信号生成pNext上升沿的,右边的转移条件全换成pNext。下图是梯形图中的表示方法。

pLadStartStop

颜色有误差,不过也能分辨出来。这段程序写在了FB块中,pNext是个块外传进来的沿触发信号。

下图是用西门子SCL写的。

pLadStartStopSCL

在图右边的scl写的状态机,左边调用了它。

这个状态机用一个case语句表示,共两个分支,分别是#offState、#onState,每个分支里有一个if语句,用来切换状态的,#nextTrig是沿触发。。

https://github.com/drongh/siemensPlcCodes,最后一例的代码,我放github上了,需要TIA博途V14SP1打开。

状态机的概念基本写完了,对于复杂的状态机,手写起来感觉很啰嗦,所以呢,我们下次通过matlab自动把状态机转译成SCL代码,怎么样?听起来很强大吧。