ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

工业机器人监控十年演进:从点检表到Prometheus与Kafka的实战之路

工业机器人监控十年演进:从点检表到Prometheus与Kafka的实战之路 这十年最大的变化可能不是机器人本身长了眼睛长了脑子而是“监控”这两个字从一种被动的事后补救变成了一套贯穿设备全生命周期的主动治理手段。我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数据发给KafkaKafka里按机器人编号建了不同的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_exporterdcgm_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加飞书机器人推送日报最大的体会是监控这件事从来没有一劳永逸的终点。设备在变、架构在变、人的协作方式也在变但底层的逻辑始终没变你得先能看见设备才谈得上理解设备最终才算得上驾驭设备。希望这篇十年演进的经验之谈能给正在这条路上摸索的你一点实实在在的参考。
返回列表