PLC编程状态机如何实现
在PLC程序的编写过程中,可以使用状态机的控制思路,将一些复杂的控制过程使用状态机的方法处理。这里简单给大家介绍一下什么是状态机?如下图所示,为一个状态机的状态图。
从以上图中可以看到,其是将动作执行的各个状态进行了一个划分、规划。动作程序的执行就是使程序在不同的条件下进行各个状态之间的转换。
以上这些都比较抽象,初次接触的话不是特别能让人理解,接下来我们看一下一个程序功能如何拆分为状态机的单个状态。
如何拆分设计状态机的状态
状态的选择
一般将程序执行过程中,会存在停留、保持、等待等过程。在设计状态的时候,就可以将状态的最小单位设计为这些过程。例如,1、控制气缸伸出/收回,这就可以选做状态机的一个状态;2、设备停止,等待接收命令,这也应该是一个状态;3、启动电机运行,电机运行到停止这也应该是一个状态;
总的来说,在选择状态的时候,状态在程序的时序结构上,在时间单位上应该是一个“保持”的状态。
状态之间的转换
状态转换一定是要某种条件的。即状态在处于保持的过程中,检测到条件满足,就进行状态间的转换。例如,气缸伸出/收回这个状态,在气缸动作的过程中,其缸动作到位传感器检测到到位信号,则程序就应该转换到下一个状态。下一个状态可以是另一个气缸的动作、也可以是等待延时、还可以是其他设备流程上的步骤。
状态机实现流程控制方法
举例1
这里以机械手物料取放机构为例给大家分享。这个是我以前给大家分享的一篇文章PLC编程示例-机械手物料取放。在这篇文章中,我以类似于“流水线”的方式给大家分享如何处理这类流程控制逻辑。
这种方式简单方便,编写程序的时候就依照动作的流程顺序执行下去就可以。但是如果设备的动作比较复杂,就可能会将这个“流水线”设计得非常得长。这当然不是一个优质的程序结构。但是如果使用状态机的方式来处理,就可以将程序简化许多。且程序的代码质量也会提高不少。
举例2
串口自定义协议实现过程。在处理串口通信的过程中,在进行数据传输的过程中一般都会有几个动作,如串口状态查询、串口空闲查询、数据发送、数据接收、异常检测、异常处理。
同样的,将串口通信的过程均使用状态机的方式来进行处理,可以极大的简化程序的结构。尤其在通信过程为动态变化的情况下,如某一时刻,仅需要数据发送流程;某一时刻,仅需要数据接收;某一时间既要发送又要接收;在处理此类流程复杂的过程时,选用状态机的方式可以灵活的适用在各种变化的通信过程。
(转载请注明来源函控自动化工程师头条号)
PLC的标准ST语言编程之运动控制部分
这次我们讲一下PLC控制里面比较重要的一点,伺服轴控制!
用ST语言给大家举例说明一下,通过面向对象编程,把伺服轴当作是一个对象,而轴的使能、绝对运动和相对运动是轴的一个能力。下面示例程序中定义结构化的状态信息(可用作声明),HMI和功能块。
伺服轴的信息结构体
把伺服的一些状态信息设置在ST_states结构体中,可以让其他子程序用这个结构体声明新结构。其它子程序使用这些数据不需要重新再一个一个写这些信息数据,又可以当成局部变量使用,数据互不干涉。
结构体
其它子程序声明用
MC功能块的再次封装
运动控制包括了4个功能块,分别是Axis_IO,Axis_PTP_CoE,FB_Home_ByLimit和ServoDriver_DI。
ServoDriver_DI: 获取伺服驱动上的原点信号,正向限位和负向限位
Axis_IO: 是对ServoDriver_DI继承和丰富,汇总了运动控制用到的所有硬件输入信号
FB_Home_ByLimit: 轴在任意位置回零功能块,无需考虑回零方向问题。该功能块先负方向找原点,如果碰到负极限则改为正方向找原点
Axis_PTP_CoE: 里面封装了Axis轴、MC功能块、Action动作和IO状态。该功能块包括了12个Action,每个Action就相当于NC轴的一个能力。
轴
Axis_PTP_COE.ahome :实现原点搜索的功能
Axis_PTP_COE.aIO :获取原点信号,正向限位和负向限位,并且把伺服驱动和NC报错信息发布给状态机中。
Axis_PTP_COE.aJogB :反向点动
Axis_PTP_COE.aJogF :正向点动
Axis_PTP_COE.aManualJOG :外部硬件控制伺服点动
Axis_PTP_COE.aMoveAbs :绝对运动
Axis_PTP_COE.aMoveOff :复位所有功能块执行标志位及输出
Axis_PTP_COE.aMoveRel :相对运动
Axis_PTP_COE.aMoveVel :速度控制
Axis_PTP_COE.aPower :伺服轴的使能
Axis_PTP_COE.aReset :刷新IO,读取伺服轴的状态,如果有伺服报错,进行错误复位
Axis_PTP_COE.aStop :伺服轴的停止
HMI模板制作
运动控制使用的模板是PH_JOGLINE,该模板中包括了伺服的正反点动按钮,伺服轴名称,伺服轴运动的距离,还有一些伺服的状态位(使能完成的标志位,寻参完成的标志位,正向限位,负向限位,原点信号和NC的报错信息)和报错复位按钮。
hmi
运动控制模板的使用
第一步:程序中声明轴变量
轴变量
第二步:编写程序
axis1.sName:="皮带轴"; //对伺服轴命名,用于区分
axis1.aReset(); //调用相关Action,刷新IO,读取伺服轴的状态
axis1.aPower(); //调用相关Action,对伺服轴使能
IF axis1.Ref.Status.ControlLoopClosed //判断是否完成使能
THEN
axis1.aManualJOG(Velo:=100 , ); //调用相关Action,实现点动功能Velo:=100
END_IF
HMI模板的调用
通过HMI中的Frame控件来调用HMI模板
调用Frame控件之后,进入Frame属性里面设置相关参数:
1) 设置调用HMI控件,选择congfigure,添加PH_JOGLINE_1作为模板。
2) 通过绑定变量Main.axis1,实现控制器上的程序变量和HMI上的控件的对应。
创建NC轴,链接控制器上的轴变量
NC轴
相关问答
plc状态机编程思路及方法?
PLC状态机编程是一种基于状态转移的程序设计方法,主要思路是将程序分解成多个状态,每个状态对应着一种特定的工作模式和控制逻辑,通过状态之间的转移实现程序...
plc状态字详解?
PLC状态字又称状态字寄存器,是一个16位的寄存器,只用了其中的9位,它属于S7-300/400PLC的存储区中除基本存储区外的存储区的一种。用于存储CPU执行指令后的状态...
三菱plc状态器指令?
三菱PLC的状态器指令是用于读取或设置PLC内部状态的指令。常见的状态器指令包括:XIC(输入闭合)用于检测输入点是否闭合,XIO(输入断开)用于检测输入点是否断...
plc编程状态寄存器的功能?
PLC寄存器可以对其进行赋值,然后调用PLC里面的内部资源。举个简单的例子,例如对定时器的计算机进行赋值,就可以调用PLC的定时器来进行定时。PLC寄存器可以对...
当PLC处于RUN状态是什么意思?
PLC(可编程逻辑控制器)处于RUN状态表示它正在正常运行并执行其程序。RUN状态是指PLC已被激活并处于操作模式,可以接收输入信号并根据程序的逻辑进行处理和输出...
怎样对OMRONPLC进行启动、监控、写入?
1、点击“自动在线”(如图1),弹出对话框,单击“是”(如图2),电脑与PLC建立通信,程序开始从PLC上传送至电脑。2、传送完毕后点击“确定”(如图3)。3、程序会...
plc属于初始化状态器是什么?
是状态继电器,在三菱fx系列plc的状态继电器是用S表示,就是控制PLC输出的状态----------------比如:要控制第一个灯亮5秒接着第一个灯和第二个灯一起亮3秒。在...
PLC编程怎么处理自动手动模式?
根据系统的当前状态,使用相应的PLC代码来控制系统的行为或输出。在开发程序时,需要把自动模式和手动模式的控制逻辑分开,以便在状态变化时不影响系统的性能。...
三菱PLCPROG一E亮什么意思?
"PROG"指的是三菱PLC编程状态,"E"表示错误。因此,当三菱PLCPROG一E亮时,表示在编程状态下发生了错误。这可能是由于编程错误、通信故障或硬件故障...
如何让plc调到run的状态?
要让PLC调到run的状态,需要先对PLC的程序进行编程和调试,确保程序的正确性和稳定性。然后,通过PLC编程软件将程序下载到PLC中,并进行在线调试。在调试过程中...