在编写PLC程序的过程中,可以利用状态机的控制思想,利用状态机的方法来处理一些复杂的控制过程。这里我给大家简单介绍一下什么是状态机?如下图所示,是一个状态机的状态图。
从上图可以看出,它对action执行的各种状态进行了划分和规划。动作程序的执行就是使程序在不同条件下的状态之间进行转换。
以上都比较抽象,第一次接触不是特别理解。接下来,我们看一下程序函数是如何被分割成状态机的各个状态的。
如何拆分设计状态机的状态
状态选择
一般程序执行过程中,都会有stay、hold、wait等过程。在设计状态时,可以将状态的最小单位设计为这些过程。例如: 1、控制气缸伸出/缩回,可以选择作为状态机的一种状态; 2、设备停止等待接收命令,这也应该是一种状态; 3、启动电机运行,电机运行停止。它应该是一种状态;
一般来说,在选择状态时,就程序的时序结构和时间单位而言,该状态应该是“维持”状态。
状态之间的转换
状态转换必须需要一定的条件。即在状态维持的同时,如果满足条件,状态就会发生转换。例如,在气缸伸出/缩回状态下,气缸运动过程中,气缸运动到位传感器检测到到位信号,则程序应切换到下一个状态。下一个状态可以是另一个气缸的动作、等待延迟或其他设备过程中的一个步骤。
状态机实现过程控制方法
实施例1
这里我们以机器人取料和放置机构为例与大家分享。这是我之前和大家分享的一篇文章《机器人取料和放置》中的PLC编程示例。在这篇文章中,我将与大家分享如何以类似“管道”的方式处理此类流程控制逻辑。
此方法简单方便。编写程序时,只需遵循操作流程的顺序即可。但如果设备的运动比较复杂,“装配线”可能会设计得很长。这当然不是一个好的程序结构。但如果用状态机来处理的话,程序就可以简化很多。而且程序的代码质量也会提高很多。
实施例2
串口自定义协议实现流程。在处理串口通信的过程中,数据传输过程中一般有几个动作,如串口状态查询、串口空闲查询、数据发送、数据接收、异常检测、异常处理等。
同样,使用状态机来处理串行通信过程可以大大简化程序结构。特别是当通信过程动态变化时,例如某个时刻,只需要数据发送过程;在某个时刻,只需要接收数据;在某个时间,既需要发送又需要接收;在处理如此复杂的过程时,状态机方法可以灵活地应用于各种变化的通信过程。