打造易维护的PLC程序:程序的写法以及误区

本文以三菱FX系列PLC梯形图为例,提出12部分框架优化流水线控制,涵盖初始化、信号处理、互锁、HMI交互等。强调模块化设计与调试技巧,避免冗余代码,提升可维护性。提供误区分析与实用案例,适合PLC程序员及自动化工程师。

由于工作的原因,我经常帮客户朋友修改许多别人写的程序。里面既有很多科班人士写的程序,也有很多野路子人士写的程序。这些程序,无一例外的都是非常臃肿,充满了大量的无效冗余代码。


那么,这篇文章,就以我最熟悉的三菱FX系列PLC的梯形图程序举例。一个易于调试维护的程序,应该是怎么样的。
以我们常见的生产流水线来讲,一般包含一个流水线主电机,以及前端进料,中间的多个加工工位,后端出料部分。


首先,我们要对程序进行整体规划,分区。以我的编程习惯,分区可以分为:

1.数据的初始化及地址位的规划:程序启动时,某些数据的初始化(最高优先级,且这部分内容必须放在总体程序的最前面,梯形图的首段)。数据分类,断电保持与非保持区域的协调,地址位的规划。如16位数(D寄存器),32位数(DD指令),浮点数(E指令),动作流程步计数(C计数器或D寄存器)。

2.数字信号处理:通讯协议的设置,与远端人机界面,变频器,总线系统等的数据交换等等。(如modbus,ethercat,can总线等。)

3.模拟信号处理(模拟量数据通道的输入与输出设置):如称重传感器,压力传感器,温度传感器的量程设置,数据的读取。变频器输出频率的设置,比例阀的开度设置等等。

模拟信号在某些低成本场景下实时性较强,传感器价格更便宜;但数字信号在精度、抗干扰能力和长距离传输上更有优势。

在选择传感器的时候,需要根据具体情况进行选择。

4.程序的主流程:流水线主电机的启停及前后端进出料,加工工位的启动。启动前需要判断系统是否复位,所有电气设备都在准备位置,是否有电气设备报故障等等。如果有异常,禁止启动系统。

5.程序的子流程:前端进料的动作流程,各个加工工位的工作流程,后端出料部分的工作流程。(所有子流程完毕后,反馈信息到主流程启动主电机。)

子流程通过标志位(如M100表示工位1完成)反馈到主流程。若子流程未在规定时间(如10秒)内完成,使用定时器T0触发超时报警。

6.整机复位流程:例如系统发生故障,或者某些电机,气缸不在系统启动的位置的时候。我们需要先将各个工位的电气设备回到准备位置,然后将流水线主电机运行到准备位置。(此时需要注意工作顺序以避免撞机!)

7.程序互锁部分的设置(第一优先级)如按下急停按钮或有工人触发保护光栅后,整体流程停止的判定。某工位启动后,其他工位能否启停的判定。自动模式运行下,禁止启动调试模式。某些电气设备报故障后,禁止启动自动/调试模式。

现场环境可能出现意外情况,需尽量考虑所有异常场景并设计相应互锁逻辑。

在程序执行顺序中,互锁逻辑(如急停、光栅触发)优先于报警逻辑,报警逻辑优先于主流程和其他模块。

8.调试模式:前面的主流程和子流程可能都会用到某个Y点输出,那么我为了防止双线圈,我会在各个主流程或子流程使用不同的线圈标记。例如:第一次启动电机A,标记为M1。第二次启动电机A,标记为M2。复位流程中,启动电机A,标记为M101。在调试模式中,启动电机A,标记为M201。然后我们在程序中,将M1,M2,M101,M201并联输出到电机A对应的Y0。这样我们在调试程序的时候,既可以避免双线圈的情况,也可以及时发现是哪段程序正在驱动电机A。

9.报警区的设定(第二优先级)

严重报警是否需要立即停机,次要报警(如传感器轻微漂移)是否仅记录而不停机等等。某些气缸可能在规定时间内,未走到我们需要的位置,这样就会让整条生产线停滞。或者复位的时候,某些设备没有到准备位置,导致我们无法正常复位。那么这个时候,就需要输出信号,停止产线。并告知用户,哪里出了问题。

10.数据转换计算处理的部分:产品经过工位01后,重量为A,尺寸为B。工位02,需要根据产品的重量,尺寸进行再次加工。工位03,又要对上个站的数据进行处理分析,然后进行加工。连续次品过多的情况下,数据反馈给报警区。这部分程序,我一般是写在程序的后面。

11.其他程序:

某些特殊算法,设备的定时启停,设备维护周期管理,外部设备对接逻辑等。

12.数据采集与追溯:数据采集分析,PLC中实现XY图数据的生成,然后投射到HMI中进行保存截图处理等。

现在我们就可以把程序分成这样12部分:

1.数据的初始化

2.数字信号处理

3.模拟信号处理

4.程序的主流程

5.程序的子流程

6.整机复位流程

7.程序互锁部分的设置(第一优先级)

8.调试模式

9.报警区的设定(第二优先级)

10.数据转换计算处理的部分

11.其他程序

12.数据采集与追溯
在简单梯形图中,这12部分程序都是按照顺序写在一起的。现在新款的PLC也可以将这12个分区做成同步工作的12个主程序或者子程序。我们按照1-12部分的流程写程序,思路就会非常清晰,逻辑流程写出来也会非常简单。


在接下来的文章中,我将分别对以下内容,依次进行详解:1.程序注释和文档化。2.程序12部分的细节与易错点处理。3.子流程与主流程的反馈机制,复杂工况的处理与优化,流程如何写更加易于调试。4.程序的模块化与复用性。5.指令无法满足使用需求的时候,应该如何在有限的基础上满足我们的使用要求。(例如科学计数法,程序循环,PID算法等等。)6.数据采集与追溯。7.HMI交互设计与优化。

往期文章:

PLC选型指南:国产板式PLC和PLC一体机的选型

中达优控一体机中,模拟量数据的转换方法

我认为最好用的傻瓜型Modbus调试软件

FX2N及FX3U的PLC系统中,modbus通讯协议的详细设置方法

三菱FX3U型PLC采用FX3U-485-ADP-MB与ABB变频器进行modbus-rtu通讯及FX3U-4AD模块的数据读取

FX3U-485-ADP-MB模块的参数设置

三菱FX系列PLC中,对于浮点数的科学计数法显示实现

科幻小说中的常见概念,FX系列PLC中双16进制数,占用2个寄存器,转10进制数显示的简便方法