这十年最大的变化,可能不是机器人本身长了眼睛长了脑子,而是“监控”这两个字从一种被动的事后补救,变成了一套贯穿设备全生命周期的主动治理手段。我2014年刚入行时,车间里对机器人的所谓监控,基本等同于“坏了再查”;到2024年再回头看,Zabbix、Prometheus、Kafka这些IT圈子里的工具已经成了车间里的常客,甚至飞书机器人定时推送日报都成了标配。这篇文章不打算写成编年史,而是捡几个我亲手踩过的现场节点,把这些年机器人监控的路怎么走过来的、每一阶段最核心的问题和解题思路讲清楚,希望给正在做产线运维、设备数采和机器人集成的朋友一点可以拿来就用的参考。
1. 从点检表到硬接线:机器人监控“元年”的真实样貌
1.1 最早的监控不是仪表盘,而是“人过去按一下”
2014年前后,国内很多工厂对工业机器人的管理还停留在“点检”阶段。那时候我和同事手里拿的不是手机上的实时曲线,而是一沓纸质点检表,每天上班先围着ABB、库卡、安川的机柜转一圈,看看控制器屏幕上有没有红灯,听一听电机有没有异响,摸一摸控制柜温度是不是偏高。这套动作说白了就是最原始的人工监控,它有效,但也极其依赖人的经验和勤快程度。
当时不光是管理手段落后,机器人本身也根本没预留多少数据出口。早期的机器人控制器虽然也有RS232、DeviceNet这类通信口,但多数默认没有打开,或者需要专门的软件授权才能启用。你想从控制器里读一个关节角度、读一个当前报警码,要么接个示教器人工抄,要么通过总线把I/O点映射到PLC里再用上位机去读。等于说,机器人本身是一座信息孤岛,你得先在物理层给它修一条路,后面的一切监控才谈得上。
1.2 硬接线时期的典型拓扑:PLC当“传话筒”
我做过一个很典型的项目,客户车间里有六台川崎机器人做搬运,因为产线节拍问题,经常出现机器人没到位但下一工位已经在等待的情况。最初的监控方案就是在PLC里做梯形图逻辑,把每台机器人的运行准备信号、故障信号、节拍完成信号通过硬接线接到PLC的输入模块,再在触摸屏上做一个简单的状态页面,亮绿灯表示正常,红灯表示报警。这套系统本身不算复杂,但它是那个年代最标准的做法:I/O点表要一个一个对,接线要按图纸核对三遍,最后还要在PLC程序里给每个信号起一个看得懂的名字,比如“ROB1_FAULT”“ROB2_HOME”之类。
这里有个非常容易被忽视的坑:硬接线信号本身是有寿命的。DC24V的继电器输出,如果动作频率比较高,触点氧化、弹跳松动都会导致信号丢包或误触发。我有一次排查一个“机器人频繁报警但现场又没有任何故障”的问题,查了半天才发现是中间继电器触点老化,导致PLC误采集了一个常闭信号翻转。
1.3 为什么这个阶段容易“监控了等于没监控”
说实话,硬接线+PLC的方案放在今天看,信息量是非常单薄的。你只能知道机器人在一个抽象层级是“正常”还是“故障”,但完全不知道故障码是什么、卡在哪个姿态、负载率多少、已经连续运行了多少小时。换句话说,这种监控看到的是“断了”还是“没断”,而不是“为什么会断”。
当时ABB的RobotStudio、库卡的WorkVisual里虽然已经能看到控制器内部日志,但都要工程师手动连电脑去读,而且不同品牌各自有自己的软件和通讯协议。对运维人员来说,最大的痛点是七个品牌的机器人现场,等于要有七套监控工具,没有一套统一视图。也正是这个痛点,后来逼着我往IT监控工具那边去摸索,算是误打误撞踩进了Zabbix和Prometheus这片新大陆。
2. 当Zabbix和Prometheus闯进车间:IT化监控的跨界改造
2.1 跨界的前提:机器人开始长出“网络接口”
大概2017年之后,新推出的机器人控制器基本都标配了以太网口,有的还直接开放了基于Web Service的数据查询接口。比如ABB的Robot Web Services、库卡的KUKA Ethernet KRL、发那科的FANUC iRVision和网络通讯功能包,这些能力让IT监控工具进入车间成为可能。以前我为了读一台机器人的状态,得跟电气工程师要半天I/O点表,现在只要知道它的IP地址和开放端口,就能用脚本去轮询状态数据。
但这里必须说清楚:拥有网络接口不代表你能直接上Zabbix就抓。很多机器人控制器的以太网口出厂时只有示教器下载和调试功能,并没有把周期性的数据服务打开。你得在控制器侧额外做配置,比如ABB要在示教器上激活PC Interface功能,库卡要写好KRL程序主动触发数据发送。忽略这一步,网线插了也是白插。
2.2 从Modbus到OPC UA再到REST API:数据通道的三级跳
我在跨厂区做机器人集中监控的时候,其实走了三代技术路线,这里可以给各位捋一捋,方便你们根据现场的老旧程度选型。
第一代路线是走Modbus TCP或PROFINET把机器人当做一个从站设备来读数据。优点是兼容老控制器,只要是支持总线的机型基本都能接入;缺点也很明显,你能读到的数据往往只是DIO映射出来的一小部分,像关节扭矩、伺服电流、完整报警文本这些信息,总线层面根本拿不到。第二代路线是用OPC UA网关做协议转换,不同品牌的机器人各自提供一个OPC UA Server,把内部数据标准化成统一的节点结构。这个方案在当时已经算“豪华配置”了,但也带来两个问题:一是OPC UA的节点规范各家实现得并不一致,写映射规则的时候依然要对着每个品牌的手册翻;二是OPC UA服务如果断掉,重新连上之后数据连续性不好保证,历史回补非常麻烦。第三代路线就是现在最常用的:用控制器自带的REST API直接拉JSON数据,然后用Prometheus的exporter把它转成指标。这个方案最灵活,但也最考验上层脚本对各个品牌接口差异的处理能力,我见过很多团队直接拿Python和requests库硬写的。
2.3 Zabbix监控交换机也好,Smokeping测链路也好,关键是想清楚要什么
很多人把Zabbix和Prometheus理解成只能监控服务器,其实它们拿来监控交换机、工控机、环境传感器也完全没问题。关键词里有人问“prometheus监控交换机”,我建议先想清楚监控交换机的目的。如果是为了看链路通断和端口流量,用SNMP最直接,Prometheus的snmp_exporter能抓到端口状态、入出方向字节数、丢包计数,Zabbix那边也有原生SNMP模板,开箱即用。
至于“smokeping能监控电脑吗”,这更多是概念问题。Smokeping的强项是持续探测网络延迟和丢包率,它适合监控一条链路的稳定性,比如机器人控制柜到上位机服务器之间的物理链路是否健康。如果你关心的不是电脑本身,而是电脑到某台设备的网络质量,用它非常合适;但如果要监控CPU、内存、磁盘这些主机指标,Smokeping就完全不是它的菜,应该回到Zabbix或者Prometheus的node_exporter上来。
2.4 普罗米修斯平台落地车间时的三个细节
Prometheus在监控界的地位不用我多吹,但真正把它搬到车间环境里,有几个坑是很多人不会在文档里告诉你的。第一,车间网络和办公网经常是隔离的,你需要在车间侧单独部署一套Prometheus实例,或者用Pushgateway模式把机器人数据推到内网边缘服务器,否则防火墙会把你折磨疯。第二,机器人控制器的在线状态不是连续的,很多控制器在急停、断电、断网的时候会直接不响应采集,如果你的采集任务里还带着“失败即告警”的默认策略,那恭喜你,每天都能收到几百条假告警。第三,指标设计要克制,不要一口气把机器人所有寄存器全采上来,先挑最能反映健康状况的那十几个:CPU占用率、控制器温度、伺服报警码、急停状态、当前程序号、已运行小时数、当前关节角度、扭矩百分比,这些足够覆盖日常80%的监控需求。
3. 日志、队列与告警:用Kafka和ELK承接机器人数据洪流
3.1 当每一台机器人都开始“说话”,你得有接收的能力
随着监控点位增多,数据量很快就从“每秒几KB”涨到了“每分钟几MB”。关节角度、扭矩、电流、程序变量、报警记录,再加上PLC那边的传感器数据,一台机器人一天就能产生上百万条记录。如果所有数据都直接写数据库,业务侧的读写压力会非常大;这时候就需要Kafka这类消息队列做缓冲,把机器人的高频数据先堆积在Topic里,再由消费程序按需拉取写进Elasticsearch或者时序数据库。
我自己搭过一套简单的链路:机器人侧用采集脚本把JSON数据发给Kafka,Kafka里按机器人编号建了不同的Topic;下游用Logstash消费并把数据写入Elasticsearch,最后用Kibana做可视化。这套链路的优势是解耦,机器人的采集频率和写入频率互不限制,哪怕下游ES暂时挂了,Kafka还能替你缓冲几个小时的数据,不会丢。缺点就是组件变多,维护成本上来了,对运维人员的要求一下子从“会看PLC”提升到了“会调Kafka consumer lag”。
3.2 一次因为JSON字段顺序引发的“深夜加班”
这里插一个我踩得很深的坑。有一阵子监控平台经常在凌晨三四点收到告警,提示Kafka消费者积压严重,但白天又一切正常。我去看日志,发现下游解析程序在处理某一台机器人的数据时频繁报字段格式错误,导致消费线程反复重试,最终积压了整整一夜的数据。
查到最后,原因特别荒诞:那台机器人的控制器固件升级后,输出的JSON字段顺序发生了变化,从原来的固定顺序变成了按字典序排序,而我们的解析代码里用了数组下标直接取字段,没按key名解析。就差了这么一行逻辑,整整影响了三天数据。从那以后,我给自己定了一条规矩:所有机器人上报的JSON,不管什么品牌,一律先按key解析,再校验必填字段,绝对不允许依赖字段顺序。这个经验拿去排查Kafka消费积压问题,十有八九能帮上忙。
3.3 告警要“找得到人”,飞书机器人推送表格是真的香
光有数据没有告警,监控平台等于白搭。但这几年的经验告诉我,真正难的并不是“把告警发出去”,而是“怎么发才能让人愿意看、看得懂、及时处理”。我现在的做法是三层递进:第一层是重要故障直接通过飞书机器人推送消息卡片,包含机器人编号、报警码、报警时间和当前姿态;第二层是每两小时生成一次趋势摘要,同样用飞书机器人推送到运维群里,让大家对设备状态有个大致把握;第三层是每天一早推一份带表格的日报,把昨天所有机器人的运行时长、故障次数、平均恢复时长统计好,管理层看这个表格就能决策今天哪个工位需要重点保障。
这里边有个小技巧,飞书机器人推表格时,不是真的上传Excel文件,而是把数据渲染成Markdown表格片段。实现起来只需要往飞书自定义机器人的Webhook发一条JSON,里面用text消息带上Markdown格式的表格字符串就行。这套东西看着不起眼,但在实际操作中极大降低了“看监控”的门槛,连车间班组长都能一眼看懂自己那几条线处于什么状态。
3.4 监控范围扩大:不只是机器人本体,还有产线数字化底座
到了2020年以后,机器人监控已经完全不是“盯着控制器”那么简单了。机械臂旁边要配视觉系统,视觉系统要占GPU算力;AGV要跑在自己的主控板上,主控板要连WiFi才能跟调度系统说话;机器人程序版本要跟MES里的工单对得上,程序文件有没有被误替换也要纳入监控。这些面向“软件能力”和“边缘算力”的监控,其实比监控电机温度更需要建立在可靠的日志和指标底座上。
所以我一直有句话想跟同行说:与其纠结某台机器人是不是该换减速机了,不如先把整个车间的数据采集和消息链路做扎实。数据链路通,监控自然通;数据链路断,就算你买了再贵的平台,也是空中楼阁。
4. 移动机器人时代:SLAM、导航与ROS2监控的新挑战
4.1 从固定机架到自由路径,监控对象彻底变了
固定安装的六轴机械臂,不管怎么动,它的运动学模型是确定的,六个关节角度和姿态数据都存在控制器里,你只要读出寄存器就能还原它现在摆的什么姿势。但移动机器人不完全一样,它除了要监控电机状态,还要监控自己在空间里的定位、地图、全局路径和局部代价地图。同样是“机器人卡住了”,固定机臂可能是关节过载报警,AGV可能是路径规划走到了死胡同,或者激光雷达被什么东西遮挡导致定位丢失。
这时候如果还用老办法,只看PLC的启停信号,根本没法定界问题。我在一个仓储项目里就吃过这个亏:AGV在某个区域频繁停顿,用老系统看状态永远只是“运行中”和“待命”来回跳,完全看不出原因。后来接入了ROS2的一套话题数据,把/amcl_pose里的定位协方差、/local_costmap里的代价、/cmd_vel里的速度指令同时拉出来对比,才发现是该区域点云地图有轻微漂移,导致规划出的路径一直被膨胀层的代价给挡住。这个问题的定位,靠传统监控手段完全做不到。
4.2 ROS2话题监控的落地思路:把话题当“I/O点表”来看
ROS2机器人跟传统工业机器人的一个很大不同是,它的状态分散在成百上千个Topic里,而且话题名没有统一标准,不同厂家的机器人命名习惯千差万别。所以监控ROS2机器人,第一步不是找工具,而是确定监控对象:你到底关心定位精度,关心导航状态机(Nav2目前的状态是PLANNING还是CONTROLLING),还是关心底层电机驱动器的温度?确定清楚之后,再把对应的话题接到采集程序里,转成Prometheus指标。
具体实现上,我推荐用ros2 topic echo把话题数据输出到stdout,再用一个简单的Python脚本在后台持续读取并转换成指标;或者更优雅一点,用rclpy写一个监控节点,直接订阅你关心的几个话题,然后通过prometheus_client把数据暴露成HTTP接口。第一次跑通的时候,我在Grafana里同时看到定位方差曲线和速度指令曲线,那种“机器人的大脑状态被实时看见”的感觉,确实比我十年前看继电器触点不知强到哪里去了。
4.3 视觉引导、AI推理与边缘算力:还得盯紧GPU和延迟
现在越来越多的机器人工位配了TVA视觉引导系统,机械臂靠2D/3D相机识别工件位置,然后实时做抓取规划。这里面的监控重点,已经从“关节角度”切换成了“视觉推理的延迟和GPU利用率”。我在实际项目里会同时监控几个指标:识别一帧耗时、目标检测的置信度、GPU显存占用、CPU排队线程数。
如果识别耗时突然从50毫秒涨到500毫秒,先别急着怀疑机器人,大概率是视觉算法那边的模型推理卡了,或者是工控机的散热导致性能降频了。所以在这类场景里,node_exporter+dcgm_exporter这类主机和GPU监控工具,重要性不亚于机器人控制器本身的监控,这套组合我已经在几个项目里当成标配来用了。
4.4 开源桌面机械臂和教材:监控技术正在走向普及
顺带说一句,最近看到Parol6这种3D打印桌面机械臂项目和大量ROS2入门教材的出现,我心里其实挺感慨的。十年前想学机器人,光一套正经的六轴控制器就得几十万,个人根本没有实操的机会;现在一个开源机械臂的BOM成本可能还不到一台手机,配合ROS2在软件层面做运动学和监控实验,已经成了很多工程师的第一堂课。对于想入行机器人监控的人来说,拿一套这样的开源平台练手,把固定机械臂的关节角度监控、力控数据采集、以及ROS2的话题监控串一遍,比直接去工厂对着ABB悟要高效得多。
5. 十年现场踩坑记录:从报警码到流程闭环的补课
5.1 一条报警码背后,可能只是根线松了
现场监控做得再花哨,最终还是要落到“报警出现之后能不能快速定位”这件事上。我遇到过一台发那科机器人频繁报SYS212类故障的情况,这个报警码在市面上流传的说法很多,有的说跟控制单元内部通信有关,有的说跟电缆连接有关。我那次排查的链路是:先看监控平台上的报警记录,确认每次报警前有没有功率波动;然后进控制器日志看是否伴随硬件报错;接着检查机器人控制柜到伺服放大器之间的动力线和编码器线,最终发现是其中一根编码器线靠近电缆拖链的位置磨损出了铜丝,导致位置反馈偶发丢失。换个说法,报警码只是结果,原因在物理链路。
这也解释了为什么我一直建议监控平台要把“报警前5分钟的趋势数据”一并保存下来。没有趋势,你只能看到一个孤零零的报警码,只能靠老师傅的经验去猜;有了前后几分钟的趋势曲线,你就能把电压跌落、电流波动、温度变化这些背景信息跟报警码对上号,排查效率完全不一样。
5.2 “SOD配置”这类软性配置,往往比硬故障更隐蔽
有一类问题比接线松了更难察觉,就是配置层面的隐性错误。很多国产和进口机器人控制器里都有一套安全或操作配置,业内常简称为SOD配置,它不像报警码会红字报错,但它会在某个特定条件满足之后悄悄改变机器人的动作表现。我在车间里遇到过一台协作机器人,同一段程序有时候运行流畅,有时候会在同一个点停顿两秒再走,监控平台上看CPU、伺服电流又全都正常。
后来仔细核对控制器的配置文件,才发现安全配置里有一个“靠近边界区域自动降速”的选项被打开了,而它对应的区域参数又设在了一个不合理的范围,导致机器人偶尔经过某个坐标点就触发降速。这种问题,靠传统监控根本抓不到,因为设备并没有“故障”,它只是在按照错误配置工作。所以我现在对监控体系的建议是:不仅要把动态数据采上来,还要把静态配置文件的版本、修改时间和关键参数项纳入定期比对,谁改了什么配置、为什么改,一定要有痕迹。监控的终点不是“看见异常”,而是“知道为什么异常”。
5.3 飞书也好,Zabbix也罢,最终都要落到“责任人”身上
十年的经验告诉我,监控体系最容易坍塌的地方,不是技术,而是责任人的确定性。很多团队最初激情满满把机器人数据都接到了Grafana上,大屏特别漂亮,但半年之后没人再看,原因无非是大家发现告警发了也没人处理,或者处理了也没人追踪闭环。我的做法是给每条告警规则都绑定一个明确的责任人和一个“处置时限”,超过时限就会自动升级到更上一级的管理群。
同时,每周做一次告警复盘,把这一周所有告警按“真故障”“误报”“重复告警”分类统计。如果误报率超过三成,优先花精力去调阈值和消抖参数,而不是继续堆告警规则。把误报降下来,大家才会对告警保持信任,监控平台才能真正活起来。
5.4 给后来者的四条实操建议
写到最后,基于这些年的实战,我想给正准备建设机器人监控体系的朋友几条具体的建议,都是我拿时间和故障换来的:
- 监控指标宁少勿滥。先用二三十个核心指标跑通流程,再逐步扩展,别一上来就想做大而全的数据湖。
- 优先打通数据链路,再考虑可视化。很多项目把Grafana大屏做得很炫,但底层采集都不稳定,大屏一关就露馅。
- 告警收敛比告警灵敏更重要。宁可晚一分钟收到准确告警,也别让运维群一天响三百遍。
- 把配置文件和程序版本纳入监控范围。机器人本体出问题的概率,有时候还真的没有配置被误改的概率高。
我从纸质点检表一路走到现在的Prometheus加飞书机器人推送日报,最大的体会是,监控这件事从来没有一劳永逸的终点。设备在变、架构在变、人的协作方式也在变,但底层的逻辑始终没变:你得先能看见设备,才谈得上理解设备,最终才算得上驾驭设备。希望这篇十年演进的经验之谈,能给正在这条路上摸索的你一点实实在在的参考。