写PLC程序,新手容易忽略一个问题:为何手动模式和自动模式不能混写?这里先给出答案:手动模式和自动模式的逻辑边界必须清晰,PLC程序中手动按机构写,自动按流程写;手动和自动只提请求,输出统一管理;模式切换必须处理好。
在现场有部分设备,PLC程序单独看没什么问题,手动能动。 自动也能跑,但一到调试后期,问题就开始出现:
①手动一按,自动步序乱了;
②自动暂停后切手动,设备状态丢了;
③报警复位后重新启动,机构突然动作;
④同一个输出点,手动也在控制,自动也在控制;
⑤最后出了问题,根本不知道是谁把输出打出去的。
这类问题,表面看是某个条件没写好,但本质上是一开始就没把手动模式和自动模式的逻辑边界分清楚。PLC程序不是能让设备动起来就算写完。真正到现场考验PLC程序的,往往是手动、自动、暂停、报警、复位、急停这些状态交叉的时候。

1、手动和自动不是一套逻辑
新手刚开始写PLC程序时,会把手动和自动理解成两个按钮:手动按钮和自动按钮,但现场做久了就知道,这两个模式的目的完全不一样。
(1)手动模式的核心是什么?
手动模式主要用于:
①调试;
②检修;
③点动;
④单动作验证;
⑤异常处理后的人工干预。
它关注的是单个机构能不能动作。比如:
①气缸伸出/缩回;
②电机正转/反转;
③伺服点动/回零;
④夹爪打开/关闭;
⑤真空吸附/破真空。
(2)自动模式的核心是什么?
自动模式主要用于设备按照工艺流程连续运行。它关注的是整台设备的动作顺序和状态衔接。比如:
①检查初始状态;
②上料;
③定位;
④夹紧;
⑤加工;
⑥检测;
⑦下料;
⑧循环完成。
所以,手动和自动的写法不能混在一起。一句话记住:手动按机构写,自动按流程写;手动不要塞进自动流程里。 自动也不要直接调用手动按钮逻辑;这一步分不清,后面程序一定越改越乱。
2、危险的写法:PLC程序中手动和自动都直接控制输出
现场常见的一种写法是这样的:
◆手动按钮→直接控制Y0
◆自动步骤→也控制Y0
◆报警复位→又去控制Y0
比如一个压紧气缸,手动画面上有“压紧/松开”按钮。 自动流程里也有“压紧/松开”动作。
如果手动按钮直接写输出,自动流程也直接写输出,短期看设备确实能动,但后期排查时就很麻烦。你会遇到这些问题:
①Y0到底是谁给出来的?
②自动流程没到这一步,为什么气缸动作了?
③手动按钮松开后,为什么输出还保持?
④报警复位后,为什么机构状态乱了?
⑤程序改了几次后,为什么输出逻辑越来越看不懂?
尤其是非标设备,后期经常会改需求、加动作、加互锁。一旦多个地方都在抢同一个输出点,程序很快就会变成一团乱麻。
现场经验:一个输出点如果在多个地方被直接赋值,后期查问题一定很痛苦。PLC程序能跑,不代表结构合理。
3、推荐写法:PLC程序中手动和自动只提请求,输出统一管理
比较稳的写法是:手动请求→自动请求→安全条件→机构互锁→输出汇总→物理输出。也就是说:手动逻辑和自动逻辑不要直接控制物理输出点,它们只负责产生动作请求,真正能不能动作,要交给后面的安全条件、机构互锁和输出汇总来判断。
以压紧气缸为例,可以这样拆:
Manual_ClampExtendReq:手动压紧请求
Manual_ClampRetractReq:手动松开请求
Auto_ClampExtendReq:自动压紧请求
Auto_ClampRetractReq:自动松开请求
ClampExtendAllow:允许压紧
ClampRetractAllow:允许松开
Y_ClampExtend:压紧电磁阀输出
Y_ClampRetract:松开电磁阀输出
最终输出统一处理:
压紧输出=(手动压紧请求OR自动压紧请求) AND 允许压紧
松开输出=(手动松开请求OR自动松开请求) AND 允许松开
这样写的好处很明显。
现场查问题时,路径非常清楚:
◆按钮有没有请求?
◆自动步骤有没有请求?
◆安全条件是否满足?
◆互锁条件有没有挡住?
◆最终输出有没有给出去?
◆调试现场不怕问题多,怕的是没有路径可查。

