ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

CNC测头数据如何真正融入MES质量闭环

CNC测头数据如何真正融入MES质量闭环 1. 项目概述一条被忽视却决定质量闭环成败的“神经末梢”在车间里CNC机床轰鸣运转测头轻轻触碰工件表面几毫秒内就完成一次高精度坐标采集——这看似寻常的一次测量背后藏着一个长期被低估的系统性难题测头变量如何真正进入MES的质量管理主干道我不是在讲“数据能传上去”这种表层问题而是指从CNC内部PLC寄存器里的原始浮点数比如#50042.3789到MES系统中可追溯、可统计、可关联工艺参数、可驱动SPC分析的质量报表中间那条完整、稳定、带上下文语义的数据链路。它不是简单的“把数字发出去”而是要解决变量命名不统一、时序错位、工件ID绑定失效、异常值无标识、测量点与图纸特征脱节、多台设备数据格式打架等一连串现场级痛点。这个项目我带团队在长三角一家汽车零部件厂落地了三套产线覆盖FANUC 31i-B、西门子840D SL和国产华中HNC-818B三种主流CNC平台最终让质检员不用再手工抄录测头数据、工艺工程师能直接在MES里点开某批次零件的“全尺寸测量热力图”、质量主管每周自动生成的CPK趋势报表准确率从62%提升到99.4%。如果你正被“测头数据传上去了但用不起来”“MES里有质量模块却像摆设”“每次审核都说‘数据链路不完整’”这类问题卡住这篇就是为你写的实操手记——不讲虚概念只拆真实产线里拧螺丝、配参数、调接口的每一个细节。2. 数据链路的整体设计与思路拆解为什么必须放弃“直连MES”的幻想2.1 传统方案的三大死穴为什么90%的“测头对接MES”项目半途而废很多工厂一上来就想让CNC直接通过OPC UA或Modbus TCP把#500、#501这些变量推给MES结果三个月后项目停摆。我复盘过17个失败案例核心问题出在三个根本性错位上第一时间维度错位。CNC测头触发是毫秒级瞬态事件而MES的工单执行、工序报工是分钟级事务操作。当操作工在机床上按F1键启动测量PLC瞬间读取#500~#505六个变量并存入DB块但此时MES可能还没收到该工件的“开始加工”指令更不知道这次测量对应哪张图纸、哪个特征、哪个检验计划。结果就是数据进了MES数据库字段全是NULL或者随机挂在某个历史工单下变成“幽灵数据”。第二语义维度错位。FANUC的#500变量在A机床代表“孔径偏差”在B机床可能被程序员写成“端面平面度”而MES质量模块里定义的“特征代码”却是“HOLE_DIA_TOL_001”。没有中间层做语义映射数据就像用粤语写的合同送到北京法院——字都认识但法律效力为零。我们曾发现同一工厂三台同型号FANUC机床对同一个“主轴跳动”测量点变量地址分别是#520、#532、#548且单位一个是μm、一个是mm、一个是inchMES直接接收等于自毁数据质量根基。第三责任维度错位。CNC工程师关注“变量能不能读出来”IT工程师关注“接口协议是否合规”质量工程师关注“报表能不能生成”。没人对“从测头触碰到报表生成”这条端到端链路的完整性负责。结果就是PLC侧调试完就移交MES侧配置好就上线中间缺失的“上下文注入”“异常拦截”“版本追溯”环节全部真空。提示别急着写代码。先画一张“数据血缘图”从CNC控制面板上的物理按键开始标出每一次PLC扫描周期内变量的来源G代码触发M代码触发定时扫描、存储位置DB块R寄存器、单位、量程、有效位数再标出MES中对应的质量特征项ID、检验标准、公差带、SPC控制限。两条线没对齐之前所有开发都是沙上筑塔。2.2 我们采用的“三层桥接架构”用确定性对抗现场不确定性针对上述死穴我们彻底放弃了“CNC直连MES”的幻想构建了边缘采集层→语义转换层→业务集成层的三级桥接架构。这不是为了炫技而是每层都解决一个不可妥协的现场刚需边缘采集层部署在机床侧核心是轻量级边缘网关我们选型研华UNO-2484G它不碰CNC内部逻辑只做两件事① 通过CNC厂商认证的协议FANUC的FOCAS、西门子的S7通信以100ms周期轮询指定变量地址② 在本地缓存最近1000条测量记录并打上精确到毫秒的时间戳、机床IP、程序名、当前刀具号。关键设计在于它不依赖CNC的“主动推送”而是“主动快照”哪怕CNC断电重启网关缓存的数据也能在恢复后补传避免单点故障导致数据断链。语义转换层部署在车间服务器这是整个链路的“翻译官”和“守门员”。我们用PythonFlask搭建了一个微服务核心功能有三①变量-特征映射引擎维护一张Excel配置表后续会详解将#500映射为“特征ID:ENG_BEARING_HOLE_DIA”自动转换单位μm→mm校验量程超出±50μm标为异常②上下文注入模块当网关上报一条#50025.378时服务自动关联当前机床的“正在执行的工单号”从MES的工单API实时拉取、“图纸版本号”解析G代码注释行中的%DRAW_V2.3%、“操作工ID”读取CNC操作面板登录信息③数据整形器把原始浮点数25.378转为标准JSON结构{feature_id:ENG_BEARING_HOLE_DIA,value:25.378,unit:mm,tolerance_min:25.350,tolerance_max:25.390,status:OK,timestamp:2024-06-15T09:23:45.123Z}。这个结构才是MES能消化的“营养餐”不是CNC吐出来的“生肉”。业务集成层对接MES这里我们坚决不用MES厂商提供的“万能数据接入插件”而是基于若依框架Ruoyi的RESTful API规范定制开发质量数据接收接口。关键点在于① 接口要求携带X-Data-Source: CNC_MEASUREMENT请求头MES后台据此路由到专用质量数据处理队列② 每条数据必须包含batch_id批次号和work_order_item_id工单明细ID否则直接拒收倒逼前两层确保上下文完整③ 接收成功后返回{receipt_id:REC_20240615_001234}网关侧记录此ID用于后续审计追踪。整条链路不追求“实时”而追求“可验证”——每条数据都有唯一溯源ID从测头触碰那一刻起就能在MES里查到它经过哪台网关、被哪个服务转换、由谁审核入库。2.3 为什么选若依框架作为MES底座不只是开源更是可控性刚需网络热词里反复出现“基于若依框架的MES”这绝非偶然。在对接测头数据这种强实时、高可靠需求场景下若依框架相比商业MES有三个不可替代的优势第一源码完全透明。当MES质量模块需要新增一个“测量点热力图”页面时商业MES厂商可能给你报价80万3个月排期而若依框架下我们直接修改ruoyi-system/src/main/java/com/ruoyi/system/controller/QualityController.java加一个GetMapping(/heatMap)接口1小时搞定。更重要的是当发现MES数据库里quality_measurement表缺少cnc_machine_ip字段导致无法反查源头时我们能直接在ruoyi-system/src/main/resources/mapper/system/QualityMapper.xml里补上字段映射而不是等厂商下一个季度的补丁包。第二权限模型极度灵活。测头数据涉及CNC操作工、班组长、质量工程师、工艺工程师四类角色他们对数据的查看、编辑、导出权限完全不同。若依框架的Shiro权限体系支持细粒度到按钮级如“导出SPC报表”按钮仅对质量主管开放而商业MES的RBAC模型往往只能控制到菜单级导致“质量员能看到所有机床的原始测量值”存在数据泄露风险。第三API治理成本极低。若依框架默认提供Swagger UI所有接口文档自动生成、实时更新。当我们为语义转换层开发质量数据接收接口时只需在Controller方法上加ApiOperation(接收CNC测头测量数据)注解前端同事就能立刻看到请求体示例、响应格式、错误码说明。对比某国际大厂MES的SOAP接口光是理解WSDL文件就花了我们两周还因厂商文档版本滞后导致三次联调失败。注意若依框架虽好但切忌直接用社区版上线。我们强制要求所有生产环境MES必须基于若依V4.7.0Ruoyi-Cloud分支二次开发核心原因是该版本修复了Spring Cloud Gateway在高并发下丢失请求头的BUG——这个BUG会导致网关上报的X-Data-Source头丢失整条链路身份认证失效。这是我们在压力测试中踩出的坑务必提前规避。3. 核心细节解析与实操要点从变量地址到质量报表的每一处魔鬼细节3.1 CNC侧变量地址的“黄金十六字诀”命名、范围、单位、触发测头变量不是随便读几个寄存器就行必须建立一套车间级规范。我们推行的“黄金十六字诀”是统一命名、限定范围、强制单位、明确触发。这不是技术要求而是管理要求必须由工艺部牵头、设备部和质量部会签。统一命名禁止使用#500、#501这类纯数字代号。要求所有新编CNC程序在测量前必须用#1001代表“主轴承孔径”、#1012代表“法兰端面平面度”等有意义的变量名。FANUC系统支持#variable_name语法西门子840D支持$AA_IW[1]带注释。我们甚至在CNC操作面板上贴了一张《常用特征变量速查表》上面印着“孔径偏差→#100单位μm垂直度→#105单位arcsec”让操作工一眼看懂。限定范围所有测头变量必须存入指定DB块如FANUC的DB100西门子的DB200且只允许写入预定义的地址区间如DB100.DBW0~DB100.DBW99。这样边缘网关只需监控这100个字避免扫描整个内存区导致CNC性能下降。我们曾遇到一台老式FANUC 16i-MB因网关误扫了系统寄存器区导致CNC偶尔死机根源就是没限定范围。强制单位变量值必须是原始测量值单位固定为μm微米。这是硬性规定哪怕图纸公差是±0.05mmCNC程序也必须把0.05mm换算成50μm再写入变量。好处是语义转换层做单位转换时只需除以1000避免浮点运算误差累积。所有新购测头验收时第一项就是用标准块校验其输出单位是否为μm。明确触发测量动作必须由特定M代码触发如M123而非G代码中的任意一行。这样边缘网关可以精准捕获“测量开始”信号在M123执行后的第3个PLC扫描周期约15ms内读取变量确保读到的是最新测量值。我们严禁用“定时扫描”方式因为无法保证读取时机与测量动作同步。实操心得变量地址规范必须写入《CNC程序编制作业指导书》并纳入新员工上岗考核。我们曾发现某班组为图省事在程序里用#500#100做中转导致网关读到#500时#100已被后续程序覆盖。最终解决方案是在指导书中增加红线条款“禁止使用临时变量中转测头数据所有测量值必须直写预定义DB块”。3.2 语义转换层的配置表设计一张Excel管住所有机床语义转换层的核心是那张Excel配置表它是我们对抗“机床千人千面”的终极武器。这张表不是技术文档而是车间级管理台账由工艺工程师每月更新质量工程师审核签字。表格结构如下已脱敏序号机床编号CNC品牌程序名特征ID变量地址单位换算系数公差下限(mm)公差上限(mm)图纸版本生效日期失效日期审核人1CNC-001FANUCO1001ENG_BEARING_HOLE_DIA#1000.00125.35025.390DRAW_V2.32024-01-012024-12-31张工2CNC-002SiemensMPF1001ENG_FLANGE_PLANEDB200.DBW20.0010.0200.080DRAW_V2.32024-01-012024-12-31张工3CNC-003HNCO2001ENG_SHAFT_RUNOUT#5200.0010.0150.030DRAW_V2.42024-03-152024-12-31李工关键设计逻辑“程序名”列是灵魂网关上报数据时必须携带program_name字段语义服务根据此字段匹配配置行。这样同一台机床换不同程序加工不同零件时自动切换不同的特征映射规则。“单位换算系数”列防呆FANUC和西门子都用μm系数是0.001但某进口测头输出是inch系数就是25.4。填错这里整条链路数据全错。“生效/失效日期”列保安全当图纸改版时旧版本配置自动失效新数据不会误用旧公差。MES后台可据此生成“配置变更影响范围报告”明确告知哪些历史数据需重新评估。我们把这张表放在共享服务器上语义转换服务每5分钟自动检测文件修改时间戳发现更新立即热加载。无需重启服务配置变更秒级生效。比数据库存配置更简单比代码硬编码更灵活。3.3 MES质量报表的底层数据结构为什么必须重构quality_measurement表很多工厂直接把测头数据塞进MES原有的quality_inspection表结果报表越跑越慢最后崩溃。我们重构了质量数据表结构核心是分离“测量事实”与“检验业务”-- 新建专用表专存CNC测头原始测量事实 CREATE TABLE cnc_measurement_fact ( id BIGINT PRIMARY KEY AUTO_INCREMENT, receipt_id VARCHAR(50) NOT NULL COMMENT 网关回执ID用于审计, machine_ip VARCHAR(15) NOT NULL COMMENT 机床IP精确到设备, program_name VARCHAR(50) NOT NULL COMMENT CNC程序名, feature_id VARCHAR(100) NOT NULL COMMENT 特征ID如ENG_BEARING_HOLE_DIA, measured_value DECIMAL(10,4) NOT NULL COMMENT 测量值单位mm, tolerance_min DECIMAL(10,4) COMMENT 公差下限, tolerance_max DECIMAL(10,4) COMMENT 公差上限, status ENUM(OK,NG,ABNORMAL) DEFAULT OK COMMENT 状态OK/NG/ABNORMAL超量程, batch_id VARCHAR(50) NOT NULL COMMENT 批次号, work_order_item_id VARCHAR(50) NOT NULL COMMENT 工单明细ID, created_time DATETIME(3) NOT NULL COMMENT 测量时间精确到毫秒, context_json TEXT COMMENT 上下文JSON含图纸版本、操作工等 ); -- 原有quality_inspection表只存人工检验记录不做任何改动重构带来的三大收益查询性能提升10倍SPC报表只需查cnc_measurement_fact表数据量比混合表少85%百万级数据下聚合查询从12秒降到1.3秒。数据血缘清晰receipt_id字段可直接关联到网关日志查某条NG数据时能秒级定位是哪台网关、什么时间、用什么配置转换的。扩展性强后续要加AI预测如基于历史测量值预测刀具磨损直接在这个表上建索引、加字段不影响原有检验业务。注意表结构变更必须配合若依框架的MyBatis XML映射文件同步更新。我们要求所有SQL变更必须走Git提交且在ruoyi-system/src/main/resources/mapper/system/CncMeasurementMapper.xml中定义resultMap确保Java实体类与数据库字段严格一一对应。曾因漏改XML导致status字段始终为NULL排查了两天。4. 实操过程与核心环节实现从网关部署到报表生成的完整流水线4.1 边缘网关部署实录在FANUC 31i-B上踩过的七个坑在FANUC 31i-B上部署研华UNO-2484G网关表面看只是接根网线实际是场硬仗。以下是我在三台机床部署过程中踩出的七个典型坑及解决方案坑1FOCAS协议版本不匹配现象网关连接CNC后能Ping通但读取#100始终超时。排查FANUC 31i-B默认开启FOCAS2而网关固件只支持FOCAS1。解决在CNC系统参数中设置#11001启用FOCAS1兼容模式并重启CNC。坑2IP地址冲突导致CNC通讯中断现象网关上线后CNC操作面板显示“PMC通讯异常”加工程序频繁报警。排查网关和CNC在同一网段网关IP设为192.168.1.100而CNC的PMC网口IP恰好也是192.168.1.100。解决为CNC PMC网口单独划分VLAN192.168.2.0/24网关走独立网段物理隔离。坑3变量地址偏移计算错误现象读取#100得到的值总是乱码。排查FANUC变量地址在FOCAS中不是直接映射#100对应FOCAS地址是0x00000064十进制100但网关配置界面要求填“字节偏移”而#100是32位浮点数占4字节正确偏移是(100-1)*4396。解决编写《FOCAS地址换算速查表》#100→396#101→400#102→404...贴在网关旁。坑4PLC扫描周期干扰现象同一测量动作网关读到的#100值每次都不一样。排查网关读取时机与PLC扫描不同步有时读到测量中值有时读到测量后值。解决在CNC程序中加入G04 X0.1暂停100ms确保测量完成后再执行M123触发信号网关在M123后第3周期读取。坑5防火墙拦截FOCAS端口现象网关日志显示“Connection refused”。排查FANUC默认FOCAS端口是8193但Windows防火墙默认阻止。解决在CNC所在工控机上执行netsh advfirewall firewall add rule nameFOCAS dirin actionallow protocolTCP localport8193。坑6网关缓存溢出现象CNC连续加工时网关Web界面显示“Cache Full”后续数据丢失。排查网关默认缓存500条而某工序每30秒测一次25分钟就满。解决修改网关配置文件/etc/unogw/config.ini将cache_size1000并启用自动清理策略。坑7断电后时间戳错乱现象CNC断电重启网关上报数据的时间戳变成1970年。排查网关RTC电池耗尽断电后时间归零。解决更换CR2032电池并配置NTP服务器自动校时命令systemctl enable ntpd ntpdate cn.pool.ntp.org。实操心得每次部署前必须用FANUC官方工具FOCAS Monitor先验证变量读取确认无误再装网关。我们自制了一张《网关部署Checklist》包含以上七坑的验证步骤新工程师必须逐项打钩签字缺一项不许上线。4.2 语义转换服务开发用Python实现高可靠数据整形语义转换服务我们用Python 3.9Flask开发核心代码不足200行但每个环节都做了生产级加固。以下是关键模块实现配置热加载模块# config_loader.py import pandas as pd from datetime import datetime import os CONFIG_PATH /opt/cnc-mes/config/mapping.xlsx config_last_modified 0 config_df None def load_config(): global config_df, config_last_modified current_mod os.path.getmtime(CONFIG_PATH) if current_mod ! config_last_modified: # 读取Excel时跳过失效行 df pd.read_excel(CONFIG_PATH) now datetime.now() df df[(df[生效日期] now) (df[失效日期] now)] config_df df config_last_modified current_mod print(f[INFO] 配置已更新共{len(df)}条有效映射) return config_df数据校验与整形模块# data_processor.py def process_measurement(raw_data): raw_data: dict, 包含machine_ip, program_name, variables等 返回标准化JSON含完整上下文和状态判断 config load_config() # 1. 根据program_name匹配配置行 match_row config[config[程序名] raw_data[program_name]] if match_row.empty: raise ValueError(f未找到程序{raw_data[program_name]}的配置) # 2. 读取变量值并单位转换 var_addr match_row.iloc[0][变量地址] raw_value raw_data[variables].get(var_addr, 0) converted_value raw_value * match_row.iloc[0][单位换算系数] # 3. 公差判断 tol_min match_row.iloc[0][公差下限(mm)] tol_max match_row.iloc[0][公差上限(mm)] if converted_value tol_min or converted_value tol_max: status NG elif abs(converted_value) 1000: # 超量程阈值 status ABNORMAL else: status OK # 4. 注入上下文从MES API实时获取 work_order get_work_order_from_mes(raw_data[machine_ip]) return { feature_id: match_row.iloc[0][特征ID], measured_value: round(converted_value, 4), tolerance_min: tol_min, tolerance_max: tol_max, status: status, batch_id: work_order[batch_id], work_order_item_id: work_order[item_id], context_json: json.dumps({ drawing_version: match_row.iloc[0][图纸版本], operator_id: raw_data.get(operator_id, UNKNOWN) }) }高可用保障使用Supervisor守护进程崩溃自动重启每条数据处理前后打日志含receipt_id便于审计内存中缓存最近1000条receipt_id防止重复数据入库幂等性每5分钟向Prometheus推送指标cnc_measurement_processed_total{statusOK} 1245。4.3 MES质量报表开发在若依框架中嵌入SPC分析能力在若依框架中开发质量报表我们没用现成的图表插件而是深度集成ECharts实现真正的交互式SPC分析。核心页面路径/system/quality/spc。数据接口开发// QualityController.java GetMapping(/spc/data) ApiOperation(获取SPC分析数据) public TableDataInfo spcData(RequestParam String featureId, RequestParam String startTime, RequestParam String endTime) { // 1. 从cnc_measurement_fact表查原始数据 ListCncMeasurementFact facts cncMeasurementService.listByFeature( featureId, startTime, endTime); // 2. 计算SPC统计量均值、标准差、UCL/LCL double mean facts.stream().mapToDouble(CncMeasurementFact::getMeasuredValue).average().orElse(0); double std calculateStd(facts, mean); // 自定义标准差计算 double ucl mean 3 * std; double lcl mean - 3 * std; // 3. 构造ECharts所需数据格式 ListMapString, Object seriesData new ArrayList(); for (CncMeasurementFact f : facts) { MapString, Object item new HashMap(); item.put(x, f.getCreatedTime().getTime()); // 时间戳 item.put(y, f.getMeasuredValue()); item.put(status, f.getStatus()); seriesData.add(item); } MapString, Object result new HashMap(); result.put(seriesData, seriesData); result.put(ucl, ucl); result.put(lcl, lcl); result.put(mean, mean); return getDataTable(result); }前端ECharts配置关键部分// spc.vue option { tooltip: { trigger: axis, formatter: function(params) { const p params[0]; return 时间${new Date(p.value[0]).toLocaleString()}br/ 测量值${p.value[1].toFixed(3)}mmbr/ 状态${p.data.status OK ? 合格 : p.data.status NG ? 不合格 : 异常} } }, xAxis: { type: time }, yAxis: { type: value, name: 测量值 (mm), splitLine: { lineStyle: { type: dashed } } }, series: [{ name: 测量值, type: line, data: seriesData, markLine: { data: [ { name: UCL, yAxis: ucl, lineStyle: { color: #FF6B6B } }, { name: LCL, yAxis: lcl, lineStyle: { color: #4ECDC4 } }, { name: 均值, yAxis: mean, lineStyle: { color: #45B7D1 } } ] } }] }报表特色功能点击NG点弹出该次测量的完整上下文包括当时机床温度、冷却液压力、刀具磨损量从CNC PMC读取拖拽选择时间段自动重算CPK下方显示CPK1.67过程能力充足导出PDF报告含公司LOGO、审核签名栏、数据溯源二维码扫码直达MES数据库记录。5. 常见问题与排查技巧实录产线现场最常问的12个问题5.1 问题速查表从现象到根因的快速定位现象可能根因排查步骤解决方案MES中查不到某次测量数据网关未上报 / 语义服务未匹配配置 / MES接口拒收① 查网关日志grep receipt /var/log/unogw.log② 查语义服务日志grep No config app.log③ 查MES Nginx日志grep 400 /var/log/nginx/access.log网关检查CNC通讯状态语义确认程序名拼写MES检查batch_id是否为空数据值明显错误如25.378变成25378单位换算系数填错 / 变量地址偏移错误① 查配置表单位换算系数列② 用FOCAS Monitor验证地址读取值系数应为0.001不是1地址偏移变量号-1×4报表中NG率100%但实际合格公差上下限填反 / 单位不一致① 查配置表公差下限/上限列② 查语义服务日志中converted_value值下限必须小于上限确认CNC变量单位是μm同一特征多次测量值波动极大CNC测头未校准 / PLC扫描周期干扰① 用标准块复测② 在CNC程序中加G04 X0.1延时重新校准测头调整网关读取时机网关频繁断连CNCIP冲突 / 防火墙拦截 / FOCAS端口未开① Ping CNC IP② telnet CNC_IP 8193③ 查CNC参数#1100划分独立网段开放防火墙启用FOCAS1MES报表加载超时cnc_measurement_fact表未建索引①EXPLAIN SELECT * FROM cnc_measurement_fact WHERE feature_idXXX② 查执行计划ALTER TABLE cnc_measurement_fact ADD INDEX idx_feature_time (feature_id, created_time);5.2 独家避坑技巧那些手册里不会写的实战经验技巧1用“影子变量”解决CNC程序升级导致的变量地址变更当CNC程序从O1001升级到O1002原#100可能变成#105。如果直接改配置表历史数据就断链了。我们的方案是在CNC程序中新增“影子变量”如#900#100保持#900地址不变配置表永远指向#900。这样程序升级时只需改内部逻辑对外接口不变。技巧2在网关侧做“数据可信度标记”单纯传数值不够我们让网关在上报时附加reliability_score字段100M123触发PLC周期内读取时间戳精确80定时扫描无触发信号时间戳为网关本地时间50手动输入来自操作面板。MES报表中SPC分析只用score90的数据避免低质量数据污染统计结果。技巧3建立“测量点-图纸特征”双向追溯机制在MES中每个feature_id如ENG_BEARING_HOLE_DIA不仅关联公差还关联CAD图纸中的具体图元ID。当质量员在报表中点击某个NG点系统自动打开PDF图纸并高亮显示该孔位。实现方式在配置表中增加cad_element_id列MES后台用PDF.js渲染图纸时根据此ID定位图元坐标。技巧4为夜班操作工设计“傻瓜式”异常上报流程夜班时工程师不在操作工发现测头数据异常传统流程要等白天处理。我们的方案在CNC操作面板上增加“异常上报”软键按下后自动触发M124网关捕获
返回列表