PLC程序里的看门狗救了设备一条命——两个WDT实战案例,一个保住了减速机,一个避免了反应釜超温事故

干了十多年工控,说句实话——看门狗(Watchdog Timer)是我见过最不起眼但最值钱的功能。很多搞PLC的兄弟写程序从来不设看门狗,觉得那是多此一举。但我要跟你说,我亲眼见过两起事故,如果当时有看门狗,设备根本不会出事。

先说第一个案例。

案例一:传送带差点把减速机干报废

两年前给一个物流分拣中心做项目,用的S7-1500,控制一条200多米长的传送带。分拣线嘛,节奏特别快,每个分拣口都要快速动作。调试的时候一切正常,系统跑了三个月也没什么毛病。

结果有一天半夜两点,车间值班的给我打电话,说3号传送带不动了,但是电机还在嗡嗡响。

我远程看了下PLC的状态——CPU的SF灯亮红灯,处于STOP模式。到现场一看,传送带上的包裹堆了一大堆。电机那边更惨,减速机冒烟了,齿轮箱温度高得能煎鸡蛋。

查了一晚上什么原因导致CPU停机。最后发现——是我程序里的一段FOR循环出了问题。

那台分拣线有32个分拣口,每个口我有一个子程序处理包裹的推出动作。调试的时候没发现问题,是因为分拣任务没那么重。但三个月后随着业务量增加,分拣口几乎同时动作的情况越来越多。

问题出在这里:程序里的FOR循环在遍历32个分拣口的数据时,如果某几个口同时有动作,会在一个扫描周期内执行非常多的嵌套调用。正常情况下PLC扫描周期在15ms左右,但这个FOR循环偶尔会跑到800ms甚至更长。

S7-1500默认的扫描周期监控时间是150ms,超过了就会报错。那次是几个极端情况叠加在一起——外加上位机正好在大量读写数据——扫描周期飙到了1.2秒,触发了CPU的循环时间错误,CPU直接STOP了。

CPU一停,所有的输出全部复位了。但传送带的变频器是通过硬接线直接接在主回路上——PLC停了并不等于电机停了。变频器还在运行,但PLC不给速度指令了,变频器就以最后设定的频率一直跑。更糟糕的是,传送带末端的定位传感器、堵料检测全都没了信号,系统不知道物料已经堆成山了。

传送带被卡住的包裹堵死了,但电机还在转,皮带打滑造成减速机齿轮严重磨损,整个减速机报废了。换一个花了八千多,加上清理现场的停机损失,少说两万块钱打了水漂。

事后我跟同事复盘,如果当初做了两件事就能避免:

  • 第一,给FOR循环加个扫描时间监控。比如每次循环开始前记录系统时间,如果单次循环超过50ms就直接跳出循环,同时置位一个报警位给变频器发停机指令。
  • 第二,在程序末尾加一个看门狗输出。用一个定时继电器或者PLC本身的WDT输出,如果PLC停机了,这个输出能切断变频器的使能信号,电机自然就停了。
工业电柜和设备特写

案例二:反应釜差点出了大事故

这个案例更吓人,是我一个化工厂的朋友跟我讲的。

他们的反应釜用西门子S7-300控制,反应温度要严格控制在120±2℃。程序用了PID模块控制导热油阀门的开度来调节温度。系统正常运行了两年都没出过问题。

有一天,PLC的电源模块出了故障——不是完全断电,而是输出电压从24V掉到了18V左右,仍然在”工作”,但已经处于不稳定状态。这种”半死不活”的状态是最难排查的。

因为是电源电压不足,CPU虽然没完全停机,但执行程序越来越慢,IO模块读取的信号也开始飘。温度传感器读到的数值停留在110℃不动了——不是真正的温度值,而是电源不稳导致的模拟量输入异常。

但PID模块以为温度偏低,就拼命开大导热油阀门。实际反应釜里的温度早就往140℃、150℃去了。操作工在DCS屏幕上看到温度一直显示110℃(其实是死值了),以为还在正常范围内。

