入行头三年,谁不是一边调PLC一边被PLC调。我2019年从设备维护转做电气设计,第一年跟着师傅接S7-200 smart的线,第二年独立改包装线,第三年开始碰四层电梯、大棚灌溉和SCADA系统。这几年攒下来的经验,零零碎碎记了好几本笔记本,最近我打算整理成90条实战经验,按天更新,今天先把框架和第一批最容易踩的坑写出来。这份总结不是官方手册,全是现场被电笔、万用表和报错窗口教过的教训。适合入行1-3年的PLC工程师,也适合准备转自动化的朋友,平时只做接线或只写上位机的人看了也能少走弯路。
1. 这90条经验是怎么分的
1.1 为什么要攒这么多条
我见过很多新手一上来就抱着西门子手册啃,但手册不会告诉你现场会出什么幺蛾子。比如接线端子松了会偶尔丢信号,变频器跟PLC通讯不上的原因居然是站号设成0,仿真软件启动不了不是程序错而是服务没开。这些经验单拎出来都是小问题,可架不住它们在半夜三点一起出现。
我决定把90条按“编程、硬件、通讯、仿真、项目、维护”六个维度归档,每个维度下再按严重程度排优先级。1-3年正是大量踩坑的阶段,记下来比记在脑子里靠谱。很多老工程师说“干自动化就是经验活”,话糙理不糙,PLC的指令和硬件型号可以现查,但故障怎么快准狠地定位,只能靠一次次现场翻车喂出来。
1.2 90条的分布和用法
| 主题 | 条数 | 编号范围 | 典型场景 |
|---|---|---|---|
| 编程与逻辑设计 | 10 | 001-010 | 写梯形图、FBD、SCL |
| 硬件接线与现场调试 | 10 | 011-020 | 上电、查线、换模块 |
| 通讯与第三方设备 | 20 | 021-040 | 变频器、触摸屏、SCADA |
| 仿真与软件工具 | 10 | 041-050 | PLCSIM、老软件兼容 |
| 典型项目实战 | 25 | 051-075 | 电梯、红绿灯、大棚、包装线 |
| 设备管理与防宕机 | 15 | 076-090 | 到期停机、巡检、备份 |
后面每一篇更新,我都会从某个编号区间里挑几条展开写。如果你是急性子,可以直接跳到对应编号区间的章节;如果刚入行,我建议按顺序从001开始看。这样跟着一条条看过来,等90条更新完,自己的知识框架也差不多搭起来了。
2. 编程与逻辑设计篇:001-010,先学会不给自己埋雷
2.1 第1-3条:备份、编译、分块
第1条,上电前先备份原程序。别觉得这多余,很多设备程序是前任工程师留下的,连注释都没有。你一旦下载新程序发现动作不对,想退回原版都找不到,只能对着寄存器一个一个猜。正规做法是用存储卡或U盘备份,或者用在线软件上传到本地,至少留两个不同时间的副本。我习惯在程序文件名的末尾加日期,比如“包装线_20250318”,这样哪个版本在现场跑一目了然。
第2条,下载前必须编译。别看不起这步,博途里你改了一个FC,没编译就下载,PLC里跑的还是旧块,你查半天根本不知道问题出在哪。编译不只是查语法,还会刷新变量地址,有时地址变化了,触摸屏变量没跟着改,就会出现“PLC有输出,但屏上没反应”。遇到这种情况,先重新编译一次,再下载,多半能解决。
第3条,程序按功能分块,OB1只做调度。我刚入行喜欢把所有逻辑塞进OB1,结果一个简单的启停逻辑都要滚动条拉三屏。后来改成OB1调用FC/FB,每个功能单独成块,故障时看调用关系和局部变量,几分钟就能定位。这就像收纳,所有工具扔一个大抽屉也能用,但找扳手得翻半天。分块会让项目前期多花一点时间,后期省两倍。
2.2 第4-6条:变量命名、注释、版本
第4条,变量命名要让人一眼看懂。我见过M0.0代表一堆意思,程序里写M0.0,注释里写“启动”,实际是“复位”。这种变量维护起来特别痛苦。建议统一用“区域_用途_信号”的格式,比如IO_DI_Start、Axis1_Speed_Set,既方便查找,也方便和触摸屏变量对应。自己写的程序过三个月再看,命名规范就是最好的记忆。
第5条,注释写为什么,不写做了什么。“把这个值赋给MW10”这种注释就是废话,MW10本身已经表达了这个动作。真正有用的是“上位机要求单位是mm/s,原厂是m/min,所以要乘1000”。这种注释隔三个月再看,能救你一命。我见过一个项目组,注释全是“sdfasdf”,最后没人敢动那片逻辑。
第6条,程序版本号写在注释区。我维护过一条包装线,三天改了五次逻辑,最后连自己都分不清哪个版本在现场跑。后来每次修改都在主OB1的注释里加一行“V1.3 2024-03-18 修改贴标延时”,再配合PLC程序的上传时间,谁改过一目了然。如果是多人协作,还要加“修改人”字段。
2.3 第7-10条:状态机、边沿、复位
第7条,能用状态机就用状态机。红绿灯、电梯、包装线,本质都是状态转移。状态机的好处是任何时候都知道设备在哪个阶段,下一步能干什么。千万别用一堆定时器堆逻辑,定时器一多,你根本理不清哪个先到时间。我在四层电梯项目里用了一个INT变量做状态号,每个状态一个CASE分支,调试时直接看状态号就知道电梯在做什么。
第8条,边沿信号一个变量只能用一次。在PLC里,同一个位取上升沿两次,第二次可能因为扫描周期已经错过,直接导致逻辑没触发。所以重要的M点或数据块变量,要么用临时变量,要么复制给辅助变量,别省那一个点。我的习惯是边沿操作一律写在FB接口里,不在外部重复取边沿。
第9条,复位条件集中在程序末尾处理。新手容易在每个网络里都加复位,结果一个动作清了另一个动作的置位标志。我习惯把需要复位的东西统一放一个FC里,叫ResetAll,按顺序复位,最后再复位自身。这个习惯在单步调试时特别有用,不至于手动复个位还要翻好几个网络。
第10条,程序里要留一个调试总开关。我一般做一个变量叫DebugMode,为TRUE时跳过产量累计、报警延迟等逻辑,只走主流程。不然你在现场一次一次地让设备跑完整流程,时间全耗在等待上。这个开关在正式投产前务必改成FALSE,并且加一个触摸屏密码保护,防止现场误碰。
3. 硬件接线与现场调试篇:011-020,万用表是最可靠的朋友
3.1 第11-13条:上电前先量电压和公共端
第11条,上电前先量电源电压和极性。别以为220V不会接反,N和L反了有些开关电源照样能亮,但PLC的24V电源端子就危险了。测一遍再合闸,比烧一个CPU划算得多。这里有个小技巧:先不插负载,空载测一次,接上负载再测一次,电压跌落超过5%就要查电源容量。特别是带步进驱动器、伺服驱动的柜子,启动瞬间电流很大,电源容量不够会直接把PLC拉复位。
第12条,输入公共端和传感器的极性必须一致。三线制NPN和PNP是新手最容易搞错的。接错之后有的点会常亮,有的点死活没信号,很多人第一反应是换PLC模块,其实是传感器的输出类型跟输入公共端对不上。要养成查铭牌的习惯,看是NPN还是PNP,再看PLC输入是源型还是漏型。西门子S7-200 smart的输入是漏型,公共端接24V负极,这是最基础也最常见的坑。
第13条,输出端要检查保险和浪涌抑制。带电感性负载(接触器、电磁阀)的输出端,并一个RC吸收或续流二极管,可以防止关断瞬间的反向电动势干扰旁边信号线。我见过一台设备半夜偶尔自己启动,查了三天发现是接触器线圈跟PLC输出在同一个线槽,关断时干扰把24V信号线打穿了。加装RC吸收后,问题再没出现过。
3.2 第14-16条:模拟量干扰与屏蔽
第14条,模拟量电缆必须用屏蔽双绞线,且单独走线。模拟量信号是毫伏级别,跟动力线绑在一起,变频器一启动,读数直接漂上天。屏蔽层要单端接地,通常在PLC侧接地,不要两端都接,不然地环路会产生更大干扰。现场如果空间有限必须跟动力线交叉,就保持90度垂直交叉,尽量减少耦合面积。
第15条,模拟量信号异常,先查地线和屏蔽层,别怀疑模块。我第一次遇到温度跳变,急急忙忙换模块,没用。后来发现接线端子上的屏蔽层压接不良,重新压一遍就好了。换模块是最后一步,很多模块没那么容易坏。排查模拟量问题的顺序应该是:信号线屏蔽、供电稳定性、外部干扰,最后才是模块通道。
第16条,模块通道地址和外部端子必须对清楚。西门子模拟量模块的地址不是按端子顺序排的,有的带前连接器、隔离器,你对错一个端子,程序里看到的就是另一个通道的值。建议上电后在程序里读一下原始值,再用信号发生器给标准值,校准一下地址映射。别相信脑子里记的地址表,现场改过一次线之后地址可能就变了。
3.3 第17-20条:端子、继电器、急停
第17条,接线端子拧紧后要“回拽”一下。这是老师傅教的,很多端子看着拧紧了,其实压皮没压芯。特别是带快插的弹簧端子,导线没插到位,轻轻一拽就出来。这种故障最气人,看接线都对,一震动就丢信号。我后来在IO柜接线完成后会拿手逐个轻拉一遍,拔不掉的才算合格。
第18条,高频动作的继电器触点要换成固态继电器。普通中间继电器机械寿命可能几十万次,但包装线每分钟动作几百次,几个月就坏。继电器损坏不一定是触点不通,也可能是触点粘连,把控制逻辑彻底搞乱。变频器的启停、计数器的输入,能用固态就用固态。成本会上去一点,但省下来的停机时间完全值得。
第19条,急停回路必须硬接线,不能只靠程序。我参与改造时遇到过“软急停”,按钮接PLC输入,停机靠程序断开输出。后来一次PLC死机,设备停不下来,差点出事。急停按钮要直接串在接触器控制回路里,或者用带安全功能的模块,这是红线,不能省。程序里的急停也要做,但只能作为第二层保护,不能是第一层。
第20条,PLC输出接感性负载要并RC吸收。RC的取值一般电阻100-220欧,电容0.1-0.47微法,具体按负载电流选。如果是直流负载,用续流二极管更有效,但二极管接反会短路,要注意极性。还有一个容易忽略的:RC吸收器不是万能的,如果干扰已经影响通讯,还要在PLC电源入口加磁环或滤波器。
4. 通讯与第三方设备联调篇:021-040,八成的故障出在协议和地址
4.1 第21-24条:变频器与PLC通讯
第21条,ABB变频器与西门子PLC通讯,先核对GSD/GSDML文件。用Profinet时,组态里要装对应GSDML,如果版本不对,变频器会掉线或者参数读不全。装完GSD还要核对设备名和IP,现场最烦的就是改了IP忘了改设备名。西门子的Profinet是根据设备名称识别从站的,IP只是辅助,设备名一错整个站都找不到。
第22条,用Modbus RTU和变频器通讯时,波特率、数据位、校验位、站号这四个必须一致。很多人只对波特率,校验位错一个,报文就是不通。还有个坑是ABB变频器有的型号默认从站地址是1,但前面还带一个“广播地址”概念,要用超时诊断工具看回码。最简单的办法是买一个USB转RS485调试器,自己发一条03功能码读寄存器,看变频器回不回,回就说明通讯参数对了。
第23条,AB PLC里SWJ别当硬件跳线查。有次有人问我SWJ指什么,我在AB的IO组态里查,实际是软件跳线,用来把某个物理输入映射到逻辑地址。不同型号定义有差异,最稳妥的是打开RSLogix或Studio 5000的IO Configuration在线帮助,别凭记忆。这种缩写问题,十个工程师九个靠猜,猜错了容易把IO映射搞乱。
第24条,通讯卡和PLC集成的口不一样。西门子1200集成的Profinet口只支持实时通讯,如果你非要走TCP或SEND/RECEIVE,得另外组态连接。先把通讯方式确认了再连线,不然白折腾。我见过有人用1200集成网口做Modbus TCP服务器,明明该用开放式以太网指令,结果一直用Profinet去建连接,数据就是出不来。
4.2 第25-28条:触摸屏与PLC驱动
第25条,威纶通触摸屏软件里找不到汇川PLC驱动,先看触摸屏固件版本。早期EBPro版本可能没带汇川AM系列驱动,升级到新版后驱动才会出现在设备列表里。同一台屏如果固件太老,还要先升级固件再传程序。不要一上来就怀疑软件装错了,EBPro的驱动库跟软件版本和固件版本都有关系。
第26条,信捷XD系列和MCGS通讯,站号不能设成0。MCGS设备窗口添加驱动时,COM口和波特率都要与PLC一致,站号错误会出现“设备连接失败”。我遇到过用USB转串口调试,波特率设成9600但信捷默认是19200,怎么也不行,改成19200秒连。USB转串口芯片也很关键,买模块建议选CP2102或FT232,别用劣质PL2303,容易莫名断连。
第27条,汇川AM系列和威纶通用EtherNet/IP,除了IP地址,还要注意目标站号是否一致。很多新手以为填了IP就行,其实EtherNet/IP连接要指定路径,路径里的以太网模块地址写错同样连不上。在威纶通的“控制器/服务器”设置里,有一个“IP地址”和一个“站号”,两个都要对,缺一不可。
第28条,KEBA是什么PLC、能不能当西门子用?KEBA是欧洲的工业控制器品牌,底层用CoDeSys,编程思路和西门子不一样。它多用在机械手和注塑机领域,你拿西门子的习惯去搜地址区会懵:它没有传统I/Q/M的分配方式,变量和任务要自己在CoDeSys里建。选型的时候别只看硬件参数,要看你团队熟不熟CoDeSys生态。
4.3 第29-32条:SCADA与上位机
第29条,SCADA连不上PLC,先ping通物理链路,再查令牌或用户名。有一次排查半天,最后发现上位机和PLC不在同一网段,静态路由没配。SCADA软件一般会显示设备状态,如果状态闪断,大多是通讯超时设太短。把超时时间从500ms改到2000ms,闪断会少很多,但也不能无脑调大,会影响故障响应。
第30条,OPC UA比老式DDE/OPC DA好用。DDE在Win10上容易崩,OPC DA还要配DCOM,权限麻烦。新项目直接上OPC UA,跨平台、走防火墙都省心。如果PLC不支持OPC UA,可以用网关把Modbus转成UA。我现在做上位机几乎不碰DDE,单点故障率太高,改UA之后稳定度是天壤之别。
第31条,C#读PLC数据,轮询频率别拍脑袋设成10ms。我见过有人用OPC UA Client把服务器读到卡死。现场一般数据点不多时,500ms循环已经很快了,需要高实时性的数据用订阅方式,让PLC在变化时主动推,而不是死循环读。C#里用System.Threading.Timer控制轮询间隔,不要用while true加Thread.Sleep,后者一旦界面卡住会越积越多。
第32条,程序里一定要做通讯状态字。通讯断了如果程序没感知,设备会停在半空,人或物料卡在中间。我在PLC里建一个心跳位,上位机每500ms回写一次,PLC在1秒内没收到心跳就进入安全停机。这个做法在SCADA、触摸屏、MES对接时通用,成本低,但能避免80%的“设备自作主张”。
4.4 第33-40条:串口、无线、DHCP这些通讯“小坑”全在这
第33条到第36条其实是一组:同一网段别同时开DHCP和固定IP、多主站通讯要设心跳包、触摸屏宏指令别乱用、组态软件把掉线报警做成变量。这四条看着基础,但项目多了之后,坑真的一个不少。尤其是宏指令,频繁读写屏幕变量会占用PLC扫描时间,看上去程序没卡,实际运行周期翻倍。触摸屏能做的显示和按键,尽量让它只做交互,别掺和逻辑。
第37条到第40条:串口线必须用屏蔽线、无线通讯要加确认重试机制、换PLC型号后通讯地址要重新映射、远程监控要划好网段。举个例子,仓库两台设备用无线AP通讯,距离稍远就丢包。后来加了重发机制,丢包后设备不是直接停,而是等确认,才把误停机的投诉解决。这些细节不写在PLC手册里,都要在调试时自己踩出来。
5. 仿真与软件工具篇:041-050,省了硬件却费头发
5.1 第41-44条:PLCSIM Advanced启动失败排查
第41条,S7-PLCSIM Advanced实例启动报error11且没有任何报错,先别怀疑软件装坏了。最常见的原因是上一次仿真没有正常关闭,残留实例没释放。把PLCSIM Advanced的实例管理器打开看看,有感叹号的旧实例先删除,或者重启一下“Siemens PLCSIM Advanced Service”这个Windows服务,再新建实例。我试过好几次,删旧实例后秒好。
第42条,实例启动不了还要查端口占用。PLCSIM Advanced默认用5000、5001等端口,如果电脑上装了其他工业软件或虚拟机,端口被占了,它一样会报错。用netstat -ano查一下端口PID,把占用进程关掉,再启动就正常了。这个坑在笔记本上特别常见,因为很多人会装一堆调试工具。
第43条,仿真能连上但程序不动,先看PLC状态。PLCSIM里RUN的绿灯亮不代表逻辑真的在跑,有时候CPU处于STOP,你下载完要手动按一下RUN按钮。如果RUN点不掉,多半是程序里有致命错误,打开事件日志看诊断信息。仿真软件不会像真实PLC那样强制显示诊断灯,日志里一般会写“OB被调用时错误”,按这个去查。
第44条,PLCSIM Advanced v5.0不是所有CPU都支持。它主要支持1500系列PLC和部分1200型号,如果你用的是老型号或组态版本过高,实例根本创建不出来。先在官方兼容列表里核对,不要浪费时间。遇到过有人用V4.0的项目硬在V5.0里建实例,提示兼容但下装后程序行为不对,最后还是重建项目解决。
5.2 第45-47条:仿真明显不等于实机
第45条,仿真时间基准和真实IO有差异。我用S7-PLCSIM调一个高速计数程序,仿真里计数正常,上实机后发现丢了好多脉冲。后来才意识到普通数字输入响应速度跟不上编码器频率,必须换高速计数器模块。仿真能验证逻辑,验证不了硬件速度。所以涉及编码器、伺服控制、高速IO的项目,别光靠仿真交差。
第46条,仿真模式下必须做一个“仿真标志”。我曾用仿真程序不小心触发了一个输出点,结果把现场的电磁阀打开了,好在没有伤人。从那以后,我在程序里增加一个SIM_Mode变量,仿真时置TRUE,凡是涉及负载输出的逻辑统统加联锁,避免仿真直接控真实IO。这个习惯后来救过我一次,在客户现场跑仿真排故障,忘了切模式,输出被联锁挡住,啥事没有。
第47条,博途里下载仿真程序前,先确认在线CPU类型。有一次我拿1200的项目去仿1500,居然也能建实例,但下装后程序里某些指令行为不对。仿真软件会报“设备不兼容”,别忽略,重新选型再试。选错型号有时不会直接报错,但程序运行结果就是怪,比如定时器精度、保持区行为都不一样。
5.3 第48-50条:老软件与兼容性问题
第48条,三菱FX2的老编程软件FXGP/WIN在Win10/11上经常装不上或提示驱动异常,别硬刚。用虚拟机装个Win7或XP模式,或者改用GX Developer/GX Works2打开FX2项目,都比在Win10上折腾强。重点注意:老软件通过串口下载时,USB转串口的驱动也要选兼容型号,否则下载到一半就“通讯错误”。
第49条,编程软件报错中文乱码或项目文件打不开,先检查系统区域语言。很多日系软件在中文系统里容易乱码,把系统区域改为“日语”或“英语”再重装一次就能解决。这个问题在官网常见问答里一般都有,但新手不知道去哪查。我同事的GX Works2在Win11上乱码,改完区域语言后,连以前打不开的老项目都能打开了。
第50条,低版本软件打开高版本项目会静默丢块。博途和GX Works都有这种情况,你打开时它不报错,保存后再发现有些FB不见了。遇到客户给的项目,最好装对应版本或更高版本,别用小版本去硬顶。我见过一个项目,用TIA V13打开V15的程序,下载后电机控制块丢了,现场直接没法开动,后来重新从V15导出来才恢复。
6. 典型项目实战篇:051-075,单机好写,系统联动坑多
6.1 第51-60条:红绿灯、电梯、大棚
第51条,十字路口红绿灯程序用状态机写法。四个方向、红黄绿三个灯,本质是四个状态循环。我用一个INT变量代表当前状态,再用定时器触发状态切换。千万别用八个定时器互相清零的写法,出故障时连哪个灯没变都看不出来。红绿灯这个案例是很多PLC培训班的入门项目,但入门项目里藏着一个重要思想:状态转移表比定时器堆逻辑清晰十倍。
第52条,红绿灯切换必须加全红缓冲时间。这是我在学校做课设时忽略的。南北绿灯灭掉的同时东西绿灯如果立刻亮,现场会瞬间冲突。加一个1-2秒的全红状态,所有方向都在红灯,再进下一个绿灯。程序里就是两个相邻状态之间插一个过渡状态。这个过渡状态不需要外部输入,定时器到了就自动切,但必须单独写,不能顺手并到下一个状态里。
第53条,四层电梯控制程序,别想用一个状态机全包。我拆成三个部分:升降运行、开门关门、楼层呼叫。升降运行负责方向和到站判断,开关门负责门锁和延时,楼层呼叫负责内外呼登记。这样任何一个环节有问题,不会连带整个电梯逻辑乱掉。我在实际调试中还发现,内呼和外呼优先级不一样,外呼要排队、内呼可以插队,硬塞进一个状态机会非常难改。
第54条,电梯平层信号必须有滤波,门锁和光幕要互锁。电梯不比普通设备,信号抖一下就可能造成急停。平层感应器我用30ms的ON延时,过滤掉短暂抖动。光幕被遮挡时绝对不能关门,程序里要做成硬条件,而不是靠触摸屏按钮置位。还有一点:门锁信号要同时接到硬线安全回路和PLC输入,两个都要满足才能走车。
第55条,大棚灌溉系统别把湿度传感器放在喷头正下方。我吃过这个亏:传感器测出来湿度90%,实际土壤干得开裂。喷灌时水滴直接落在探头上,读数瞬间拉高,系统以为够湿不出水。传感器要装在两株作物之间、离地面20-30厘米的位置,取平均值再判断。最好一个棚放三个传感器,取中间值,别用单个传感器的瞬时值直接控制。
第56条到第60条,时间轮询、配方、编码器计数、门锁监控、品牌迁移。我把这些放在一起说,因为都是现场高频问题。比如大棚灌溉用时间轮询还是条件触发,我推荐条件触发加死区,不然频繁启停对水泵伤害很大。包装线计数一定要用高速计数器,普通输入模块根本跟不上。配方数据建议放在触摸屏或PLC数据块里,两个地方各放一份会乱了套。
6.2 第61-75条:包装线、平台差异和系统整合
第61条,包装线控制设计先分主从站。主站管逻辑和HMI,从站管输送带和阀岛。从站不要太多,超过三个从站建议走Profinet或EtherNet/IP,不要用Modbus RTU串行轮询,速度慢且容易丢站。我见过一条线挂了5个从站,Modbus轮询一圈要300ms,传感器动作快了根本来不及处理,换成EtherNet/IP后一圈不到10ms。
第62条,视觉或机械手联动时,要定义好握手信号。我做过一条包装线,视觉检测完给PLC一个OK/NG信号,结果NG信号只有200ms,PLC扫描周期40ms,偶尔会漏掉。后来让视觉把信号保持到PLC给出应答信号才释放,一劳永逸。这种握手逻辑在PLC里就是一对“置位/复位”的交互,两边都要写,不能只让视觉等PLC。
第63条,汇川Easy系列属于Codesys平台,程序块可以复用。很多人把它当三菱用,其实要调整思路:在Codesys里把FB、FC封装成库,下一个项目直接导入,能省一半开发时间。汇川AM系列和Easy系列在编程上很接近,都是基于IEC61131-3。他们的生态跟西门子TIA完全是两套逻辑,变量没有I/Q/M的固定区域,而是靠结构化变量绑地址。
第64条,倍福PLC用TwinCAT,本质是Windows实时扩展,支持C/C++、结构化文本。它的优势是软PLC、运动控制一体化,但学习曲线陡。如果公司没有统一平台,别拿倍福跟西门子直接比,选型要跟着技能树走。倍福项目里实时任务和Windows进程的关系要理清,不然一个蓝屏直接把控制放了。
第65条,不同品牌PLC统一用Modbus TCP互连,省心。西门子、三菱、汇川、信捷基本都支持,做网关不如直接走标准协议。缺点是需要处理功能码限制,比如批量读取寄存器个数有限制,但总比每个品牌写一套私有协议强。我现在的原则是:能走标准协议就不走厂商私有协议,私有协议虽然配置简单,但同一项目里品牌多了就是灾难。
第66条到第70条,看门狗、诊断、归档、备件。我在调试包装线时发现客户最关心的是故障能不能快速恢复。所以程序里我一定会写报警文本和故障代码,触摸屏上直接显示“贴标机气缸不到位”,而不是显示一个线圈号。报警文本要分级:一般提示、警告、停机,别把所有问题都做成停机,否则一个小传感器抖动就让整条线停半天。
第71条到第75条,我留给“AI生成PLC代码”这个话题。现在很多工程师用AI写PLC代码,我的态度是用,但别盲信。AI生成的ST代码能省时间,但它不了解你的输入输出映射和现场安全条件,一定要先仿真再上机。我同事让AI写了一段红绿灯程序,状态切换条件完全合理,但没有全红缓冲时间,直接拿去用是会出事的。把AI当同事,不把AI当救命稻草。
7. 设备管理与防宕机篇:076-090,半夜叫醒你的多半是这些
7.1 第76-80条:到期自动停机的设计
第76条,PLC设置时间到期自动停机,用CPU时钟加比较指令,别用外部RTC。很多PLC的CPU自带日期时间,读取当前时间,跟设定的到期时间比较,到时间就把主输出置零。注意要留一个程序内部标志,防止上电一瞬间误触发。我一般把到期日存在保持型变量里,每次上电和运行中都做一次比较,一旦到期就不会自动恢复。
第77条,到期停机之后,一定要留一个复位窗口。我接过一个改造项目,客户设备到期停机后,复位密码丢失,整个产线停了三天。后来我设计成:到期后先停机,但管理员在HMI输入密码可以进入“维护延期模式”,可以再运行24小时方便备份数据。这样既保护权益,也不把人逼到墙角。做设备的人一定要考虑售后体验,停机机制做得太死,最后挨骂的还是自己。
第78条,PLC宕机最常见的三个原因:IO短路、通讯风暴、电源跌落。IO短路会让模块过流保护触发,严重的把背板母排打掉。通讯风暴是某个设备不停发错误帧,把CPU的通讯任务占满。电源跌落则会导致CPU瞬停重启。先查这三样,再考虑程序死循环。有次设备总在夜间停机,后来发现是屋顶风机启停导致电压瞬间跌落,加了个延时继电器就好了。
第79条,看门狗时间调大反而更难排查。西门子OB80里可以设置时间,如果你把循环监控时间从10ms改成100ms,程序死循环不会立刻报警,现场故障会更隐蔽。正确做法是保持默认,用OB80记录导致超时的块号,按块号排查。我见过一个项目为了“防止报警误触发”,把看门狗调成500ms,结果PLC卡死三天没人知道,最后查出来是某个FB里写了个while死循环。
第80条,通信错误处理里加大延时重连。很多设备停机是因为通讯瞬间中断后,系统里没有重连机制,CPU一直处于等待状态。加一个3秒的延时,让通讯先恢复到稳定状态,再继续动作,能减少大量无缘无故的停机。这个不是掩盖问题,而是给通讯提供一个恢复窗口,真正的故障还是要在日志里查。
7.2 第81-85条:宕机排查和防护细节
第81条,存储卡和电池电压要列入点检表。PLC的保持程序是存在内部Flash或存储卡里,电池只维持实时时钟和保持寄存器。电池电压低会丢失保持数据,还可能导致启动时报“保持区错误”。点检表上每季度记录一次电池电压,是个好习惯。锂电池和纽扣电池不一样,老款S7-300的电池座要用万用表量着测,别只看灯。
第82条,程序里禁止对系统状态区直接写操作。有人为了让设备复位快,直接写某些系统地址,比如三菱的M8000监控、西门子的部分系统DB。一旦写错,PLC可能进入不可预测状态。所有复位都要通过PLC自己的指令去操作,不要用“强制写入”。强制功能只能在调试时用,交付前要把所有强制点清掉,这是死规矩。
第83条,掉电保持区不能用得太随意。西门子的M区和DB可以通过属性设置保持,三菱用D区的一部分。设计时要把保持变量单独集中,别今天用M0明天用M200,备份和恢复会乱套。每次上电后,程序还要对保持区做一次“和校验”或“版本号检查”,防止数据意外丢失后设备带病运行。很多设备上电后动作诡异,就是保持区里存了半年前的残留数据。
第84条,现场更换CPU前先备份,并记录模块版本。很多旧项目没有程序光盘,只有卡里一份程序,换CPU前要上传,还要看固件版本,如果版本不对可能直接不兼容。换完要做一次完整下装,再核对IP和站号。我吃过亏:换了CPU忘了重新分配设备名称,Profinet站直接掉线,排查了好久。
第85条,机柜风扇堵了也会导致PLC死机。工业PLC允许温度范围一般0-60度,但长期堵塞风道的机柜,温度能到70多度,CPU运行会报错。我在巡检时用红外测温枪扫一下机柜内部,超过50度就要清理风扇或加装空调,这钱不能省。
7.3 第86-90条:巡检、归档和写经验
第86条,雷雨季节重点检查网口和DI模块,加防浪涌模块。工业现场雷电感应不光从电源进来,通讯线也会感生高压。网口和485口建议装工业级防雷器,成本不高,能省下整块CPU的钱。室外设备更要在PLC电源入口加三级防雷,而不是只靠一个UPS。
第87条,冗余系统切换测试要模拟真实断线。别只拔电源或者拔网线,要测试PLC内部模块故障、CPU主备切换时程序是否保持数据。有一次我们拔了主CPU网线,备CPU切换成功,但电机控制字丢了,设备还是停了。后来才知道控制字没有放到保持区,切换过程中被清掉。冗余不是加了硬件就完事,程序侧的数据同步同样要测。
第88条,远程修改PLC程序后,必须保持版本同步,改完立即归档。现在很多设备支持远程维护,改完如果没下载到本地,下次去现场一打开都是旧程序,特别容易被误会。我用网盘按“项目名+日期+修改内容”命名,每次必传。还有一点:在线修改时如果PLC不能停机,要用“在线下载”而不是“全量下载”,否则会把其他正在运行的块也停掉。
第89条,每个项目结束输出“地址分配表”和“故障代码清单”。地址表要列出所有I/Q/M/DB实际用途,故障清单要统计半年内的报警文本,这些比程序本身更值钱。我在交接项目时,还会写一份“上电步骤”和一页“故障快速排查表”,维保人员拿着就能干活,基本不用半夜给我打电话。
第90条,坚持记录“今天修了什么”。我每天下班前花五分钟记一条,三四年下来就有了这90条。写经验最大的好处不是分享,而是逼你复盘。很多问题当下解决了没总结,下次换个设备换个软件照样抓瞎。我现在回看当年的笔记,有的记录特别幼稚,但正是那些幼稚的提问帮自己把原理想明白了。
8. 给入行1-3年的你几句实在话
8.1 先学会现场蹲点,再谈技术
1-3年不要天天坐在电脑前面写程序。我第一次独立调包装线时,拿着程序在机台旁蹲了一下午,看每个动作跟程序逻辑的对应关系。很多所谓玄学故障,其实是你没看到机械结构。气缸没到位,也许不是传感器问题,而是气缸气压不够或机械卡死。先看机械,再看程序,这是老师傅教的。
8.2 用测试脚本验证重复动作
PLC程序不能用“等会再看”来验证。我调试时习惯写一个测试模式,让设备的关键动作循环跑200次,同时记录每周期执行时间。这样能发现偶发的扫描周期超时、信号丢失。别觉得写测试模式浪费时间,它比你在现场反复按启停按钮高效得多。尤其是带气动元件的设备,连续跑一百次和跑一次完全不是一回事。
8.3 每天更新不是形式,是逼自己输出
我现在每周至少复盘两条经验,慢慢凑成90条。写这些文字并不纯粹为了展示,而是每写一条,我都会反过来问自己:当时为什么这么处理?有没有更好的方案?如果你也打算做类似的总结,建议按自己的项目领域拆分,比如物料输送、恒压供水、机器人联调,每条配一张现场照片或程序截图,过半年回头看会特别有收获。
最后再分享一个小技巧:我写这些经验时不是按时间顺序,而是按“如果再遇到,我第一步查什么”来排。比如第11条的上电前量电压,就是我在烧了一块CPU后记下的。希望这90条连载能帮到你。如果你在调试中也遇到类似问题,欢迎一起交流现场报错和处理过程,我会把有代表性的放进后续更新。毕竟PLC这行,经验不是一个人的,踩过的坑大家互通,才能少翻车。