首页 / 资讯中心 / 文章详情

PLC工程师实战错题本:90条现场踩坑经验与避坑指南

PLC工程师实战错题本:90条现场踩坑经验与避坑指南 ★ FEATURED ARTICLE
1. 为什么入行1-3年的PLC工程师最需要一份“实战错题本”干了十几年工控带过的徒弟少说也有二十来个。我发现一个特别有意思的现象刚入行半年的新人反而敢问问题因为他们知道自己不会干了五六年往上的老手遇到问题也能凭经验摸出个大概。最尴尬的就是入行1到3年这个阶段——基础指令都会了梯形图也能写但一到现场就各种翻车而且翻车之后还不好意思问因为觉得自己“应该会”。这个阶段的人最缺的其实不是知识而是一份踩坑记录。学校里教的是“电机正反转怎么接线”但现场遇到的是“为什么这个光电开关在下午三点之后就开始误动作”。前者是知识后者是经验。知识可以看书经验只能靠踩坑或者靠别人把坑指给你看。我自己刚入行那会儿在一个包装线上调伺服位置怎么都对不上折腾了整整两天最后发现是机械联轴器的键槽装反了。这种事没人会写在手册里但每个老工程师都能给你讲出一堆类似的。所以我把这些年积累的、带徒弟过程中反复被问到的、以及自己在现场摔过的跟头整理成了这90条实战经验。它们不按教科书章节排列而是按你真正会遇到问题的顺序来组织——从选型、接线、编程、调试到维护一条一条说清楚。这篇文章会挑其中最有代表性的几类问题展开讲不是简单罗列90条就完事而是把每条经验背后的“为什么”讲透。你看完之后至少能在下次遇到类似情况时脑子里能蹦出一句“哦这个坑有人踩过我知道大概往哪个方向查。”2. 硬件选型与接线阶段那些手册上不会写的判断依据2.1 输入输出点数的“隐藏消耗”怎么算新手最常犯的错误就是按设备实际需要的I/O点数去选PLC比如算出来需要14个输入、10个输出就选一个16入16出的型号。结果程序写到一半发现点数不够了因为很多“隐藏消耗”在前期根本想不到。我自己的经验是实际需要的I/O点数乘以1.5再往上取整到最近的常见型号。为什么是1.5因为你要预留至少10%的备用点给后期改造还要考虑一些“看起来不需要但实际会占点”的情况。比如一个气缸你以为只需要一个输出点控制电磁阀但如果要检测气缸的两个到位状态那就还要占两个输入点。再比如很多安全回路、急停回路、复位按钮虽然不参与逻辑控制但往往也要接入PLC或者至少占用模块通道。还有一个特别容易被忽略的高速计数器和脉冲输出会占用普通I/O的物理通道。比如某款PLC标称有8个输出点但其中2个是晶体管输出用于脉冲如果你用了这两个点做PTO脉冲串输出那它们就不能再当普通输出用了。选型的时候一定要看清楚模块的通道分配表别只看总数。提示如果项目有扩展需求优先选带扩展接口的CPU而不是一开始就买点数很大的单体机。扩展模块可以后期加单体机点数不够就只能换整机成本差好几倍。2.2 传感器选型NPN和PNP到底怎么选这个问题几乎每个新手都问过。简单说NPN输出的是低电平有效漏型PNP输出的是高电平有效源型。但实际选型的时候不是看你喜欢哪个而是看你的PLC输入模块支持哪种接法。大部分日系PLC比如三菱、欧姆龙的输入模块是漏型输入也就是公共端接24V正极输入点接传感器信号线传感器导通时把信号线拉到0V。这种接法配NPN传感器最方便。欧系PLC比如西门子很多是源型输入公共端接0V输入点接传感器信号线传感器导通时输出24V。这种配PNP传感器。但现实情况往往更复杂一个项目里可能既有NPN又有PNP的传感器因为不同厂家的标准不一样。这时候你有两个选择一是选支持源型/漏型切换的输入模块二是加中间继电器转换。我个人的建议是尽量统一成一种类型因为混用之后排查故障会非常痛苦——你永远记不清哪个传感器是哪种接法。还有一个坑两线制传感器和PLC输入模块的漏电流问题。两线制传感器在关断状态下仍然有微弱的漏电流通过如果这个漏电流足够大PLC的输入点可能会误判为ON。特别是当输入模块的导通阈值比较低的时候。解决办法是在输入点并联一个泄放电阻或者直接选用三线制传感器。这个坑我在一个水处理项目上踩过当时液位开关明明没动作PLC输入灯却微微亮着查了半天才反应过来是漏电流。2.3 电源容量别让PLC“饿着肚子干活”PLC的电源容量计算很多人只算了CPU和扩展模块的背板电流消耗忘了算外部负载的电流。比如输出模块驱动继电器线圈每个线圈可能要几十毫安如果同时有8个输出点动作那就是几百毫安。再加上传感器供电、触摸屏供电很容易超出开关电源的额定容量。我的做法是把所有需要24V供电的设备列一张表标出每个设备的额定电流和同时工作的最大数量然后总和乘以1.3的余量。开关电源选型的时候还要注意它的额定电流是在什么温度下测的。很多电源标称5A但那是在25度环境下的数据如果电柜内温度到了50度实际能输出的电流可能只有3.5A左右。所以电柜空间允许的话电源选大一号没坏处。另外PLC的24V输出如果有的话最好不要用来驱动外部负载。那个输出通常只有几百毫安的容量是给内部电路或者少量传感器用的。你拿它去驱动一堆继电器轻则电源保护重则烧掉CPU内部的电源模块。我见过一个案例有人用PLC自带的24V输出接了六个中间继电器运行了三个月后CPU直接罢工返厂维修说是电源模块烧了。3. 编程逻辑中的“想当然”陷阱从梯形图到实际动作的鸿沟3.1 扫描周期导致的“幽灵动作”PLC是循环扫描执行的一个扫描周期包括输入采样、程序执行、输出刷新三个阶段。新手写程序的时候往往默认“输入变了输出马上变”但实际不是这样的。输入信号的变化要等到下一个扫描周期的输入采样阶段才能被读到输出信号的变化也要等到输出刷新阶段才会真正送到端子。这个特性在大多数情况下没问题因为扫描周期通常只有几毫秒到几十毫秒。但在一些特殊场景下会出大问题。比如你用PLC做一个高速计数或者位置捕捉如果信号持续时间比扫描周期还短那这个信号可能完全被漏掉。再比如你在程序里写了“如果X0接通则Y0接通如果Y0接通则X1复位”这种逻辑在扫描周期的影响下可能会产生你意想不到的时序。我遇到过一个典型案例一个分拣系统用光电开关检测物品通过然后气缸推料。程序逻辑很简单光电开关接通就触发气缸动作。但实际运行的时候偶尔会漏推。查了半天发现光电开关的输出信号只持续了不到5毫秒而PLC的扫描周期在某些情况下会超过10毫秒因为程序里有一段复杂的浮点运算。信号在输入采样阶段没被读到自然就不会触发动作。解决办法是把光电开关的信号先经过一个高速计数模块或者用中断输入而不是走普通输入点。注意如果你的程序里有大量浮点运算、PID运算或者通信处理扫描周期会明显变长。这时候要特别小心那些“一闪而过”的信号。3.2 定时器的“累计误差”和“刷新机制”PLC的定时器不是硬件定时器而是靠扫描周期累加计时的。这意味着定时器的实际定时时间会略大于设定时间因为每个扫描周期都会产生一点误差。对于一般的延时控制这点误差无所谓但如果你用定时器做精确的时间控制比如每100毫秒发一个脉冲那累计误差就会越来越明显。更隐蔽的问题是定时器的刷新机制。不同品牌的PLC定时器的刷新方式不一样。有的定时器在达到设定值后当前值会保持直到复位信号到来有的定时器在达到设定值后会自动复位重新开始计时。如果你不清楚用的是哪种程序逻辑就可能出错。我自己的习惯是对于需要精确时间控制的场合用系统时钟脉冲或者中断程序而不是普通定时器。比如西门子的OB35循环中断可以设置固定的中断周期不受扫描周期影响。三菱的PLC可以用特殊继电器比如M8013是1秒时钟脉冲来触发动作。这些方式比用定时器累加要可靠得多。还有一个新手常犯的错误在同一个程序里重复使用同一个定时器编号。比如在子程序里用了T0在主程序里也用了T0两个地方都在控制这个定时器结果就是谁最后执行谁说了算。这种bug特别难查因为你看主程序逻辑是对的看子程序逻辑也是对的但合在一起就是不对。解决办法是给每个子程序分配独立的定时器编号段比如子程序1用T0-T9子程序2用T10-T19。3.3 模拟量处理的“量程转换”到底怎么算模拟量输入模块读回来的原始值是一个整数比如0到27648西门子或者0到4000三菱。你需要把它转换成实际的物理量比如温度、压力、流量。这个转换公式看起来简单但实际写程序的时候有几个坑。第一个坑量程不是从零开始的。比如一个压力变送器量程是0到10bar输出4到20mA。对应的PLC原始值4mA对应的是5530西门子S7-1200的0-20mA量程20mA对应的是27648。所以转换公式不是简单的“原始值除以27648乘以10”而是要先减去4mA对应的偏移量。第二个坑过冲和欠量程的处理。如果传感器故障或者线路断了原始值可能低于5530或者高于27648。这时候如果不做处理转换出来的物理量就会是负数或者超大值可能导致误报警或者误动作。我的做法是在程序里加一段限幅逻辑如果原始值小于5530就按5530算如果大于27648就按27648算。同时输出一个故障标志位让上位机知道传感器可能有问题。第三个坑浮点数运算的精度问题。有些PLC在做浮点运算时会有精度损失特别是当你的转换公式里有除法的时候。比如你先除以27648再乘以10000和先乘以10000再除以27648结果可能不一样。一般来说先乘后除的精度更高因为除法会产生小数小数再参与后续运算会累积误差。4. 现场调试阶段那些让你怀疑人生的瞬间4.1 通信不上先查这五个地方PLC和触摸屏、变频器、伺服驱动器之间的通信问题是现场调试最耗时的环节之一。我总结了一个排查顺序按这个顺序走能解决80%的通信故障。第一查物理连接。网线水晶头有没有压好终端电阻有没有接通信线有没有和动力线走同一个线槽这些看起来是废话但我见过太多次因为网线水晶头没压好导致通信时断时续的案例。特别是Profinet或者EtherCAT这种以太网通信对线缆质量要求很高普通的网线在电磁干扰大的环境下根本扛不住。第二查站号。Modbus通信里每个从站必须有唯一的站号如果两个从站站号一样主站就不知道该听谁的。这个错误特别容易发生在复制粘贴配置的时候——你从站1的配置复制到站2忘了改站号。第三查波特率和数据格式。主站和从站的波特率、数据位、停止位、校验方式必须完全一致。我遇到过有人把波特率设成9600但从站是19200结果通信指示灯闪都不闪因为主站发的数据从站根本解析不了。第四查通信地址映射。Modbus的寄存器地址有几种表示方式有的文档写40001有的写0有的写1。如果你按40001去读写但实际设备用的是0基地址那就会偏移一个寄存器。这个坑几乎每个做Modbus的人都踩过。第五查数据字节序。32位数据在Modbus里传输的时候高低字的前后顺序不同厂家可能不一样。有的先发高字有的先发低字。如果字节序搞反了读回来的数据就是完全错误的值。比如浮点数1.0字节序反了可能变成-2.5之类的奇怪数字。提示调试通信的时候手边备一个USB转485/232的转换器和一个串口调试助手。直接看原始报文比在PLC程序里猜要快得多。4.2 伺服电机“嗡嗡”响但不转问题可能不在参数伺服调试是很多新手的噩梦。电机通电后嗡嗡响但不转或者转起来抖动厉害大多数人第一反应是去调增益参数。但根据我的经验至少一半的伺服问题不是参数问题而是机械或者接线问题。先查机械联轴器的顶丝有没有拧紧丝杠的预紧力是不是太大导轨的润滑是不是到位我遇到过一个案例伺服电机带一个丝杠空载的时候转得好好的一装上负载就嗡嗡响。查了半天发现是丝杠两端的轴承座不同心电机转起来之后丝杠别着劲伺服驱动器检测到转矩波动就报警了。再查接线伺服电机的动力线U、V、W有没有接错编码器的线有没有接反动力线和编码器线有没有屏蔽接地特别是编码器线如果屏蔽层没有接地或者和动力线捆在一起走编码器反馈的信号就会受到干扰驱动器收到的位置信息和实际位置对不上电机就会乱转或者抖动。最后才查参数增益是不是太高了惯量比设置对不对滤波时间常数是不是太小了调参数的时候先把增益调低让电机能稳定转起来再慢慢往上加。一上来就调高增益电机很容易震荡甚至飞车。4.3 触摸屏显示“####”或者乱码别急着换屏触摸屏上显示“####”通常是因为数值超出了显示控件的位数范围。比如你设置了一个4位数的显示控件但实际数值是12345那就会显示“####”。解决办法要么是增加显示位数要么是在PLC程序里做限幅。显示乱码则通常是字符编码问题。比如PLC里用的是ASCII码触摸屏设置的是Unicode那中文就会显示成乱码。或者通信数据里的字节序搞反了一个16位的数据高低字节交换了显示出来的就是完全不相干的字符。还有一种情况是触摸屏和PLC的地址对不上。比如你在触摸屏上做了一个按钮关联的是PLC的M10但PLC程序里实际用的是M100。这种错误在项目后期修改地址的时候特别容易发生——PLC程序改了触摸屏忘了改。我的习惯是在项目开始的时候就建一个地址分配表所有用到的地址都登记在表里PLC和触摸屏都按这个表来改的时候两边一起改。5. 程序维护与故障排查如何快速定位“昨天还好好的”问题5.1 先问“改了什么”再查“哪里坏了”设备突然出故障操作工跟你说“昨天还好好的今天就不行了”。这时候你第一句话应该问“昨天到今天之间有没有人动过什么东西” 根据我的经验至少60%的突发故障都和最近的改动有关——可能是改了程序、换了传感器、调了参数、甚至只是有人打扫卫生的时候碰松了一根线。如果确认没有改动那就按“从外到内”的顺序排查先看电源指示灯亮不亮再看PLC的RUN灯是不是绿色再看输入输出指示灯的状态和实际信号对不对得上。很多时候问题就出在最外层——比如一个急停按钮被按下了没复位或者一个断路器跳闸了没人发现。我自己的排查习惯是从执行机构往回查。比如气缸不动作先看电磁阀有没有电再看PLC输出点有没有信号再看程序里这个输出点的条件满不满足。这样一步一步往回推比从头开始查要快得多。5.2 用“强制”功能要小心别把自己坑了PLC编程软件都有强制Force功能可以强制某个输入点ON或者OFF也可以强制某个输出点ON或者OFF。调试的时候用起来很方便但强制之后一定要记得取消。我见过太多次因为忘了取消强制导致设备运行异常的事故。更危险的是强制输出。你强制一个输出点ON程序里这个输出点的逻辑条件可能根本不满足但物理输出端子就是有电。如果这个输出点控制的是一个危险动作比如机械手下降那强制输出就可能造成设备损坏甚至人身伤害。我的做法是强制之前先想清楚后果强制之后立刻在纸上记一笔调试结束前逐条取消。有些PLC软件有“强制列表”功能能看到当前所有被强制的点调试完对着列表一个一个取消。这个习惯救过我很多次。5.3 程序备份别等硬盘坏了才后悔这个听起来像是废话但我真的见过太多人因为没备份程序而抓狂。PLC程序备份要注意几点第一备份的时候要连注释一起备份。很多PLC软件默认只备份程序逻辑不备份符号表和注释。如果你只备份了逻辑下次打开的时候看到的全是M0.0、M0.1根本看不懂。第二备份文件要存至少两个地方。U盘一份电脑硬盘一份有条件的话再发一份到自己邮箱。第三每次修改程序之前先备份。这样万一改出问题了还能回退到上一个版本。还有一个细节不同版本的编程软件可能不兼容。比如你用V15写的程序用V13可能打不开。所以备份的时候最好把编程软件的版本号也记下来或者直接连软件安装包一起备份。我吃过这个亏一个老项目的程序用新版本软件打不开又找不到旧版本安装包最后只能重新写了一遍。6. 那些让我印象深刻的“奇葩”故障案例6.1 变频器干扰导致PLC输入误动作这个案例发生在几年前的一个风机控制项目上。设备运行的时候偶尔会出现某个输入点莫名其妙接通的情况但对应的传感器明明没有信号。查了程序、换了传感器、甚至换了PLC输入模块问题依旧。后来用示波器看输入端的波形发现每当变频器启动或者加速的时候输入端就会出现高频干扰信号。原因是变频器的动力线和PLC的信号线走在同一个线槽里而且距离很近。变频器输出的PWM波形含有丰富的高频谐波通过线间电容耦合到了信号线上。解决办法很简单把动力线和信号线分开走至少间隔20厘米以上。如果实在分不开就用屏蔽线并且屏蔽层单端接地。另外在PLC的输入点并联一个小电容比如0.1微法也能滤掉一部分高频干扰。这个案例让我之后做任何项目都坚持一个原则动力线和信号线永远分槽走。6.2 接地不良导致模拟量跳动模拟量输入跳动是另一个常见问题。一个压力变送器4到20mA信号PLC读回来的值一直在上下波动波动范围大概有几十个计数。换了变送器、换了模块、甚至换了PLC问题还在。最后发现是接地问题。这个项目的电柜没有做等电位接地PLC的模拟量模块地和变送器的地之间存在电位差。这个电位差叠加在4到20mA信号上导致读回来的值不稳定。解决办法是把PLC的模拟量地、变送器的地、开关电源的地全部接到同一个接地排上并且这个接地排要真正接到大地。接好之后模拟量读数立刻就稳定了。这个案例给我的教训是模拟量信号对接地非常敏感。如果遇到模拟量跳动的问题先查接地再查屏蔽最后才怀疑模块本身。6.3 程序里的“死循环”导致PLC停机PLC的程序是循环执行的但如果你的程序里有一个循环而这个循环的退出条件永远不满足那PLC就会卡在这个循环里出不来。这时候看门狗定时器会超时PLC报错停机。我遇到过一个案例一个配方管理程序用FOR循环遍历配方数组。正常情况下数组有10个元素循环10次就退出。但有一次操作员误操作把配方数量设成了0循环条件写的是“循环变量小于配方数量”结果循环变量从0开始0小于0不成立循环一次都不执行——这倒没问题。但如果配方数量设成了一个负数比如-1那循环变量从0开始0小于-1不成立也不执行。真正出问题的是另一种情况循环变量在循环体内被修改了导致退出条件永远不满足。所以写循环的时候一定要小心确保循环变量在循环体内不会被意外修改确保退出条件最终一定会满足。如果循环次数可能很大最好加一个最大循环次数限制超过就强制退出并报错。7. 给入行1-3年工程师的几条实在建议7.1 建立自己的“错题本”我从入行第二年开始就养成了一个习惯每次解决一个故障就把故障现象、排查过程、根本原因、解决办法记下来。一开始是记在笔记本上后来记在电脑里。十几年下来这个错题本成了我最值钱的东西。下次遇到类似问题翻一翻错题本往往几分钟就能定位。错题本不用写得很正式关键是记下“当时是怎么想的”和“实际是什么问题”之间的差距。比如你以为是传感器坏了结果是线接错了你以为是程序逻辑问题结果是扫描周期导致的。这些“以为”和“实际”之间的差距就是经验增长的地方。7.2 学会看手册但别全信手册手册是重要的参考资料但手册上的数据都是在理想条件下测出来的。比如手册说输入模块的响应时间是1毫秒但实际使用中因为滤波设置、线缆长度、信号质量等因素响应时间可能是5毫秒甚至更长。手册说通信距离可以达到1200米但实际在电磁干扰大的工厂环境里能稳定通信500米就不错了。所以我的建议是手册用来查引脚定义、参数范围、接线图但实际能跑多快、能跑多远要靠自己在现场试。试的时候留足余量别卡着手册的极限值用。7.3 多和机械、电气的人聊天PLC工程师不能只懂PLC。很多故障的根源在机械或者电气那边如果你不懂就会在程序里绕来绕去。比如气缸动作慢可能是气源压力不够也可能是电磁阀选型不对还可能是机械卡涩。你如果只盯着程序看永远找不到原因。我自己的习惯是调试的时候多问机械工程师“这个机构是怎么动的”多问电气工程师“这个回路是怎么设计的”。了解得越多排查故障的时候思路就越宽。而且和他们对好关系下次你怀疑是机械问题的时候他们才愿意帮你拆开看看。7.4 别怕问“蠢问题”入行1到3年的人最容易犯的毛病就是不好意思问问题。觉得这个问题太简单了问出来会被笑话。但根据我的观察那些进步最快的恰恰是敢问“蠢问题”的人。因为很多“蠢问题”背后其实是基础概念没搞清楚。你今天不问明天遇到类似的问题还是不会。当然问问题之前先自己查一查手册、搜一搜资料实在搞不定再问。问的时候把现象、你试过的方法、你的猜测都说清楚这样别人也更容易帮你。最怕的就是一句“PLC不工作了怎么办”这种问题没人能回答。7.5 保持学习但别追新追得太累工控行业的技术更新不算快但也不慢。今天流行Profinet明天可能就流行EtherCAT今天用梯形图明天可能就要用SCL或者ST。保持学习是必须的但不用每个新技术都追。先把一种PLC玩透把一种通信协议搞明白把一种编程语言用熟然后再去扩展。基础打牢了学新东西会快很多。我见过一些人今天学西门子明天学三菱后天学欧姆龙每个都学了个皮毛遇到稍微复杂一点的问题就抓瞎。不如先把一个平台吃透其他的触类旁通。最后说一个我自己的体会PLC工程师的价值不在于会写多少种指令而在于能不能在设备出问题的时候用最短的时间找到原因并解决。这个能力靠的就是日积月累的实战经验。这90条经验每一条背后都是一个或者几个真实的故事。希望它们能帮你少走一点弯路少熬几个通宵。
阅读完成 · 觉得有帮助?
咨询建站