1. 整体设计与思路拆解别看气缸小程序架构才是真功夫做自动化设备这么多年我越来越觉得一个道理越是看似简单的东西越容易在程序上翻车。就拿标题里这个“气缸、气缸、气缸”来说很多刚入行的朋友觉得气缸嘛不就是电磁阀一通一断伸出缩回就完事了等你真正接手一台有三个、五个甚至十几个气缸的设备时你会发现难的根本不是“怎么让气缸动”而是“怎么让气缸在正确的时机、用正确的方式、安安稳稳地动”。整套程序的灵魂不在某一个气缸的控制逻辑里而在顶层架构。我把这类气动设备的PLC程序拆成几个固定的“功能块”主程序Main、初始化程序、手动程序、自动程序、复位程序、气缸报警处理、模式切换逻辑、急停程序。这八个部分缺一不可而且它们之间的优先级和调用顺序直接决定这台设备是“稳定运行的设备”还是“天天出幺蛾子的半成品”。为什么要这么拆我举个最典型的例子如果咱们不单独写初始化程序设备一上电输出模块的默认状态如果是“通”那气缸“唰”一下就弹出去了。操作工正在那边接线调试手还在治具里呢后果不堪设想。所以上电瞬间必须做初始化强制所有输出进入安全状态。再比如“单环”这个热词其实就是“单周循环”和“连续循环”的切换。单次动作做完之后停下来等人工放料还是自动循环不停机这两种模式如果混在一个程序里嵌套判断能把人写晕而且非常容易出逻辑漏洞。把它们拆开用“模式切换”的逻辑去统一调度程序就清爽得多。再说个实际项目——我上个月刚调完的一台三气缸压接设备。三个气缸分别负责“夹紧”、“送料”、“压接”。如果程序写得不好容易出现气缸A还没到位气缸B已经冲出去了直接撞坏治具。所以顶层架构必须是一个“状态机”的思路明确的初始化状态、待机状态、运行状态、报警状态、急停状态。程序在任何时候只处于其中一个状态气缸的动作严格受当前状态约束。这样无论你乱按什么按钮气缸都不会做出意料之外的动作。所以这一章我想先给各位定个调气缸程序不是在写“怎么动”而是在写“什么时候允许动”。下面每个章节我都围绕这个核心思路展开把顶层架构里面每一个模块掰开揉碎。2. 核心细节解析与实操要点磁性开关、报警逻辑与手自动互锁2.1 别把磁性开关不当回事到位信号的可靠采集在气缸控制这个圈子里我们默认用**磁性开关磁感应传感器**来检测气缸是否到位。原理很简单气缸活塞上自带磁环磁性开关安装在缸筒外侧活塞运动到开关位置时磁环触发开关导通PLC就收到了一个到位信号。但这里头有一个非常关键、而且新手特别容易忽略的点磁性开关的信号是“到位”的唯一依据接线和滤波设置决定了整个报警逻辑的可靠性。我在调试现场最常见的问题就是磁性开关松开时到位信号反复抖动。气缸动作到位后活塞撞在端盖上产生轻微反弹磁性开关在临界点反复通断PLC一会儿收到信号一会儿又丢失信号。自动程序跑着跑着突然报“气缸未到位报警”停下来一查气缸明明到位了。这种问题能把调试人员逼疯。解决办法有两个层面。第一接线尽量采用NPN三线式接法PLC输入点拉一个公共端信号线接输入端确保屏蔽层单端接地。第二在PLC的硬件配置里给输入点加上数字滤波时间一般设5ms到10ms。我实际测试下来10ms的滤波能过滤掉大部分机械振动引起的抖动信号。再有一个是磁性开关本身的“记忆环”调整。拿到一个新气缸不要想当然地把磁性开关装在缸筒中间而是要装在工作时活塞实际到位的位置。怎么找先手动给电磁阀通电让气缸走到底然后用螺丝刀轻轻移动磁性开关看到PLC输入点亮起之后再往回多拧半圈锁死。注意锁死之前一定要把开关推到刚好触发的位置不要留太大余量不然气缸行程有微小偏差时这个开关可能就触发不了了这会成为后续“气缸报警”的一大隐患。提示磁环老化、气缸活塞密封圈磨损都会导致磁性开关触发距离变短。如果设备跑了一两年之后频繁报警优先检查磁性开关的安装位置和灵敏度不要一上来就改程序。2.2 气缸报警逻辑超时怎么算报警之后怎么复位“气缸报警”这四个字在很多设备上就是个简单的“超时报警”。什么意思程序给了气缸一个“前进”指令然后在规定时间内没有收到前进到位信号就判定这台气缸动作超时设备停机报警。这个超时时间怎么设太短容易误报太长故障扩大化。我一般按“气缸动作时间缓冲余量”来算。比如一个普通气缸从电磁阀得电到完全伸出需要0.8秒那超时时间就设为1.5到2秒具体看实际测试值。永远不要拍脑袋设一个5秒那真的出故障的时候设备已经撞得稀烂了。报警之后怎么办这是很多程序写得粗糙的地方。报警了屏幕弹出来“气缸1前进超时”然后呢如果程序只是让输出断电气缸停在一半操作工把故障排除了直接复位气缸“嗖”一下又冲出去了。所以报警处理必须搭配一套完整的复位程序。报警触发后程序要强制切断当前动作输出并把设备状态切换到“报警待复位”。操作工确认故障并解除报警后需要手动控制气缸回到初始位或者按一个“复位按钮”让程序按顺序把气缸全部退回安全位置然后才能重新启动自动程序。另外气缸报警不能只盯着“动作超时”。我强烈建议给每个气缸装磁性开关之外的辅助定位或者至少加一个气源压力检测开关。气源没气或者气压不足时气缸死活推不动程序却还在傻等着最后报个“超时”查了半天才发现是气压表掉到0.2MPa了。把气压检测串进报警系统里比什么灵敏排查都管用。2.3 手动程序与自动程序的互锁逻辑安全阀不能少手动程序和自动程序听起来简单一个拿来调试一个拿来生产。但这两个程序放在同一套CPU里互相之间必须有严格的互锁。否则操作工误操作模式选择开关在自动运行状态下切到手动狂按手动按钮气缸可能还在执行自动流程这时候你按下去一个“气缸B前进”两路信号同时控制同一个输出轻则气缸乱动重则损坏治具。我的标准做法是模式切换用沿触发不要用电平触发。旋钮打到“手动”档的那一瞬间程序只执行一次切换动作并同时清除自动程序里所有中间变量和步进标志位让自动流程完全复位。自动程序中不响应手动按钮。自动模式下即使手动按钮被误触发程序侧也要做连锁直接忽略手动输入信号。手动模式下不运行自动步进器。自动流程的主控继电器/状态位在手动模式下强行置0从根本上断了自动程序运行的条件。具体到气缸的驱动输出我一般把每个气缸的输出线圈在PLC程序里拆成三个并联/串联条件模式条件、动作命令、联锁条件。比如气缸A的前进输出Y0必须满足“当前处于手动模式”AND“手动前进按钮被按下”AND“没有急停报警”才能置ON。自动模式同理必须满足“自动模式”AND“步进器在第3步”AND“前置信号都到位”AND“没有报警”。这样即使程序某处逻辑有漏洞输出侧的条件也能挡住非法动作。3. 实操过程与核心环节实现Main程序、初始化、手动、自动、复位、急停逐个击破3.1 主程序Main把调度逻辑藏起来让程序像翻书一样清晰有些朋友喜欢把整个设备的所有逻辑都堆在OB1主程序里写出来几百行看着就头大。主程序应该只做调度把功能块按顺序调用不要掺和任何具体的气缸动作逻辑。我带徒弟的时候经常说Main程序是一个“导演”它只管安排演员什么时候上场自己绝对不演戏。一个标准的气动设备Main框架我一般这样写CALL 急停检测模块 CALL 初始化模块(仅在首次扫描时执行) CALL 报警处理模块 CALL 模式切换模块 // 根据旋钮/触摸屏按钮得到当前模式 IF 当前模式 手动 THEN CALL 手动控制模块 CALL 复位模块(手动复位时执行) ELSIF 当前模式 自动 THEN CALL 自动控制模块(内部再带单环/连续切换) END_IF这个顺序是精心设计的。急停检测必须放在最前面因为它优先级最高任何模式下急停信号都是最高级别的触杀。其次是初始化只在设备上电后的第一个扫描周期执行把输出清零。然后是报警处理把所有的报警状态刷一遍再往下才是模式切换和具体控制。有人可能会问为什么要先初始化再做报警因为上电瞬间磁性开关还没来得及稳定P I O模块也要几毫秒的启动时间这时候读报警全是乱的。先把输出清零让系统进入安全状态等下一个扫描周期再开始处理报警和运行逻辑就稳得多了。3.2 初始化程序上电瞬间的“安全地毯”说句实话很多设备事故都是在开机瞬间发生的。电源一通所有输出线圈的初始状态不可控如果程序里没有初始化逻辑或者初始化逻辑有漏洞气缸随机弹出这是非常危险的。初始化程序有几个必须做的事用一个首次扫描标志位比如SM0.1或系统默认的First Scan位来触发初始化功能块不要用时间继电器也不要指望上电延时。为什么因为首次扫描位只在第一次扫描时为ON之后自动复位这正好符合“初始化只做一次”的需求。把所有气缸对应的输出点改成OFF状态。无论是双线圈还是单线圈电磁阀先把所有输出全部清零保证气缸不动作然后再根据初始状态需求对需要保持在“夹紧/压紧”位的气缸输出合适的信号如果有安全需求的话。把报警变量、步进器计数器、模式标志位全部复位。这一步很多人会漏掉。如果上次关机前自动程序正运行到第5步这次开机如果不清楚步进器状态程序直接从上一次的步进器状态继续跑气缸可能瞬间执行“第5步”的动作。所以初始化程序里必须把自动流程里的所有步序统统清零。我实际测试下来初始化程序写完之后要做的第一件事就是反复上电断电测试。把设备电源断开再合上观察气缸有没有任何抖动。如果初始化逻辑正确不管上电多少次气缸纹丝不动。3.3 手动程序为调试和维修留一条“后门”手动程序存在的价值一个是设备安装调试阶段需要逐个气缸确认动作方向是否正确、治具运动是否顺畅另一个是设备运行中如果出现卡料操作工需要手动操作某个气缸把料退出来。手动控制的每条气缸逻辑我建议都做成“按钮按着就动松开就停”的点动模式。不要用自锁模式自锁模式下操作工按一下气缸A前进气缸A就会一直保持前进直到他再按另一个按钮这在调试时非常危险因为气缸可能会猛烈撞击限位。点动模式更安全也和后面报警复位时的操作习惯保持一致。以三气缸设备为例手动程序大概长这样操作输入点输出点PLC程序条件气缸A夹紧前进X0按钮Y0当前模式手动 AND X0ON AND 无急停 AND 无报警气缸A松开后退X1按钮Y1当前模式手动 AND X1ON AND 无急停 AND 无报警气缸B送料前进X2按钮Y2当前模式手动 AND X2ON AND 无急停 AND 无报警气缸B退料后退X3按钮Y3当前模式手动 AND X3ON AND 无急停 AND 无报警气缸C压接前进X4按钮Y4当前模式手动 AND X4ON AND 无急停 AND 无报警气缸C退回后退X5按钮Y5当前模式手动 AND X5ON AND 无急停 AND 无报警注意看我在输出条件里串了“无急停”和“无报警”这两个常闭条件。哪怕你在手动模式下只要急停被拍下或者有气缸超时报警所有手动输出的条件立刻断开气缸失去动力停止动作。这就是“急停优先”原则在手动程序里的体现。3.4 自动程序与单环/连续切换用步进器代替一锅粥自动程序是整个气动控制系统的核心。我最推崇的写法是步进器顺序控制把整个设备动作拆成若干个清晰的步骤每一步只做一件事做完之后激活下一步同时关闭当前步。还是用三气缸设备举例自动流程如下步骤1初始待机等启动按钮被按下。同时确认气缸A在“松开”位、气缸B在“退回”位、气缸C在“退回”位。步骤2置位Y0气缸A夹紧。等待X10气缸A前进到位信号为ON且没有气缸报警。步骤3置位Y2气缸B送料。等待X12气缸B前进到位信号为ON。步骤4置位Y4气缸C压接。等待X14气缸C前进到位信号为ON再延时0.5秒保压。步骤5复位Y5气缸C退回。等待X15气缸C后退到位信号为ON。步骤6复位Y3气缸B退回。等待X13气缸B后退到位信号为ON。步骤7复位Y1气缸A松开。等待X11气缸A后退到位信号为ON。步骤8判断是单环还是连续。如果是“单环”回到步骤1等待人工再次按启动。如果是“连续”直接跳回步骤2循环动作。这个步进器的实现我在PLC里一般用一组内部继电器M0.0、M0.1、M0.2……来代表当前步骤。每一段的转移条件都是“前一步的步进器位ON”AND“当前动作到位信号ON”AND“无急停”AND“无报警”。步进器转移时使用沿触发或者扫描周期的自然切换。实现逻辑我写个伪代码给大家参考以其中两步为例// 步骤2 - 步骤3 M0.2 (M0.1 AND X10 AND 无急停 AND 无报警) // 步骤3 - 步骤4 M0.3 (M0.2 AND X12 AND 无急停 AND 无报警)这里有个细节步进器转移条件和步进器输出之间我建议加一个“切换缓冲”。如果M0.1和M0.2直接用一个线圈串联当X10到位的一瞬间M0.2导通M0.1断开看起来没问题但实际上由于PLC扫描机制M0.1断开后Y0输出断电气缸A松开一点触发X10变为OFFM0.2又断开了——这就是传说中的“步进器抖动”。解决方法是设置一个“步进器使能”位只有M0.1和M0.2都成稳定状态后才输出Y0。或者干脆在转移条件里加入延时0.1秒让信号稳定。再说“单环”与“连续”。单环模式适合需要人工上下料的半自动设备连续模式适合全自动流水线。在程序里我只用一个内部继电器M_SINGLE_CYCLE来区分。在步骤8转移时// 步骤8 判断跳转 IF M_SINGLE_CYCLE ON THEN 跳转条件 步8完成信号 AND 人工再次按下启动按钮 ELSE 跳转条件 步8完成信号 END_IF这样连续模式下设备自己无缝衔接单环模式下每做完一个循环都要人等一次启动信号。这个设计非常灵活用户只需要在触摸屏上点一下单环/连续切换按钮程序底层不用动。3.5 复位程序与急停程序保命的设计急停程序是整套程序里优先级最高、也是最不能犹豫的部分。我强调的是硬接线软逻辑双保险。硬接线急停按钮的常闭触点直接串接在电磁阀的电源回路上。按下急停阀岛供电被硬切断不管PLC程序什么状态气缸都不可能再动。这一层是整个安全设计的基石没有这层别谈什么程序保护。软逻辑急停按钮的常开触点接到PLC输入点程序里检测到急停信号后除了正常执行模式切换、清除步进器还要切断所有输出线圈的使能位并触发一个“急停状态”标志让所有自动和手动指令都失效。急停恢复之后情况就复杂了。如果按完急停等操作工松开急停按钮程序直接返回自动运行那万一设备在急停瞬间正运行到气缸B送料的位置恢复后气缸B继续送料可能撞到人。所以急停恢复之后不能直接回到自动必须先进入复位程序。复位程序的目标非常明确让所有气缸按安全顺序退回到初始位置。具体逻辑复位程序开始时强制模式切换到“复位模式”。程序按顺序检查每个气缸当前的位置如果气缸A在前进位则让A后退直到后退到位。然后检查气缸B如果B在前进位让B后退。然后检查气缸C同理。所有气缸都回到初始安全位置后复位程序认为“复位完成”置位“可以重新启动”标志。此时操作工才能把模式切回自动按启动按钮开始生产。注意复位顺序非常重要。先退哪个后退哪个要根据设备机械结构排定。如果是像我们这种“夹紧A - 送料B - 压接C”的压机结构复位时必须逆序来先退C压接再退B送料最后退A夹紧。如果顺序反了先松开夹紧气缸治具里的工件还没被压接气缸压住直接飞出来严重工伤事故。4. 常见问题与排查技巧实录气缸报警和那些年踩过的坑做气缸控制这一行调试现场永远不缺“惊喜”。我把这几年遇到的高频问题整理成下面这张表每一个都是真实踩过坑之后得来的经验现象可能原因排查步骤与解决办法自动模式跑着跑着突然报“气缸A前进超时”磁性开关位置偏移/损坏或气缸活塞卡滞先手动操作气缸A看能不能灵活动作。如果可以检查磁性开关是否在正确位置用万用表量开关通断是否正常。程序刚上电气缸就“哆嗦”一下初始化逻辑缺失或输出模块上电瞬间乱输出检查Main程序里是否调用了初始化模块确认首次扫描复位位是否有效。必要时在硬接线回路增加输出电源延时接触器。急停恢复后按启动没反应复位程序没完成安全启动条件不满足查看触摸屏报警状态确认“复位完成”标志是否置ON。如果复位程序一直不完成说明某个气缸的复位信号没来顺着信号找。手动操作时气缸动作正常但自动程序不动作手动/自动切换条件没满足或步进器起始条件没满足检查“当前模式”这个内部变量是不是正确切换。再看自动程序步进器第1步的启动信号是不是有。步进器顺序正常但气缸动作有明显延迟程序扫描周期太长或输出指令之间插了过多没有必要的延时尽量减少主程序里的无条件延时指令或者把延时放到步进器内部只在需要等待时启用。再列几个我自己调气缸时总结的“独家避坑小笔记”磁性开关的灯亮了不代表信号必然进PLC。信号要进PLC中间要经过输入模块还要看公共端有没有接对。我见过不止一次灯亮着PLC就是读不到信号排查到最后发现是公共端那根线松了。双线圈电磁阀和单线圈电磁阀程序写法完全不同。双线圈用两个输出点分别控制“前进”和“后退”程序里要防止两个输出同时为ON否则电磁阀线圈会烧毁或者气缸停在中间。单线圈用一个输出点控制得电前进/失电后退程序在切换方向时必须先断电再反向其实就是等一两个扫描周期。气缸节流阀开得太大气缸动作会“duang”一下撞到位磁性开关容易被震得误动作。气缸动作调得“润”一点既保护机械结构也让程序层面少很多杂讯信号。报警信息里一定把“哪个气缸”和“什么故障”显示清楚不要只给一个“设备故障”的报警码。维修工看到报警三秒钟能定位到气缸和花半小时翻图纸找故障点对产线停线时间的影响是巨大的。最后再分享一个单独的小技巧。做模式切换的时候不要直接拿旋钮开关的常开触点去执行“切到自动”这个动作因为旋钮切换瞬间可能会有抖动导致程序里的模式位反复跳变。我一般用上升沿/下降沿检测来做模式切换。比如// 模式切换使用沿触发 IF 旋钮_X10 上升沿 THEN 当前模式 : 手动模式 END_IF IF 旋钮_X11 上升沿 THEN 当前模式 : 自动模式 END_IF这样不管旋钮怎么抖程序里只会响应一次切换。类似的技巧也适用于启动按钮、复位按钮。掌握了这些“边缘触发”的小细节你的程序稳定性能瞬间提升一个档次。做气缸控制这么多年我的感受是气缸本身很简单简单到就像一颗螺丝钉。但一台设备里几十颗螺丝钉如何协同工作才是真正考验工程师的地方。把主程序、初始化、手动、自动、复位、报警、急停这些模块理顺像写说明书一样一步步拆解清楚你手里这台设备就不再是“可能出故障”的设备而是“出了故障也能用五分钟定位并解决”的可靠伙伴。希望这篇文章里的一些思路和踩坑经验能帮你在下次面对“气缸、气缸、气缸”的时候多几分从容。