好在他们车间有一个独立的超温报警系统(硬接线温度开关,不依赖PLC),在温度达到155℃的时候触发了紧急排放。反应釜的安全阀打开,物料被紧急排放到了应急罐里,避免了一次化学反应失控事故。

事后检查,如果那个硬接线温度开关晚几分钟动作,或者当初根本没装——反应釜里的温度继续往上升,后果真的不敢想。

我朋友后来在程序里加了两个看门狗逻辑:

  • CPU间看门狗(Inter-CPU WDT):CPU和I/O模块之间定期互相”握手”,如果模拟量输入模块超过500ms没有更新数据,CPU立即关断加热输出并报警。
  • 通讯看门狗:上位机每2秒给PLC发一条心跳指令,PLC如果在5秒内没收到,就认为上位机或通讯链路异常,自动切换到本地独立控制模式。

PLC看门狗的几种常见用法

说到这,我把平时用看门狗的一些经验列一下,供兄弟们参考:

1. CPU系统看门狗(每个PLC都有)

西门子S7-1200/1500默认的扫描周期报警时间是150ms,超了CPU会报OB80组织块错误。如果你不处理这个错误,CPU就跑STOP。

建议做法:在OB80里写一个处理程序,把故障信息记录下来,然后给CPU发一个”继续运行”的指令,不要直接STOP。同时把关键输出复位到安全状态。这样即使扫描时间偶尔超标,设备也不会突然停机。

2.PLC输出看门狗(硬接线方案)

在PLC程序里,用一个M位做一个脉冲输出——每次扫描周期翻转一次(比如用1秒定时器)。把这个脉冲接到一个安全继电器或者中间继电器的线圈上。继电器的常开触点串在变频器/电机的主回路里。

如果PLC正常跑,继电器每隔1秒吸合一次,保持导通。如果PLC停机了,脉冲没了,继电器断开,主回路切断,电机自然就停了。这个方案成本不到50块钱,但关键时刻能保住几十万的设备。

3. 通讯看门狗(软件方案)

PLC和上位机之间、主PLC和远程IO站之间,建立心跳机制。上位机每N毫秒发一个指令给PLC,PLC维护一个计时器,如果到时间没收到心跳,就认为通讯断开,去执行预设的安全动作。

S7-1200的TMAILC指令也可以用来做超时报警——如果心跳断了,直接发一封邮件或者短信给维护人员。一个小时响应和五分钟响应,区别可能就是一台设备的存亡。

4. 程序级看门狗(子程序超时监控)

当你的程序里有一段可能耗时较长或被中断的逻辑(比如大量数据处理、通讯轮询、配方计算),在进入这段逻辑之前记录一个启动时间,退出时检查耗时。如果超过预设值(比如500ms),跳过错位逻辑并报警。

三菱FX系列可以用D8010系统寄存器读取当前扫描周期,超过设定值时触发报警。西门子用RUNTIME指令或RD_SYS_T来获取运行时间。

写到最后

看门狗这个东西,说简单是真简单——就是检测程序有没有按预期在执行。但说值钱也是真值钱——一台减速机八千块,一个反应釜的损失可能是百万级别的。

我在评估一个控制系统安不安全的时候,第一个看的就是有没有看门狗机制。如果整个系统里没有任何Watchdog,那不管用多贵的PLC、多好的做工,在我看来都是”裸奔”状态。

你们有没有遇到过PLC停机或者死机导致设备故障的情况?当时是怎么处理的?有没有应急措施?欢迎在评论区分享你的踩坑经验。

上一篇 进口设备协议不公开,我用AI逆向解析了它的RS485通讯——大模型+逻辑分析仪破解非标协议的实战
下一篇 招一个懂PLC的年轻人要等三个月——2026年工控行业用人荒调查,我跑了12个城市问了50个厂的真实情况