
做过工业上位机项目的人,大概率都有过这种经历:设备在公司联调好好的,到了客户现场跑两天就出个偶发故障。现象就是“偶尔数据不刷新”“有时候下发没反应”,问客户操作了啥,说“啥也没干,它自己就这样了”。翻日志吧,就一句“读取数据失败”,再多没了。不知道是PLC那边没响应,还是串口丢包了,还是协议解析错了,还是自己业务代码写崩了。查问题全靠猜,复现全靠等,最后熬几个通宵,问题不一定找到,锅先背上了。其实根本不是你查问题能力不行,是日志体系从根上就有问题——只在业务层打了寥寥几条日志,通信、驱动、协议、UI全是黑盒,链路一断,当然无从下手。今天就结合我做过的十几个工控项目的经验,给大家讲一套工业上位机全链路日志体系的搭建方法。不用搭复杂的ELK集群,不用额外加硬件,单机就能落地,排障效率至少提升一个数量级。一、先搞懂:为什么你打了日志还是查不到问题?很多人说“我项目里也打日志了啊”,但那种日志,说白了只能用来“证明程序在跑”,真出问题啥用没有。工业上位机的日志,和普通后台软件不一样,有它自己的特殊性。1. 链路断裂,信息断层绝大多数人的日志,只打在业务逻辑层。读PLC数据失败,就记一句“读取失败”。但失败的原因可太多了:串口物理断开?Modbus校验错?PLC返回了异常码?数据长度不对?解析的时候越界了?还是线程阻塞超时了?中间每一层都没留痕,出了问题你只能一层一层猜。2. 没有上下文,孤立的报错毫无意义一条“空引用异常”扔在那,你知道是啥数据空了?用户之前做了什么操作?触