4、手动模式不是“想动就动”,互锁不能省
新手以为手动模式就是调试用的,所以按钮按下就应该动作,这个想法很危险。手动模式可以比自动模式灵活,但绝不能绕过安全和机构互锁。比如:
①气缸A伸出前,气缸B必须先退回;
②伺服移动前,安全门必须关闭;
③夹爪松开前,要确认产品不会掉落;
④电机反转前,正转输出必须断开;
⑤机构回原点前,不能处在干涉位置。
手动模式至少要保留三类条件:
第一类:安全条件
比如:急停;安全门;光栅;安全继电器;安全PLC状态。
这些条件不能因为当前是手动模式就被绕过。
第二类:机构互锁
比如:顶升没下降,横移不能动;压紧没松开,产品不能取走;夹爪未打开,下料机构不能动作;伺服未到安全位,气缸不能伸出。
这些都属于机构之间的互锁关系。
第三类:边界条件
比如:原点信号;到位信号;前后限位;伺服软限位;运动范围限制。
这些条件是为了防止机构跑过头、撞机构、误动作。手动不是无条件动作。手动是在安全允许范围内的单机构控制。很多现场事故,不是自动流程出问题,而是手动调试时把设备状态打乱了。
5、自动模式要按步骤写,不要堆一堆条件
PLC程序中自动模式最怕写成一大串条件。比如:启动按钮按下;AND 气缸A到位;AND 气缸B退回;AND 伺服完成;AND 产品有料;AND 检测OK……这种写法设备可能也能跑,但有几个问题:
①不好调试;
②不好查故障;
③不好显示当前状态;
④不好加异常处理;
⑤后期改需求很麻烦。
非标设备的自动流程,建议用步序方式写。比如:
Step 0:待机
Step 10:检查初始状态
Step 20:上料气缸伸出
Step 30:等待上料到位
Step 40:夹紧产品
Step 50:伺服移动到加工位
Step 60:执行加工
Step 70:检测结果
Step 80:下料
Step 90:循环完成
每一步只做一件事;每一步都要有:进入条件;执行动作;完成条件;超时报警;异常处理。这样设备卡在哪一步,触摸屏上一显示步号,现场马上就能判断问题大概在哪里。
自动模式不是条件堆得越多越安全。真正稳定的自动流程,是步骤清楚、状态明确、异常可追踪。
6、模式切换,是最容易出问题的地方
手动和自动分开写以后,还有一个关键点:模式切换必须处理好。
很多设备出问题,不是在正常自动循环时,而是在下面这些场景:
①自动运行中切手动;
②手动调整后切自动;
③报警复位后继续运行;
④急停恢复后重新启动;
⑤暂停后直接继续。
这些状态交叉时,最容易暴露程序架构问题:
第一种:自动运行中直接切手动
设备自动流程还停在某一步。 操作员切到手动,把某个机构移动了;再切回自动时,程序还以为设备状态没变。这时候下一步动作就可能出问题。
第二种:手动调整后直接切自动
手动状态下,机构位置可能已经变了。如果不重新检查初始状态,自动流程直接启动,很容易误动作。
第三种:报警复位后继续原流程
有些报警发生后,设备状态已经不可信了。这时候只清报警,不重置步序,是很危险的。
【干货】正确的处理方式是:自动运行中,不允许随便切手动。要先停止自动流程,确认设备进入安全状态,再允许手动操作;手动切自动时,也不能直接启动,必须重新检查自动启动条件:
①急停正常;
②安全门正常;
③没有未清除报警;
④关键气缸在初始位;
⑤伺服已经回零;
⑥工件状态明确;
⑦当前步序回到待机位。
如果设备状态不明确,就不要让它进入自动。
7、现场案例:程序能跑,但状态乱了
一台压装设备在调试过程中暴露的问题:手动画面可以单独控制压紧气缸,自动流程里也会控制同一个气缸。刚开始调试没问题,手动能压紧。 自动也能循环;但问题出在自动暂停以后,操作员暂停设备,切到手动,把夹紧气缸松开,调整了一下产品位置,然后又切回自动,直接点继续;这时候PLC程序还停在“产品已夹紧”的步骤,程序默认夹紧状态仍然成立;下一步伺服直接移动,但产品位置已经变了,差点撞到机构。
后来资深工程师做了三件事:
①手动请求和自动请求全部拆开;
②所有输出统一经过互锁和状态判断;
③手动切回自动时,必须重新检查初始状态,不允许直接续跑。
问题才彻底解决。这个案例说明一件事:程序能跑,不代表架构是安全的。
8、推荐一套清晰的PLC程序结构
如果是非标设备,昌晖仪表建议PLC程序至少按下面几个模块拆:
①输入信号处理;
②安全状态处理;
③报警处理;
④模式管理;
⑤手动控制;
⑥自动步序;
⑦机构互锁;
⑧输出汇总;
⑨HMI数据交互;
⑩通讯与记录。
其中最关键的是这三层:
①手动控制层
手动控制层负责单机构动作请求。比如:气缸伸出请求;气缸缩回请求;电机点动请求;伺服回零请求。
②自动步序层
自动步序层负责整机流程推进。比如:当前执行到哪一步;这一步要做什么动作;什么条件下进入下一步;超时后报什么警。
③输出汇总层
输出汇总层负责统一处理最终输出。也就是:手动/自动→动作请求→安全互锁→统一输出
这个结构看起来比直接写输出麻烦一点,但项目越复杂,越能体现价值。尤其是后期客户改需求、现场加动作、设备出现偶发故障时,结构清楚的程序非常好查。
9、新手最容易犯的5个错误
最后总结一下,PLC程序的手动和自动逻辑里,新手最容易犯这几个错误:
①手动按钮直接控制物理输出点
短期方便,后期难查。
②自动流程里到处写同一个输出
输出来源不清楚,程序越改越乱。
③手动模式不加安全互锁
调试时看似方便,实际很容易留下安全隐患。
④自动暂停后不处理当前步序
设备状态变了,程序状态没变,很容易误动作。
⑤手动切自动时不重新确认设备状态
这是现场非常常见的坑。这些错误一开始不一定明显,设备简单时,可能也能正常跑,但非标设备一旦动作多、工位多、状态多,问题就会集中爆发。
10、写在最后
PLC程序不是能动就行,真正考验程序架构的,不是正常自动循环,而是各种异常状态:手动、自动、暂停、继续、报警、复位、急停、重新启动。程序架构清楚,现场就好调。 架构一开始混乱,后面每改一次需求,都是在埋雷。
这篇文章的核心,其实就四句话:手动按机构写。自动按流程写。手动和自动只提请求,不直接抢输出。最终输出统一汇总,安全互锁永远不能省。这套思路做好了,PLC程序不一定写得花哨,但一定更稳定、更好调,也更适合现场长期维护。
相关阅读
◆分享八个电动机常用PLC应用电路
◆PID调节器的PID与PLC的PID异同及特点
◆PLC中的I0.0、I0.1、M0.0、M0.1、Q0.1、Q0.2
