
干PLC这行总有人问我入行1到3年到底该怎么熬我的回答是这个阶段不是熬而是快速偷师。我自己就是从接线表都看不大利索、程序被领导扒了大半夜才改明白的菜鸟过来的。回头看真正让我站稳脚跟的不是背了多少条指令而是踩坑之后总结出来的那些实战细节。所以我把这几年攒下的经验整理成90条打算每天更新一组今天这篇先把最核心、新人最容易踩的部分展开讲。下面这些内容不按教材顺序来完全是按现场出问题的概率排序哪条让你少加一次班哪条就值得你记下来。1. 入行前三年先搭思维框架再碰键盘很多新人拿到一个项目后第一反应是打开编程软件开始写梯形图这是大忌。我见过太多人程序写了三天最后才发现硬件上根本没有对应的输入点位白白返工。思维框架建立了后面的效率才会高。1.1 看懂电气原理图比会写梯形图更优先我一直跟新人强调一个观点PLC工程师首先是电气工程师然后才是软件工程师。现场出故障时你打开柜门第一件事是翻图纸不是看程序。很多1到3年的工程师拿图纸第一眼就看PLC端子表这不对。正确顺序是先看主回路和控制回路电源从哪里来断路器带哪一路负载接触器线圈是24V直流还是220V交流中间继电器怎么切换信号。有一次我排查一台皮带输送线现象是电机偶尔不启动。程序里看输出点明明亮了但接触器就是不动。最后查图纸发现程序中驱动的那个输出点对应的是柜内另一个继电器的线圈而真正的接触器线圈是由这个继电器的一组触点到另一排端子再过去的中间经过了一个保险丝座而那根保险丝座内部氧化接触不良。这种问题不看图你根本想不到。所以建议新人拿到图纸后先花半小时把供电链路标出来从总闸到各支路断路器再到开关电源、PLC供电、传感器供电、执行器供电用荧光笔标一遍比你背十遍指令都管用。还有一个实操习惯现场查线别嫌万用表麻烦。蜂鸣档只能测通断测电压还要打到直流电压档。很多新人在测量一个24V信号时习惯只测一根线对地这是错的。PLC输入信号是源型还是漏型决定了信号线的参考电位不同必须测“信号线对公共端”的电压而不是对地。我在现场带人时要求每人包里至少带三样东西万用表、剥线钳、扎带这三样能解决八成以上现场问题。1.2 源型漏型、NPN还是PNP搞错一次就长记性这是新人最容易翻车的地方。PLC数字量输入有两种常见接法漏型输入和源型输入对应传感器的NPN和PNP输出。简单说漏型输入输入公共端接24V信号端被拉低到0V时导通源型输入公共端接0V信号端被拉到24V时导通。你只要记住NPN传感器配漏型输入PNP传感器配源型输入匹配错了信号就永远进不了程序。我做过一个项目整套设备的接近开关全是NPN常开型但选型时买回来的PLC扩展模块只有源型输入施工队接完线后怎么调试都没信号。后来查了半天问题不在线也不在程序就在匹配关系上。最后加了一组中间继电器转换才解决工期耽误了三天。这个坑教给我一个规矩开工前先把传感器选型和PLC输入模块的接线方式统一确定写在设计联络单里。还有一个容易忽略的点很多PLC输入端子既可以接源型也可以接漏型关键看公共端COM或1M/2M接的是电源正极还是负极。接法不同触发的逻辑电平就不同。你如果拿一个PNP三线传感器去接漏型输入信号线对公共端永远是24V左右PLC永远检测不到低电平指示灯压根不亮。老油条看一眼输入指示灯就能判断新人则需要记住输入指示灯不亮先拿万用表量输入端子对公共端的电压而不是急着改程序。1.3 动手编程前先把动作时序和伪代码写出来我知道很多新人觉得写时序图麻烦脑子里已经有画面了直接拖线圈多快。但实际项目比你想象的复杂得多多工位设备动作一交错逻辑马上乱。我的习惯是哪怕只有五六个动作的小设备也先在纸上把循环流程写一遍每个动作的触发条件是什么退出条件是什么要不要互锁要不要延时。这个习惯救了我无数次。举个例子一台自动贴标机动作是工件到位→挡停→贴标头下降→贴标→拍打→挡停撤→放行。看起来顺序很清晰但你要考虑中途急停恢复后各执行器停在什么位置气缸是伸出还是缩回再启动时怎么回到初始状态。你不在纸上把流程走一遍程序里就会漏掉很多“异常返回”分支。写伪代码的好处是把思维从梯形图里解放出来。你可以用中文描述也可以用ST语言写一个简单的状态机框架。我建议1到3年的工程师主动学一下ST语言不需要精通但至少要能读懂并写出类似CASE语句的状态切换逻辑。梯形图搞顺序控制多步交叉时非常绕用状态机思路则清晰得多。顺序控制这块常见的实现方式有三种置复位法用SET/REST、移位寄存器法、ST状态机法。置复位法最简单但排查困难移位寄存器适合固定节拍循环ST状态机最适合多分支流程。刚入行的人我建议从置复位法练起但一定要了解状态机思路因为做复杂项目时你会回来用它。2. 程序架构和编程习惯决定你是挖坑还是填坑程序不等于梯形图的堆叠。同一个项目不同人写出来的程序后期维护成本差几个数量级。新手阶段养成的编程习惯几乎会在整个职业生涯里持续影响你。这一部分我重点说几个我见过的、几乎人人踩一遍的架构问题。2.1 IO映射做不好查一次线改一次程序刚入行的时候我写程序喜欢直接用物理地址比如I0.0、Q0.4觉得简单直接。后来吃了大亏项目做了一半甲方要求在柜内加一个急停按钮要串联到某个回路上结果所有关联地址全部要改。那一次我加班到凌晨两点就是一个个点去替换替换。后来我学乖了程序开头永远做IO映射。IO映射是什么简单说就是程序开头两行把物理输入点赋值给中间变量把中间变量赋值给物理输出点。比如VAR bIn_Start : BOOL; // 启动按钮 bIn_Stop : BOOL; // 停止按钮 bOut_Run : BOOL; // 运行指示灯 END_VAR bIn_Start : %I0.0; bIn_Stop : %I0.1; %Q0.0 : bOut_Run;这样做的价值在于你的逻辑程序里永远只出现变量名不出现物理地址。将来哪怕整个柜子重新接线、点位全部变更你只需要改开头这几行映射逻辑部分一行不用动。这个习惯我建议从第一个项目就养成。另外IO映射还有一个隐藏好处方便诊断。你可以把每个输入信号加了中间变量之后在程序里用这些变量做报警、统计、趋势记录而不影响原信号。比如统计一台设备一天内启动了多少次如果直接统计物理输入点统计逻辑会污染正常逻辑用映射变量则互不干扰。2.2 自锁互锁的软件逻辑永远替代不了硬件安全回路自锁互锁是PLC编程最基础的内容但恰恰是这里出过事故。最常见的问题是新人觉得程序里加了互锁就万事大吉机械上不再做硬线互锁。我明确告诉你这是极其危险的。电机正反转如果只靠程序里两个输出线圈互锁一旦PLC跑飞、程序扫描异常、或者两个输出点同时动作机械上就会发生正反转接触器同时吸合轻则跳闸烧保险重则损毁设备甚至伤人。正确的做法是硬件接触器互锁必须有继电器互锁必须有程序互锁只是第三道防线。安全回路必须是硬接线而且不能只依赖PLC输出。我曾经参与过一个物流分拣项目其中一个升降台由两台电机驱动一升一降。控制系统里程序互锁写得很漂亮但设备调试时发现在多次快速切换后偶尔能听到接触器“啪”一声同时吸合的声音。排除后发现程序扫描周期在某段异常代码处被拉长输出刷新出现延迟导致互锁指令还没来得及生效另一个输出就已经置位。后来在接触器线圈回路中串入了对方接触器的常闭触点才彻底解决。从那以后我给自己定了一个规矩凡是涉及可能造成机械干涉或安全事故的互锁一律先在图纸上做硬线互锁程序只做辅助。自锁也一样。停止优先还是启动优先必须根据工艺需求明确。比如一个泵的启停控制如果启停按钮同时按下你希望是启动优先还是停止优先大多数安全场景要求停止优先。在梯形图里停止优先意味着停止按钮的常闭触点要串联在输出回路中并且放在启动回路之前启动优先则相反。很多新人根本不考虑这个问题随便写一旦现场出现“两个按钮同时按下的极端情况”设备就按错误逻辑执行了。2.3 分段注释和版本管理是写给自己三天后看的很多新人觉得注释是写给领导看的所以懒得写。实际上注释是写给你自己三天后看的。我自己的体验是一个项目写完后隔三天再看如果没有注释我连自己当初为什么要加某个定时器都想不起来更别提别人接手了。分段的大致原则程序按功能模块分比如“手动模式”“自动模式”“报警处理”“通信处理”“输出映射”。每个segment之间用清晰的分隔注释开头写明功能、作者、修改日期。不要在一个OB/程序块里把电机启停、模拟量处理、通信数据解析全部搅在一起。CPU扫描是有顺序的你分了段排查问题时才能顺着逻辑去定位。版本管理的核心原则是每次改动前先另存一个带日期的副本改完测试通过后再把原来的覆盖。我在设备改造时经常遇到“昨天还好好的今天不行了”的情况最后发现是有人改了程序忘了保存原版。如果养成“改前另存、改后备份”的习惯这类问题一分钟就能解决。另外程序里尽量使用全局变量符号表而不是在梯形图里直接填绝对地址这样能给每个变量一个有意义的名称。3. 调试前先学会做减法最怕的是什么都不知道就动输出调试时的新人通常有两类一类是畏手畏脚怕动任何东西另一类是莽撞型上来就强制输出。这两类都会出问题。调试的本质是“验证假设”每一步操作都要有目的、有预期结果而不是瞎试。3.1 强制输出是双刃剑动之前先把负载断开想清楚强制输出Force是调试时最常用的功能也是最危险的功能。很多新人在程序里看到一个输出点没反应顺手就强制Q点输出结果气缸突然弹出或者变频器突然启动。我犯过这个错在一个测试平台上我想验证一个电磁阀输出点能不能导通直接强置了Q输出结果没注意到电磁阀已经接好了气源气缸瞬间伸出幸好没伤到人。从那以后我给自己立了一条规矩强制任何输出之前先确认执行机构的能源是否已经切断或者至少把执行机构脱开。气动设备就是拔气管电动设备就是断开主回路。强制功能还有一个隐患调试结束后忘了取消强制。曾经有台设备某个输出点一直被强制为OFF看起来程序里没输出但实际是被强制锁死了。换了新程序重新下载后强制状态才被清除。这个现象非常隐蔽我建议新人排查输出问题时把强制状态列表打开看一眼很多时候问题的答案就在那里。另外一个调试习惯先手动后自动。手动模式下把每个执行器单独动作一遍确认方向、行程、限位都正确再切到自动跑流程。不要一上来就按自动否则一个限位信号反了整个流程乱成一锅粥你还不知道在哪里开始查。手动调试的本质是给每个执行器做“单元测试”单元测试通过后再做集成测试这是软件工程里的基本思想同样适用于PLC调试。3.2 硬件组态里的I/O地址重复是让你怀疑人生的隐形坑我记得有一次做一个扩展I/O项目现场反馈说新加的十几个输入点位信号不对有的点常亮有的点怎么都触发不了。程序检查好几遍都没问题后来发现是硬件组态里扩展机架的起始地址填错了和原有模块地址重叠了。地址重叠以后CPU扫描时同一个地址被多个模块映射数据互相覆盖表现就是信号错乱、偶尔跳变。这个坑的特点是程序本身完全没问题你越查程序越迷茫。所以我给新人一个排查思路当程序逻辑看着没问题、硬件接线也正确、但信号表现异常时先去看硬件组态核对每个模块的起始地址和结束地址确保没有重叠。尤其是通过远程IO机架扩展设备时地址分配往往不是连续的更需要人工仔细核对。还要注意模块版本和GSD文件版本不匹配的问题。有些新买的IO模块固件版本比组态软件里的版本新你会遇到模块识别不到或者只能用默认参数。这时候要到官网下载对应的GSD/EDS文件重新安装到组态软件里再分配地址。3.3 模拟量处理不只做工程量换算滤波和断线检测才是重点模拟量是PLC里另一个大坑。新人往往只关心怎么把4-20mA信号换算成工程量比如0-100摄氏度。我的经验是换算公式很简单难的是信号不稳定时怎么办、线断了时怎么识别。先说断线检测。4-20mA变送器两线制正常工作时电流至少4mA。如果信号线断了回路电流为0mA此时程序里读取到的AD值会掉到0以下或者直接到最小值。你可以利用这个特征做断线报警。例如4-20mA对应的AD值是0-27648那么当AD值持续低于某个阈值比如5530对应8mA? 不0-27648对应0-20mA4mA对应5530可以被判定为断线。但注意有些变送器在测量范围下限时会输出4mA所以阈值要留有余量一般低于0mA对应的AD值加一个偏移量。实际项目里我习惯用电流值低于3.6mA判断线这是NAMUR NE43标准里规定的断线阈值。滤波处理也要小心。为了消除信号抖动很多人直接对AD值做平均但滤波太狠会掩盖真实的过程变化。比如温度控制你如果做了10秒的平均PID控制器的响应就变得迟钝系统容易震荡。我的经验是对温度、液位这类大惯性对象可以做一阶惯性滤波时间常数设置几秒没问题对压力、流量这类快速变化的信号滤波时间要短或者干脆不滤波用传感器本身的阻尼就够了。现场还有一个常用招式把采集到的N个AD值去掉最大值最小值再求平均既去毛刺又保留了响应速度。这个算法不用额外硬件程序里十几行就能实现。4. 运动控制和参数换算手推一遍胜过背十遍手册伺服、步进、变频器是1-3年PLC工程师绕不开的设备。很多人遇到运动控制就觉得难其实难的不是控制本身而是参数之间的换算关系。你只要把公式手推一遍后面所有项目都能套用。4.1 脉冲当量与速度换算先算清楚再设参数步进电机使用最多的场景是定位和速度控制。以常见的步进电机为例步距角1.8°驱动器细分设为16电机转一圈需要360/1.8×163200个脉冲。如果丝杠导程是10mm那么每个脉冲对应的移动距离是10/32000.003125mm。如果你希望工件移动到10.0mm位置需要的脉冲数就是10/0.0031253200个脉冲。速度换算是另一个常见需求。假设运动速度为100mm/s每脉冲对应0.003125mm那么每秒需要发送的脉冲数为100/0.00312532000Hz也就是32kHz。注意这个频率就是PLC高速脉冲输出口的频率上限要求。如果计算出来超过PLC的硬件输出能力要么降低速度要么改变电子齿轮比或细分增大脉冲当量从而降低所需频率。这些计算在调试前就应该做出来而不是现场一遍遍试。这个换算关系有非常直观的生活类比电机转一圈相当于走固定距离脉冲数就是“档位”电子齿轮比相当于变速箱。你换一个变速箱档位同样的发动机转速对应的车速就变了。驱动器的电子齿轮比设置就是干这个的它把PLC发来的脉冲按比例放大或缩小后再输出给电机。因此你可以用电子齿轮比来调整“每个脉冲对应多少移动量”不需要改机械结构。4.2 回原点不只看开关还要考虑Z相和背隙运动控制里“回原点”是高频故障点。很多新人写的回原点程序是碰到原点开关马上停。这在高速运动时会有问题。机械有惯性高速碰到开关再减速过冲可能会跨过原点位置导致定位不准。正确的做法通常是用原点开关做粗定位再用电机编码器的Z相零脉冲信号做精定位。Z相每圈只有一个脉冲可以作为绝对位置的基准。实操中的流程是先以较快的速度向原点方向运动碰到原点开关后减速到爬行速度然后继续缓慢移动直到检测到编码器Z相脉冲信号停止此时位置是机械原点。这种方式精度高而且重复性好。如果你的PLC和伺服系统不支持Z相回原点那就只能在碰到原点开关后立即停止但速度必须放慢到机械不会过冲的程度同时考虑背隙补偿。背隙是机械传动的齿轮、丝杠间隙造成的误差。比如丝杠换向时电机反向旋转一小段工作台可能还没动这就是背隙。背隙补偿的意思是在反向运动时额外多走一个补偿量。这个值需要实测用百分表打在移动部件上正向走到某位置记录坐标反向走到相同坐标观察表的读数差值这个差值就是背隙量把它填到驱动器的背隙补偿参数里。很多项目的定位精度问题就是靠这一步解决的。4.3 加减速时间不是随便填负载越重斜坡越要缓刚接触伺服和步进的工程师特别容易遇到一个问题设备运动时一启动就报警过载或者停下来的时候整个机身都在抖。原因通常是加减速时间太短。电机的加速过程需要克服负载惯性加速越猛需要的瞬时扭矩越大。如果超过驱动器能提供的最大电流自然就报警了。这个问题的解决思路是负载越重、传动比越小、速度越高加减速时间就要越长。通用经验是从0到最高速度的加速时间不要低于0.5秒重负载时拉到1秒以上。具体数值可以在驱动器软件里逐步增加观察电流曲线调到最大电流不超过额定电流的80%左右比较稳妥。加减速曲线也值得关注很多驱动器支持S形曲线就是在加速开始和结束时过渡更平滑减少冲击。对精密定位设备即使牺牲一点点节拍也要用S形曲线。这里还有一个容易忽略的点伺服驱动器里的惯量比参数。早期很多伺服调试人员直接沿用默认值结果系统低速时爬行高速时振荡。正确流程是先用驱动器的自动整定功能跑一次惯量辨识把惯量比设到接近实际值再微调增益。不做这一步后面调半天都可能找不到问题根源。5. 通信与干扰排查能救命的几条实用心得PLC系统里的通信问题可以说占了现场故障的三分之一。而且这类问题不像硬件故障那么直观经常让你觉得“一切都对但就是不通”。这一节我把RS485、以太网、现场干扰三大类最典型的经验写出来。5.1 RS485通信不上先查线、再查地、最后查匹配RS485是变频器、仪表、远程IO最常用的通信方式。通信不上时很多新人第一反应是查参数其实大部分问题出在物理层。我的排查顺序是固定的第一步查接线极性。A/B信号线有没有接反。RS485是差分信号A和B一旦接反设备直接收不到数据。这个用万用表量一下或者对照说明书换一下就能确认。第二步查屏蔽层接地。屏蔽层用于抗干扰正确的做法是单端接地也就是只在PLC这一端或者设备某一端接大地不能两端都接。两端都接时如果两个接地点有电位差会形成地环流反而在屏蔽层上感应出干扰导致通信不稳定。这个点我见过太多人踩过坑通信时通时断最后就是把屏蔽层一端断开就解决了。第三步查终端电阻。RS485总线两端要各接一个120Ω终端电阻用来消除信号反射。如果通信距离长、波特率较高没接终端电阻会出现偶尔通信失败尤其在变更站号或重启设备后。这里有一个小技巧很多设备内部已经内置了终端电阻通过拨码开关启用接这个电阻时要在断电状态下操作。第四步才是查参数。波特率、数据位、停止位、校验方式必须主从一致这是最基础的。但有个隐蔽问题有些设备默认校验方式是偶校验有些是无校验你在软件里看不见只能通过抓总线数据判断。5.2 以太网IP规划不严谨调试现场能让你跑到腿软现在越来越多的系统走以太网通信PLC、HMI、变频器、上位机、视觉系统全部在一个网段里。现场最常遇到的坑是IP地址冲突。我曾经在一个项目里排查两个变频器频繁掉线的问题查了链路、查了交换机的端口统计最后发现是有一台调试电脑的静态IP和变频器IP撞了。那台电脑一接入网络变频器就被“挤掉线”拔掉电脑就恢复折腾了一整天。解这个问题的根本办法是IP规划。项目开工前就把所有设备的IP列成一张表格设备名称、IP地址、子网掩码、网关、物理位置。PLC和HMI占用一个固定段变频器和伺服占用另一个段交换机、网关和上位机单独规划。能用VLAN隔离的就用VLAN隔离至少要做到控制网和管理网分开。控制网的广播包很多如果和管理网混在一起偶尔的数据拥堵就会导致PLC通信超时报警。还有一个经验调试用的笔记本电脑IP地址要设置成一个不易冲突的地址比如管理网段的高地址区域尽量不要用和PLC相同的网段起点。很多项目招标时要求控制网IP规划文件这份文件提前做后面能省下大量调试时间。5.3 信号乱跳、模拟量漂移用“看、量、分”三步定位现场干扰的问题表象千奇百怪输入点偶尔闪断、模拟量读数缓慢漂移、伺服偶尔报警。遇到这类问题我习惯用“看、量、分”三步法。看的步骤是观察现象。PLC输入指示灯是不是毫无规律地闪烁闪烁频率高不高和哪个变频器、伺服启动有没有对应关系先把时间和现象对应起来能帮你缩小排查范围。量的步骤是拿万用表或示波器量信号波形。如果是数字量信号量信号线对公共端的电压看是否稳定如果是模拟量用万用表串联在信号回路里看电流是否有毛刺。有一个实用技巧把万用表打在交流电压档去测直流信号线如果读数有几十伏甚至上百伏的交流分量说明线缆旁边有强干扰源或者屏蔽层没处理好。分的步骤是区分干扰是内部的还是外部的。你可以把信号线从接线端子拆下来设备继电器全部不动作用万用表量信号线空载状态如果依然有干扰电压说明干扰来自外部比如线缆平行走线、大电流电缆在旁边如果空载状态正常接上PLC后才有干扰那可能就是PLC侧的地线问题和模块质量问题。治理措施按优先级排序第一是线缆分开模拟量线、通信线和动力线必须分线槽走间隔至少20cm第二是换屏蔽电缆屏蔽层单端接地第三是加滤波器比如模拟量信号串接磁环或RC滤波器第四是换更抗干扰的传感器或变送器比如从电压输出型换电流输出型。再不行才考虑加隔离栅。这个顺序也是成本从低到高的顺序不乱花冤枉钱。这90条经验我这样安排的初衷很明确不是让你一口气全看完而是每条都值得你在自己的设备上验证一遍。后面我计划按硬件接线、编程习惯、运动控制、通信排查、上位机联动、项目推进这几个方向继续更新每条都会带案例和参数。如果你在调试中踩过什么坑也欢迎在评论区写出来我会挑典型问题在后续连载里展开分析。尤其是那些“书本上永远找不到、现场却经常遇到”的毛病往往最值得记录下来。