说实话入行第三年的时候我曾经一度怀疑自己选错了方向。倒不是觉得PLC这行没前途而是发现自己每天都在踩坑——今天程序下载不进去明天现场通讯莫名其妙断了后天客户打电话说设备突然停机。带我的老师傅忙得脚不沾地很多问题只能自己去翻手册、上论坛找答案。后来我把这些踩过的坑、绕过的弯一条条记进笔记里慢慢整理出一套自己的排查清单。从输入输出接线到通讯协议从仿真调试到宕机处理前前后后攒了90条。我打算把这90条按主题分批放出来每天更新一期。今天是第一批先更21条。内容覆盖编程习惯、通讯调试、仿真工具、品牌兼容、设备稳定性这几个方向适合入行1到3年的PLC工程师也适合刚从学校出来还在摸索现场的同行。已经有一定经验的老师傅可以当作查漏补缺的清单翻一翻里面有一部分是平时手册里不会明说的细节。1. 入行头三年先练的其实是这几种能力很多新人一开始学PLC第一件事就是找视频、背指令恨不得一个月把三菱、西门子、汇川、倍福全学会。但真到了项目里大概率会碰一鼻子灰。原因很简单PLC工程师的核心技能不是写代码而是把现场的工艺需求翻译成程序逻辑再把程序变成稳定运行的设备。指令表背得再熟看不懂设备动作流程照样写不出一段能用的程序。1.1 编程语言选择先吃透一台设备再谈第二门语言这不是劝你从一而终而是说1-3年这个阶段精力太分散是大忌。不同品牌的PLC编程思路确实有差别但底层逻辑是共通的——扫描周期、输入输出映像、寄存器地址、通讯协议这些东西换了个品牌照样成立。我的建议是你手上现在接触哪台设备就先把它对应的软件吃透。比如你在长三角的加工厂里周边三菱、汇川设备多那就先把GX Works2/Codesys搞明白你在外企或者汽车产线西门子TIA Portal和博途就是主线锂电、风电行业倍福TwinCAT很常见那就从EtherCAT和软PLC体系入手。等你在一个平台上能独立完成从I/O表梳理、程序架构设计到现场调试再去学第二门语言最多两周就能上手。经验001选型看区域生态。跳槽时你会发现同一个城市的企业用的PLC品牌基本就那么几种与其追逐热门不如先把本地主流品牌吃透。1.2 读图纸和接线比背指令更值钱我在现场见过一个新人程序写得挺漂亮结果排查故障时连传感器是NPN还是PNP都没搞清愣是怀疑程序逻辑不对。这种事发生过不止一次。PLC程序里的每一个输入输出最终都要落在端子上。接线错程序再对也白搭。数字量输入这一块最容易搞混的就是漏型Sink低电平有效和源型Source高电平有效接法。三极管输出的三菱FX系列很多默认是漏型输入西门子S7-1200/1500的输入模块则可以通过接线方式配置成源型或漏型。如果传感器是NPN输出信号端是低电平有效那接漏型输入模块就顺理成章反过来PNP传感器输出高电平接源型输入模块才匹配。搞反了最常见的表现是触摸屏上信号时有时无万用表量端子电压又正常但PLC就是不认。经验002接完线不要急着上电先用万用表量一遍输入端子对COM的电压确认高电平、低电平的有效逻辑和传感器输出类型一致这一步能省掉后面半天排查时间。模拟量信号更别大意。4-20mA电流信号抗干扰能力比0-10V电压信号强距离稍远或现场变频器多优先用电流信号。屏蔽层必须单端接地也就是控制柜那一端接地现场传感器那一端悬空。我见过一个项目温度读数一直在2-3度之间跳排查到最后是屏蔽层两端都接了地形成地环路感应电流。这种小问题传感器、模块、程序换了个遍都没解决想想都亏。1.3 第一次现场调试先做三件防烧设备的事新手第一次独立去现场调试最怕的不是程序跑不起来而是放炮——烧输出点、烧电源、烧模块。这些事故十有八九是上电前没做检查。第一件事万用表二极管档量输出端子和公共端之间是否有短路。输出点烧毁多数是负载直接短路或者接错线把高电压引到了输出端子。第二件事**确认外部电源极性**尤其是直流供电的设备NPN接近开关三根线颜色搞错轻则信号不动作重则烧传感器。第三件事先空载上电再逐点带载。也就是先把输出负载的断路器全部断开PLC上电RUN起来用强制表逐一点动输出确认每个输出点的动作逻辑和你写程序时预期一致再合闸带负载。这个习惯能让你在最安全的条件下验证逻辑真有问题也只是程序问题不会烧硬件。经验003实机调试顺序固定为——检查接线、空载上电、观察输入点状态、手动点动输出、最后才下载程序联调。倒过来做大概率会付出硬件代价。2. 通讯调试为什么总卡在连不上PLC工程里最让人抓狂的永远是通讯问题。SCADA如何与PLC连接、触摸屏连不上PLC、上位机读不到数据、C#读PLC频率多少合适这些关键词几乎隔几天就被翻出来问一遍。其实通讯的本质就那么点东西你把它当两个人在打电话理解很多问题就通了。2.1 PLC和上位机之间到底在传什么PLC和上位机SCADA、触摸屏、工业电脑之间的数据交换说白了就是你读我的寄存器我回你寄存器里的值你要我改某个输出就给我写寄存器。不管是Modbus RTU、Modbus TCP还是西门子的S7协议、三菱的MC协议都逃不出这个框架。打个比方打电话要先拨号码对方的IP地址或站号接通后要说双方都能听懂的语言协议然后还得按双方约定的格式报信息寄存器地址、数据类型。这三层任何一层不对通讯就起不来。所以排查通讯问题时心里始终要有这条链路物理层网线、串口线、AB线有没有接对屏蔽好不好数据链路层波特率、数据位、停止位、校验位两端是否一致应用层站号/IP地址对不对协议类型是否匹配寄存器地址是否映射正确经验004调试通讯前先画一张通讯拓扑表写上每个设备的IP/站号、协议、波特率、寄存器起始地址。这张表现场就是救命稻草90%的通讯问题都能从表里找出矛盾点。2.2 连不上时先查这三样顺序不能乱新手排查通讯最容易犯的错是一上来就改程序、换协议东一榔头西一棒子。按下面顺序查基本能覆盖绝大多数情况。第一查站号和IP地址。触摸屏或者上位机软件里填的从站地址和PLC通讯模块里设的站号是不是同一个。Modbus RTU从站地址范围一般是1到247两边差一个数字都连不通。以太网通讯则先ping一下能通再谈协议。第二查通讯参数。波特率、数据位、校验位这组参数必须完全一致。串口通讯最常见的就是两边设备出厂默认值不同比如PLC侧设的是9600,8,E,1触摸屏侧却选成了9600,8,N,1校验位差一位就握手失败。这时候不要反复改软件直接用USB转485调试器连到PLC通讯口用串口助手发一条读寄存器指令看有没有正常返回帧。这一步直接帮你判断问题出在PLC还是出在HMI侧。第三查线缆。RS485的AD-、BD一旦接反就会完全没反应两端的终端电阻如果不匹配距离稍长就丢帧表现是通讯时通时断。经验005串口通讯连不上先用串口调试助理直连PLC测通确认PLC侧正常后再去查触摸屏。这比两边来回怀疑效率高得多。经验006以太网通讯不要一上来就抓包。先ping通再确认PLC网关、子网掩码最后才看协议端口有没有被防火墙拦掉顺序反过来会白白浪费时间。2.3 SCADA能用起来但是读取频率别乱来SCADA能读到数据只是第一步读得好不好、稳不稳定是另一回事。很多人写上位机程序时不管什么变量都是100毫秒读一次甚至用while循环疯狂读结果通讯链路被占满数据刷新反而不稳定。读取频率要跟实际需求匹配不是越快越好。这里给个参考基于我自己的调试经验设备状态、报警信息这种秒级变化的数据500ms到1s轮询一次足够需要曲线趋势显示的模拟量建议100ms到300ms位置闭环、高速计数这种数据通常不走普通上位机轮询而是走专用总线或硬件实时通道用C#写上位机时最常见的是用定时器定时读取而不是在循环里连读。比如用System.Windows.Forms.Timer或者Thread.Sleep控制节奏每500ms读一次保持型寄存器读到以后先存到本地变量界面显示时再从本地取。这样界面刷新和通讯读写解耦即使通讯瞬间延迟也不会引起界面卡顿。经验007上位机写操作比读操作更要谨慎。写单个线圈、写寄存器这类操作最好每次操作后都读回验证一次并在界面上给出成功或失败反馈防止点击后没有写入又被界面状态误导。3. 程序看着没问题一跑就翻车编程阶段的坑程序能不能跑是一回事跑得稳不稳定、后期好不好维护是另一回事。入行头几年我见过太多当时能跑三个月后没人敢碰的程序问题往往出在下面这几个地方。3.1 双线圈和扫描周期新手排错第一大元凶新手做程序最喜欢在一个程序段里置位某个输出又在另一个程序段里复位它逻辑上觉得自己想得很清楚。但实际上PLC程序是严格按照从上到下、从左到右的顺序循环扫描的同一个输出地址在程序里被赋值多次最后生效的是最后一次扫描的结果。前面哪怕你把Q0.0置ON了后面某个程序段又把它置OFF执行到那一行时Q0.0照样灭掉。这就是所谓的双线圈冲突。排查方法很笨但很有效在软件里对输出地址做交叉引用Cross Reference看看这个输出到底被多少个程序段写过。如果数量超过一个老老实实改成中间变量。也就是说程序里只在一个固定位置对真实输出赋值其他逻辑都对内部中间变量比如M区、DB块里的Bool变量操作最后统一把结果传给输出点。这样逻辑清晰排查故障也快还能避免将来别人改程序时不小心动了你的输出点。经验008交叉引用工具是排查双线圈问题的利器不用一行行翻程序直接搜地址就能看到所有引用位置。另外还要理解扫描周期带来的输入输出滞后。输入采样是在扫描开始前统一读取输出刷新是在扫描结束后统一写入所以一个输入信号变化最快要经过一个扫描周期才会反映到输出。编写需要快速响应的联锁逻辑时要考虑这个延迟必要时用中断程序或者硬件输出点来处理急停、限位这类安全信号。经验009安全联锁逻辑尽量用硬件回路程序里的联锁只是辅助。别指望PLC扫描周期来兜底急停响应。3.2 复杂流程别用一堆M点堆试试状态机思路自动流程一旦超过五六个步骤再靠一堆M点置位复位串流程就会变成一盘散沙。我见过一份程序二十多步动作全靠M0到M150接力谁置位谁复位根本理不清排查故障时简直像刑侦。更好的做法是用状态机思路用一个整型变量当状态字每一步动作一个状态号程序结构拆成两大块——状态转移条件和状态动作。比如当前状态等于10时执行夹爪闭合动作等到夹爪到位信号变为ON且安全门关闭成立状态跳到20状态等于20时执行手臂上升动作这个思路的好处是任何时候你看看状态字的值就知道设备走到哪一步了。触摸屏上加个状态显示多调试一个晚上后面维护一年都轻松。三菱用D寄存器存储状态号西门子用DB块的Int变量汇川Codesys里用整型变量原理都一样。3.3 变量命名和注释是我见过最被低估的事程序写得再漂亮不写注释、不命名符号三个月后你自己都认不出来。这是行业通病坏习惯一旦养成换一个项目就坑一次。我建议新人从第一天就养成这套习惯硬件I/O映射统一前缀DI数字量输入、DO数字量输出、AI模拟量输入、AO模拟量输出设备动作统一命名Motor电机、Valve阀门、Cylinder气缸、Sensor传感器每个程序段至少写三行注释这段干什么、什么条件触发、动作失败会怎样现场改过线之后第二天就要更新图纸和I/O表。别看这一件小事很多单位设备运行三五年后图纸和实际接线对不上全是当初偷懒埋的雷。入行时要是养成了这个习惯后面涨工资都靠它。经验010一个执行机构在程序里对应一个软元件命名里带上设备号。比如3号工位夹紧气缸就写成Cylinder_3_Clamp别省那几个字。4. S7-PLCSIM Advanced启动不了error 11排查全过程仿真软件这个话题几乎每周都有人问。尤其是S7-PLCSIM Advanced v5.0有人启动实例时报错甚至干脆不报错就是点启动没反应。我在折腾这个玩意儿上也花了不少时间这里把排查链路完整放出来。4.1 先确认版本对应关系大部分启动失败都出自这里S7-PLCSIM Advanced不是独立软件它要求先装好基础版S7-PLCSIM然后再安装对应版本的高级版同时还要和TIA Portal博途处于同一个大版本代际。很多人装了PLCSIM Advanced v5.0博途却是V16或者V17的老版本那启动失败太正常了因为V5.0是跟着博途V18那一代走的。版本不匹配是最常见的坑而且这种失败经常没有明确报错就是实例启动不了。我的建议是装软件之前先查官方兼容性表。不是说查到哪个版本就装哪个而是把你现有的博途版本记下来再对表里找支持这个博途版本的PLCSIM和PLCSIM Advanced版本号。顺序上先装博途再装基础版PLCSIM最后装PLCSIM Advanced每装完一个都重启一次电脑。4.2 error 11且无报错的完整排查链路如果你确认版本对应关系没错启动时还是报error 11或者干脆没反应按下面这个顺序来这是我自己实测下来效率最高的链路右键以管理员身份运行。PLCSIM Advanced需要访问虚拟网卡和系统服务普通权限经常静默失败。检查Windows服务。WinR运行services.msc找到名称里带Siemens或者PLCSIM的服务确认处于运行状态。被安全软件禁用是常有的事。清理残留实例。之前异常退出导致实例没有正常释放时新实例就创建不了。到PLCSIM Advanced管理界面把所有实例删光重启服务再试。检查虚拟网卡适配器。PLCSIM Advanced会装一张虚拟网卡去设备管理器里看它有没有被禁用、驱动是否有感叹号。关杀毒软件和防火墙。运行中的实时防护会拦截虚拟通讯端口可以先临时关掉再试。检查许可证。到自动化许可证管理器里看PLCSIM Advanced对应的授权是不是有效。经验011装了杀毒软件的工作站装完PLCSIM Advanced后把整个Siemens安装目录加入白名单不然哪天更新病毒库后突然就启动不了了。整个排查下来我遇到的情况大多是版本不匹配和杀毒软件拦截这两类。如果你也卡在error 11且没有日志先把基础版PLCSIM卸掉重装一遍再把Advanced装到同一目录很多玄学问题都这么解决了。4.3 仿真与实机的差距心里要有数仿真能帮你验证程序逻辑但替代不了现场。PLCSIM仿真的重点在程序逻辑它不关心你的接线也不仿真外部传感器信号。所以你写程序时不能因为用了仿真就放飞自我搞一堆仿真特有的取巧写法比如直接用M区替代I/O点、跳过报警逻辑等等。你偷的懒实机调试时全会还给你。我个人的建议是仿真阶段就要按实机标准写程序输入输出照常用I/O地址映射模拟量在DB块里专门建一个变量区用来塞仿真数值报警、互锁逻辑一条不少地写好。这样仿真过了下载到实机上大概率只要调调参数就能跑。要是仿真时为了省事把互锁跳过了实机上一定会有那么一次让你为这个偷懒买单。5. 各种品牌混用时最常见的兼容性官司设备商做项目很少只用一种品牌的PLC上位机是威伦通或者昆仑通态的触摸屏控制器是汇川、信捷或者西门子变频器又是ABB的。品牌一多兼容性问题就跟着来。5.1 威伦通触摸屏找不到汇川PLC驱动我建议这样处理有人问威伦通触摸屏软件里找不到汇川PLC的驱动头都大了。这个问题分两层看。先看型号和时间威伦通的EBPro软件其实是有汇川驱动选项的但老版本的软件或者部分定位低端的老型号触摸屏驱动列表不全。这时候第一件事是升级EBPro到最新版然后检查触摸屏固件版本老固件也要更新。如果更新完还是没有对应驱动走通用Modbus协议。汇川的多数PLC都支持Modbus RTU或Modbus TCP从站功能威伦通触摸屏里直接选Modbus RTU设备或Modbus TCP设备然后手动填写PLC侧的寄存器地址映射就可以了。这个方案最稳妥因为Modbus是公开协议几乎所有组态软件和触摸屏都支持。经验012当你遇到我的触摸屏怎么没有XX品牌PLC驱动这类问题时先别急着找驱动问自己一句这台PLC支不支持Modbus从站支持就万事大吉。昆仑通态MCGS连信捷PLC也是类似套路。MCGS较新版本自带信捷驱动直接选就行找不到时信捷XD/XC系列都可以开启Modbus从站功能MCGS里用通用Modbus设备连地址按Modbus地址映射表填。跨品牌通讯的万能钥匙就是Modbus这句话值得记下来。5.2 三菱老款FX2的软件在Win10上装不上怎么办还有人拿着三菱老式FX2系列PLC编程软件是FXGP/WIN这个古董在Win7/8/10/XP上各种装不上、连不上。老设备在项目现场还有很多这个问题的标准解法不是硬装新系统而是开虚拟机。FXGP/WIN在Windows XP或Win7 32位系统下运行最稳。在Win10/11主机上装个虚拟机软件里面跑一个Win7 32位或XP的虚拟机然后在虚拟机里装FXGP/WIN。USB转串口线要把USB设备映射到虚拟机里一般选连接到虚拟机选项就行。这样既不影响主机日常使用老软件也跑得稳稳当当。如果嫌虚拟机麻烦也可以试GX Developer它对新系统兼容性比FXGP/WIN好一点点但连FX2N这类老CPU时还是要用串口或USB转串口线驱动用三菱的USB驱动或者兼容FTDI芯片的驱动。最关键的还是那句老设备的软件别硬装开个虚拟机最省心。5.3 汇川Codesys和AB指令初上手思路先调整汇川这几年在市场上铺得很快AM系列和部分Easy系列走的是Codesys生态。很多从三菱或者西门子转过来的工程师第一次打开Codesys会有点懵找不到GX Works那种梯形图菜单。实际上Codesys是IEC 61131-3标准环境它不像某个品牌那么专属更像一个平台你可以在里面写梯形图、ST结构化文本、FBD功能块图还可以挂运动控制库、CANopen总线库、EtherCAT库。上手Codesys先弄懂三件事任务Task配置、库Library管理、程序组织单元POU的调用关系。三菱、西门子转过来的习惯是块随便建PLC程序从上往下跑Codesys里需要明确主任务调用哪个POU调用顺序是什么扫描周期在哪设。这些理顺了后面写逻辑就顺手了。至于AB公司的PLC有人问SWJ是指什么——我翻过不少AB官方指令手册没找到这个缩写对应的指令。AB罗克韦尔的控制器上常见的跳转指令是JSR跳转到子例程、MCR主控复位、以及用于位操作的Latch/Unlatch等但没有一个叫SWJ的公开指令。如果是在某台老设备或者第三方功能块里看到这个符号大概率是项目自定义的函数块名或者某个文本命名建议直接用Studio 5000软件打开程序定位符号定义处看它绑定的实际指令。经验013查指令不要只看缩写瞎猜找到软件里的交叉引用看这个符号到底对应哪个指令块比问搜索引擎靠谱。6. 宕机的设备千篇一律排查的方法各有不同PLC宕机这事儿几乎所有现场工程师都遇到过。设备跑着跑着没反应了触摸屏黑屏、指示灯全灭客户电话一个接一个。宕机的原因五花八门但排查思路是有章法的。6.1 PLC宕机先看供电和干扰别乱下载程序第一步不是急着连电脑查程序而是先看电源。PLC宕机最普遍的原因是供电异常。开关电源老化、电网电压波动、柜内大功率设备启停瞬间压降都会让CPU掉电重启或者直接停机。到现场先看电源模块指示灯用万用表量24V输出确认稳定再说别的。第二步看干扰。变频器、伺服驱动器、高频加热设备启动时产生的电磁干扰可能通过电源线和信号线串入PLC导致CPU死机或者看门狗超时。表现就是设备运行一段时间后突然停止过一会儿重启又正常。处理的常规做法是PLC供电回路加装隔离变压器或者DC-DC隔离电源模块信号线用屏蔽线并单独穿管走线和动力电缆拉开距离。第三步才是检查程序本身。CPU的看门狗设置过长或过短都有问题一些死循环、大量浮点运算、通讯指令无超时等待都可能把CPU拖死。但记住登录程序之前先保存现场诊断数据比如CPU的诊断缓冲区、故障时间戳、I/O状态。这些信息在重启后就没了先采集再处理。经验014现场宕机先拍照记录所有LED指示灯状态和触摸屏报警画面再断电重启。很多故障信息只出现一次错过了就只能等下次故障。6.2 时间到期自动停机的正规实现方式有人问PLC怎么设置时间到期自动停机这类需求在设备租赁分期、维护保养提醒里确实存在。先说清楚立场任何隐蔽后门、未经合同约定的强制锁机都是合规风险正规项目不能这么干。我讲的只是设备管理中常见的运行时间到期提醒和保养到期停机功能。实现思路不复杂用PLC的实时时钟RTC或者累计运行时间寄存器作为时间基数在断电保持区里存一个授权到期时间或保养周期设定值比如某年某月某日或运行满5000小时每个扫描周期比较当前时间和到期时间到期时置位一个到期标志程序在设备启动条件里串联这个到期标志并同时在触摸屏上显示明确的到期原因和维护提醒维护人员完成保养或续费后通过受密码保护的HMI画面写入新的到期时间注意写这个功能时必须和客户有明确的合同或维护协议约定到期停机不是偷偷锁死设备让客户打钱而是到了法定的保养周期主动停机提醒维护。停机逻辑也要做到透明、可追溯触摸屏上有倒计时提示到期前提前一段时间开始声光报警给现场留出安排生产的缓冲期。经验015到期停机逻辑务必写在明文程序段里注释写清楚是保养周期提醒用途不要搞让人看不懂的加密算法否则后期验收和交接环节说不清。6.3 本期21条之后剩下的69条每天更新写到这里第一批21条算是放完了。这里面的每一条都是我这些年要么自己踩过、要么帮别人擦屁股擦出来的经验。剩下还有设备启动时序、伺服定位调试、变频器参数匹配、梯形图转ST语言、程序安全管理、远程监控、数据采集报警联动这些内容后面我会按主题继续更新下去。这段时间你要是哪条踩了坑或者觉得我漏了什么欢迎在评论区补充说不定你的问题就是下一批更新的选题。
阅读完成 · 觉得有帮助?