# LabVIEW数据上传接口规范文档 ## 1. 概述 本文档规定了LabVIEW系统向MES车间设备状态记录表直接写入数据的格式规范和技术要求。LabVIEW系统将通过数据库直连的方式,将采集到的设备数据实时写入MES数据库中,无需通过HTTP API接口。本文档详细说明了数据库表结构、数据格式、状态判断逻辑以及完整的开发指南。 ### 1.1 系统架构 ``` LabVIEW数据采集系统 ──直接数据库连接──→ MES数据库 ──实时读取──→ MES前端系统 ↑ 状态记录表 + 智能状态判断逻辑 ↓ 车间设备管理 → 点位管理 → 状态记录监控 ``` **关键特点**: - 🔗 **直连模式**:LabVIEW直接向数据库写入数据,无需API调用 - 🧠 **智能状态**:MES系统自动判断设备连接状态(无连接检测) - 📊 **动态解析**:前端自动解析JSON数据生成动态表格列,智能识别中文字段名 - ⚡ **实时显示**:数据写入后立即在MES前端显示 - 🏭 **工人友好**:界面全中文显示,适合工厂现场使用 ### 1.2 MES车间设备功能全流程 #### 1.2.1 功能模块概览 | 功能模块 | 页面路径 | 主要功能 | 权限要求 | |------------|------------------------------------|------------------|-------------------------------| | **车间设备管理** | `/equipment/workshop/index` | 设备CRUD、状态监控、自动刷新 | `equipment:workshop:*` | | **点位管理** | `/equipment/workshop/point/index` | 点位配置、数据项管理 | `equipment:workshop:point:*` | | **状态记录** | `/equipment/workshop/record/index` | 历史数据查看、动态列显示 | `equipment:workshop:record:*` | #### 1.2.2 完整使用流程 ``` 第一步:设备注册 ┌─────────────────────────────────────────────┐ │ MES管理员在设备管理页面添加新设备 │ │ • 填写设备编号、名称、类型、工位 │ │ • 选择设备角色(采集/控制) │ │ • 设置状态为"启用" │ │ • 系统自动生成设备ID │ └─────────────────────────────────────────────┘ ↓ 第二步:点位配置(可选) ┌─────────────────────────────────────────────┐ │ 如需按具体测量点管理数据: │ │ • 进入点位管理页面 │ │ • 配置点位名称、类型、单位 │ │ • 设置采集间隔和上传策略 │ └─────────────────────────────────────────────┘ ↓ 第三步:LabVIEW配置 ┌─────────────────────────────────────────────┐ │ LabVIEW开发人员配置数据上传: │ │ • 获取设备ID并配置数据库连接 │ │ • 按照键值对规范命名数据字段 │ │ • 实现定期数据上传 │ └─────────────────────────────────────────────┘ ↓ 第四步:数据监控 ┌─────────────────────────────────────────────┐ │ 现场工人在状态记录页面查看: │ │ • 实时设备状态(运行/停机/故障/无连接) │ │ • 历史数据趋势和统计 │ │ • 动态生成的中文数据列 │ └─────────────────────────────────────────────┘ ``` ### 1.2 📋 快速导航 | 您需要了解的内容 | 跳转到章节 | |-----------------------|-------------------------------------| | 🔍 **键值对Key如何显示**(重要) | [第8章 键值对Key映射规则](#8-键值对key映射规则详细说明) | | 🗃️ 数据库表结构和字段说明 | [第2章 数据库表结构](#2-数据库表结构) | | 📝 数据格式(JSON/键值对/嵌套) | [第3章 数据格式规范](#3-数据格式规范) | | 💻 LabVIEW程序架构和SQL模板 | [第4章 LabVIEW端开发指南](#4-labview端开发指南) | | ⚙️ MES系统配置步骤 | [第5章 MES系统端配置指南](#5-mes系统端配置指南) | | 🧪 测试用例和验收标准 | [第9章 联调测试和验收计划](#9-联调测试和验收计划) | ## 2. 数据库表结构 ### 2.1 目标表:`dm_equipment_status_record_workshop`(车间设备状态记录表) 这是存储所有设备运行数据的核心表,每条记录代表一次设备数据采集。 | 字段名 | 数据类型 | 说明 | 是否必填 | 示例值 | 备注 | |--------------------|--------------|------------------|----------|-------------------------|----------------------| | `equipment_id` | bigint | 设备ID(关联设备主表) | **必填** | `5` | 需要提前在MES系统中注册设备 | | `point_id` | bigint | 点位ID(具体测量点) | 可选 | `12` 或 `NULL` | 如果是设备整体数据可为空 | | `equipment_number` | varchar(64) | 设备编号(设备唯一标识) | **强烈推荐** | `"EQ001"` | 便于运维人员识别设备 | | `equipment_name` | varchar(128) | 设备名称(设备中文名称) | **强烈推荐** | `"配料机1005"` | 便于现场操作人员识别 | | `station_name` | varchar(128) | 工位名称(设备所在位置) | **强烈推荐** | `"配料工位1"` | 帮助定位设备物理位置 | | `equipment_status` | int | 设备运行状态代码 | **必填** | `0` / `1` / `2` | 表示设备当前运行状态,与设备基本状态分离 | | `value` | varchar(512) | 采集数据(JSON或键值对格式) | **必填** | 见下方详细说明 | 存储实际的传感器数据 | | `record_time` | datetime | 数据记录时间 | **必填** | `"2025-01-15 14:30:25"` | 数据采集的准确时间戳 | | `note` | text | 备注信息 | 可选 | `"正常采集"` | 可记录异常情况或特殊说明 | ### 2.2 设备状态代码详细说明 **重要提醒**:该状态代码是专门用于状态记录表的运行状态,与设备管理中的基本状态(启用0/停用1/故障2)是分离的概念。 #### 2.2.1 状态记录表专用代码 | 状态代码 | 中文含义 | 前端显示颜色 | 使用场景 | 何时使用 | |------|------|--------|------------|--------------------------| | `0` | 运行中 | 🟢 绿色 | 设备正常运行状态 | 设备正在生产、所有系统正常工作 | | `1` | 停机 | 🔘 灰色 | 设备停止运行但无故障 | 计划停机、换班停机、等待原料等 | | `2` | 故障 | 🔴 浅红色 | 设备发生故障需要维修 | 设备报警、传感器异常、机械故障等 | | `3` | 无连接 | 🟡 浅黄色 | 设备失去通信连接 | **系统自动判断**,LabVIEW无需手动设置 | #### 2.2.2 无连接状态自动判断逻辑 **关键说明**:`3-无连接`状态由MES系统自动判断,LabVIEW **不需要** 主动设置此状态。 **自动判断规则**: - 如果最后一条记录的`equipment_status = 0`(运行中),且距离当前时间超过**30分钟**,系统自动判断为`3-无连接` - 如果最后一条记录的`equipment_status = 1`(停机),且距离当前时间超过**3小时**,系统自动判断为`3-无连接` **实现逻辑**(MES系统内部): ```java // 获取设备最新状态记录 Date currentTime = new Date(); long timeDiffMinutes = (currentTime.getTime() - recordTime.getTime()) / (1000 * 60); Integer finalStatus = originalStatus; if (originalStatus == 0 && timeDiffMinutes >= 30) { finalStatus = 3; // 运行中超过30分钟 → 无连接 } else if (originalStatus == 1 && timeDiffMinutes >= 180) { finalStatus = 3; // 停机超过3小时 → 无连接 } ``` #### 2.2.3 与设备基本状态的区别 - **设备基本状态**(设备管理页面):启用(0)/停用(1)/故障(2) - 控制设备是否可用 - **运行状态代码**(状态记录表):运行中(0)/停机(1)/故障(2)/无连接(3) - 记录设备实时运行状况 #### 2.2.4 状态切换逻辑 ``` 正常运行流程: 0(运行中) ──计划停机──→ 1(停机) ──重新启动──→ 0(运行中) 故障处理流程: 0(运行中) ──发生故障──→ 2(故障) ──维修完成──→ 0(运行中) 无连接检测(自动): 0(运行中) ──30分钟无数据──→ 3(无连接) 1(停机) ──3小时无数据───→ 3(无连接) ``` ## 3. 数据格式规范 ### 3.1 支持的数据格式(3种方式任选其一) MES系统的前端解析器非常智能,可以自动识别并解析以下3种数据格式: #### 格式1:标准JSON格式(**强烈推荐**) 这是最灵活、最易读的格式,适合复杂的设备数据。 ```json { "temperature1": 25.5, "temperature2": 28.3, "pressure": 2.35, "current": 15.2, "voltage": 220.5, "speed": 1450, "weight": 1250.8, "alarm_status": 0, "flow_rate": 12.5 } ``` **优点**: - 字段名直观,便于理解 - 支持不同数据类型(数字、字符串、布尔值) - 前端会自动识别常用字段并生成中文列名 - 扩展性强,容易添加新字段 #### 格式2:简化键值对格式 适合简单的数值型数据,节省存储空间。 ``` "1:200,3:300,2:400,4:5" ``` **说明**: - 格式:`key:value`,用逗号分隔多个数据点 - 系统会自动将数字key转换为`数据点X`的格式显示 **前端显示效果**: | 输入格式 | key值 | 前端显示列名 | 显示值 | 说明 | |----------|-------|-------------|---------|------| | `"1:200"` | `1` | `数据点1` | `200.00` | 数字key自动转换 | | `"3:25.5"` | `3` | `数据点3` | `25.50` | 支持小数 | | `"temp:45.2"` | `temp` | `温度` | `45.20°C` | 智能识别温度关键词 | | `"press:2.5"` | `press` | `压力` | `2.50bar` | 智能识别压力关键词 | | `"motor_speed:1450"` | `motor_speed` | `转速` | `1450rpm` | 智能识别转速关键词 | **关键词智能识别规则**: - 包含`temperature`或`temp` → 显示为"温度",单位°C - 包含`pressure`或`press` → 显示为"压力",单位bar - 包含`current` → 显示为"电流",单位A - 包含`voltage` → 显示为"电压",单位V - 包含`weight` → 显示为"重量",单位kg - 包含`speed` → 显示为"转速",单位rpm - 包含`level` → 显示为"液位",单位% - 包含`flow` → 显示为"流量" - 包含`status` → 显示为"状态" - 包含`alarm` → 显示为"报警" - 其他情况 → 直接显示key值 **适用场景**:传统PLC或简单传感器数据 > 💡 **详细的Key映射规则请参考:[第8章 键值对Key映射规则详细说明](#8-键值对key映射规则详细说明)** #### 格式3:嵌套JSON格式 适合复杂设备,可以按功能模块分组数据。 ```json { "sensors": { "temp1": 25.5, "temp2": 28.3, "pressure1": 2.35 }, "motors": { "motor1_speed": 1450, "motor1_current": 15.2, "motor2_speed": 1200, "motor2_current": 12.8 }, "alarms": { "high_temp": false, "low_pressure": false, "overload": true } } ``` **优点**: - 数据结构清晰,按功能分组 - 前端会自动扁平化处理,生成列名如:"传感器_温度1"、"电机_转速1"等 - 适合大型复杂设备 ### 3.2 智能字段识别和中文显示 MES系统前端具有强大的智能识别功能,会自动将英文字段名转换为中文显示,并智能推测单位。 #### 支持的智能识别字段 | 英文关键词 | 自动识别为中文 | 推荐命名示例 | 系统自动推测单位 | 说明 | |---------------|---------|----------------------------------------------------|-------------|----------| | `temperature` | 温度 | `temperature1`, `temp_inlet`, `temp_outlet` | °C | 温度相关传感器 | | `pressure` | 压力 | `pressure1`, `press_main`, `hydraulic_pressure` | bar, MPa | 压力传感器数据 | | `current` | 电流 | `current1`, `motor_current`, `pump_current` | A | 电流检测 | | `voltage` | 电压 | `voltage1`, `main_voltage`, `control_voltage` | V | 电压监测 | | `weight` | 重量 | `weight1`, `total_weight`, `batch_weight` | kg, t | 称重系统 | | `speed` | 转速 | `speed1`, `motor_speed`, `fan_speed` | rpm | 转速监测 | | `flow` | 流量 | `flow1`, `water_flow`, `material_flow` | L/min, m³/h | 流量计数据 | | `level` | 液位 | `level1`, `tank_level`, `hopper_level` | m, mm, % | 液位/料位传感器 | | `force` | 力 | `force1`, `clamp_force`, `press_force` | N, kN | 力传感器 | | `position` | 位置 | `position1`, `valve_position`, `cylinder_position` | mm, ° | 位置传感器 | | `frequency` | 频率 | `frequency1`, `motor_freq`, `vibration_freq` | Hz | 频率检测 | | `power` | 功率 | `power1`, `motor_power`, `heating_power` | kW, W | 功率监测 | | `energy` | 能耗 | `energy1`, `total_energy`, `daily_energy` | kWh | 能耗统计 | | `count` | 计数 | `count1`, `product_count`, `cycle_count` | 个, 次 | 计数器 | | `time` | 时间 | `time1`, `cycle_time`, `process_time` | s, min | 时间测量 | | `status` | 状态 | `pump_status`, `valve_status`, `motor_status` | - | 设备状态 | | `alarm` | 报警 | `alarm1`, `high_temp_alarm`, `pressure_alarm` | - | 报警信息 | #### 智能单位检测规则 系统会根据数值大小自动推测合适的单位: ```javascript // 温度类数据 temperature: 25.5 → 自动显示为 "25.50°C" temp_inlet: 85.2 → 自动显示为 "85.20°C" // 压力类数据 pressure: 2.35 → 自动显示为 "2.35bar" pressure: 0.25 → 自动显示为 "0.25MPa" // 电流类数据 current: 15.2 → 自动显示为 "15.20A" motor_current: 8.5 → 自动显示为 "8.50A" // 重量类数据 weight: 1250.8 → 自动显示为 "1250.80kg" weight: 15.2 → 自动显示为 "15.20kg" // 转速类数据 speed: 1450 → 自动显示为 "1450rpm" motor_speed: 2800 → 自动显示为 "2800rpm" ``` #### 自定义字段命名建议 如果您的设备有特殊的测量点,建议按以下方式命名: ```json { "设备功能_测量类型_编号": 数值, "mixer_temperature_1": 45.2, // 混合器温度1 "conveyor_speed_main": 1200, // 主输送带转速 "tank_level_water": 85.5, // 水箱液位 "pump_pressure_inlet": 2.8, // 泵入口压力 "motor_current_drive": 12.3 // 驱动电机电流 } ``` ## 4. LabVIEW端开发指南 ### 4.1 前期准备工作 #### 4.1.1 设备信息注册 在开始LabVIEW开发之前,必须在MES系统中注册设备信息: 1. **登录MES系统管理后台** - 访问车间设备管理页面 - 点击"新增设备"按钮 2. **填写设备基本信息** ``` 设备编号:EQ001(必须唯一,建议使用规范编号) 设备名称:配料机1005(便于现场识别) 设备类型:选择"采集终端"或"控制设备" 工位选择:选择设备所在的具体工位 状态:选择"启用" ``` 3. **获取设备ID** - 保存后系统会自动分配设备ID(如:5) - 记录此ID,LabVIEW程序中需要使用 #### 4.1.2 LabVIEW配置文件设置 在LabVIEW项目中创建配置文件(建议使用INI格式): ```ini [数据库连接配置] ServerIP=192.168.1.100 ServerPort=3306 DatabaseName=mes_database Username=labview_user Password=your_password [设备映射配置] ; 格式:设备编号=设备ID EQ001=5 EQ002=6 EQ003=7 [设备详细信息] ; EQ001的详细信息 EQ001_Name=配料机1005 EQ001_Station=配料工位1 EQ001_Type=mixer ; EQ002的详细信息 EQ002_Name=破碎机2001 EQ002_Station=破碎工位1 EQ002_Type=crusher [采集参数配置] ; 数据采集间隔(秒) SampleInterval=5 ; 上传批次大小 BatchSize=10 ; 连接超时时间(秒) ConnectionTimeout=30 ``` ### 4.2 LabVIEW程序架构建议 #### 4.2.1 推荐的程序结构 ``` LabVIEW项目结构: ├── Main.vi // 主程序 ├── Config/ │ ├── LoadConfig.vi // 读取配置文件 │ └── equipment.ini // 设备配置文件 ├── DataAcquisition/ │ ├── SensorRead.vi // 传感器数据读取 │ ├── DataFormat.vi // 数据格式化 │ └── StatusMonitor.vi // 状态监控 ├── Database/ │ ├── DBConnection.vi // 数据库连接 │ ├── DataUpload.vi // 数据上传 │ └── ErrorHandler.vi // 错误处理 └── Utils/ ├── TimeStamp.vi // 时间戳生成 ├── JSONFormat.vi // JSON格式化 └── StatusMap.vi // 状态映射 ``` #### 4.2.2 核心VI功能说明 **1. Main.vi(主程序)** - 初始化系统配置 - 启动数据采集循环 - 错误处理和日志记录 - 程序状态监控 **2. SensorRead.vi(传感器读取)** - 读取各种传感器数据 - 数据有效性验证 - 单位转换处理 **3. DataFormat.vi(数据格式化)** - 将原始数据转换为JSON格式 - 字段命名标准化 - 数据类型转换 **4. DataUpload.vi(数据上传)** - 连接MES数据库 - 执行SQL插入操作 - 上传结果确认 ### 4.3 数据上传SQL模板 以下是标准的SQL插入语句模板,可以在LabVIEW中使用: #### 4.3.1 完整字段插入模板 ```sql -- 标准模板(推荐) INSERT INTO dm_equipment_status_record_workshop ( equipment_id, point_id, equipment_number, equipment_name, station_name, equipment_status, value, record_time, note, create_by, create_time ) VALUES ( ?, -- 设备ID(从配置文件读取) NULL, -- 点位ID(设备整体数据为NULL) ?, -- 设备编号 ?, -- 设备名称 ?, -- 工位名称 ?, -- 设备状态(0/1/2,不要设置3) ?, -- JSON数据 NOW(), -- 记录时间(使用当前时间) '自动采集', -- 备注 'labview_system', -- 创建者 NOW() -- 创建时间 ); ``` #### 4.3.2 简化插入模板(必填字段) ```sql -- 简化模板(仅必填字段) INSERT INTO dm_equipment_status_record_workshop ( equipment_id, equipment_status, value, record_time ) VALUES (?, ?, ?, NOW()); ``` #### 4.3.3 实际数据示例 ```sql -- 配料机正常运行数据 INSERT INTO dm_equipment_status_record_workshop ( equipment_id, point_id, equipment_number, equipment_name, station_name, equipment_status, value, record_time, note, create_by, create_time ) VALUES ( 5, -- equipment_id NULL, -- point_id(设备整体数据) 'EQ001', -- equipment_number '配料机1005', -- equipment_name '配料工位1', -- station_name 0, -- equipment_status(运行中) '{"temperature1":25.5,"pressure":2.35,"current":15.2,"weight":1250.8,"speed":1450}', NOW(), -- record_time '正常运行', -- note 'labview_system', -- create_by NOW() -- create_time ); -- 设备故障数据 INSERT INTO dm_equipment_status_record_workshop ( equipment_id, equipment_number, equipment_name, station_name, equipment_status, value, record_time, note, create_by, create_time ) VALUES ( 5, -- equipment_id 'EQ001', -- equipment_number '配料机1005', -- equipment_name '配料工位1', -- station_name 2, -- equipment_status(故障) '{"temperature1":85.2,"alarm_status":1,"fault_code":"OVERHEAT"}', NOW(), -- record_time '高温故障', -- note 'labview_system', -- create_by NOW() -- create_time ); ``` #### 4.3.4 LabVIEW中的参数化查询 ``` LabVIEW Database Connectivity Toolkit 使用示例: 1. 连接字符串: "Driver={MySQL ODBC 8.0 Driver};Server=192.168.1.100;Database=mes_database;Uid=labview_user;Pwd=your_password;" 2. SQL语句: "INSERT INTO dm_equipment_status_record_workshop (equipment_id, equipment_status, value, record_time) VALUES (?, ?, ?, NOW())" 3. 参数数组: - 参数1:5 (Integer) - 参数2:0 (Integer) - 参数3:JSON字符串 (String) ``` ### 4.4 数据采集和上传策略 #### 4.4.1 采集频率建议 根据不同类型的数据特点,建议采用不同的采集频率: | 数据类型 | 建议采集频率 | 上传策略 | 说明 | |------------|---------|------|------------| | **关键安全参数** | 1-2秒 | 实时上传 | 温度、压力等关键参数 | | **设备运行参数** | 5-10秒 | 批量上传 | 电流、转速、功率等 | | **生产统计数据** | 30秒-1分钟 | 定期上传 | 产量、能耗等统计数据 | | **状态变更** | 状态变化时 | 立即上传 | 设备启停、故障报警 | | **维护信息** | 1次/小时 | 定期上传 | 设备健康度、运行时长 | #### 4.4.2 批量上传机制 为了提高效率,建议使用批量上传: ```sql -- 批量插入模板(一次插入多条记录) INSERT INTO dm_equipment_status_record_workshop (equipment_id, equipment_number, equipment_name, station_name, equipment_status, value, record_time, note, create_by, create_time) VALUES (5, 'EQ001', '配料机1005', '配料工位1', 0, '{"temperature1":25.5,"pressure":2.35}', NOW(), '正常', 'labview_system', NOW()), (5, 'EQ001', '配料机1005', '配料工位1', 0, '{"temperature1":25.8,"pressure":2.32}', NOW(), '正常', 'labview_system', NOW()), (5, 'EQ001', '配料机1005', '配料工位1', 0, '{"temperature1":26.1,"pressure":2.38}', NOW(), '正常', 'labview_system', NOW()); ``` #### 4.4.3 键值对格式的实际应用示例 **示例1:传统PLC数据点** ```sql INSERT INTO dm_equipment_status_record_workshop (equipment_id, equipment_status, value, record_time) VALUES (5, 0, '1:200,2:300,3:25.5,4:1450', NOW()); ``` **前端显示效果**: - 列名:`数据点1`, `数据点2`, `数据点3`, `数据点4` - 值:`200.00`, `300.00`, `25.50`, `1450.00` **示例2:带语义的键值对** ```sql INSERT INTO dm_equipment_status_record_workshop (equipment_id, equipment_status, value, record_time) VALUES (5, 0, 'temp:45.2,press:2.8,motor_speed:1450,tank_level:85', NOW()); ``` **前端显示效果**: - 列名:`温度`, `压力`, `转速`, `液位` - 值:`45.20°C`, `2.80bar`, `1450rpm`, `85.00%` #### 4.4.4 键值对Key映射速查表 ##### 基础物理参数 | 您想监控的参数 | 建议使用的Key | 系统显示名称 | 推荐单位 | 示例 | |----------|--------------------------------------------|--------|---------|----------------------------------| | **温度相关** | `temp`, `temperature1`, `temp_inlet` | 温度 | °C | `temp:25.5` → 温度: 25.50°C | | **压力相关** | `press`, `pressure1`, `hydraulic_pressure` | 压力 | bar/MPa | `press:2.35` → 压力: 2.35bar | | **电流相关** | `current`, `motor_current`, `amp` | 电流 | A | `current:15.2` → 电流: 15.20A | | **电压相关** | `voltage`, `main_voltage`, `volt` | 电压 | V | `voltage:220` → 电压: 220.00V | | **重量相关** | `weight`, `total_weight`, `load` | 重量 | kg | `weight:1250` → 重量: 1250.00kg | | **转速相关** | `speed`, `motor_speed`, `rpm` | 转速 | rpm | `motor_speed:1450` → 转速: 1450rpm | | **液位相关** | `level`, `tank_level`, `material_level` | 液位 | % | `tank_level:85` → 液位: 85.00% | | **流量相关** | `flow`, `water_flow`, `flow_rate` | 流量 | L/min | `flow:12.5` → 流量: 12.50 | ##### 机械设备参数 | 您想监控的参数 | 建议使用的Key | 系统显示名称 | 推荐单位 | 示例 | |-----------|------------------------------------|--------|------|------------------------------------| | **振动相关** | `vibration`, `vib`, `oscillation` | 振动 | mm/s | `vibration:2.5` → 振动: 2.50mm/s | | **位置相关** | `position`, `pos`, `displacement` | 位置 | mm | `position:125.5` → 位置: 125.50mm | | **角度相关** | `angle`, `rotation`, `degree` | 角度 | ° | `angle:45.2` → 角度: 45.20° | | **扭矩相关** | `torque`, `moment`, `twist` | 扭矩 | N·m | `torque:350.8` → 扭矩: 350.80N·m | | **力相关** | `force`, `thrust`, `push_force` | 力 | N | `force:1250` → 力: 1250.00N | | **加速度相关** | `acceleration`, `accel`, `g_force` | 加速度 | m/s² | `acceleration:9.8` → 加速度: 9.80m/s² | ##### 工艺过程参数 | 您想监控的参数 | 建议使用的Key | 系统显示名称 | 推荐单位 | 示例 | |-----------|-----------------------------------------|--------|-------|-----------------------------------------| | **浓度相关** | `concentration`, `conc`, `strength` | 浓度 | % | `concentration:15.5` → 浓度: 15.50% | | **pH值相关** | `ph`, `ph_value`, `acidity` | pH值 | pH | `ph:7.2` → pH值: 7.20pH | | **粘度相关** | `viscosity`, `visc`, `thickness` | 粘度 | cP | `viscosity:250.5` → 粘度: 250.50cP | | **密度相关** | `density`, `specific_gravity`, `sg` | 密度 | kg/m³ | `density:1250.8` → 密度: 1250.80kg/m³ | | **湿度相关** | `humidity`, `moisture`, `rh` | 湿度 | %RH | `humidity:65.2` → 湿度: 65.20%RH | | **电导率相关** | `conductivity`, `conduct`, `resistance` | 电导率 | µS/cm | `conductivity:1250` → 电导率: 1250.00µS/cm | ##### 环境监测参数 | 您想监控的参数 | 建议使用的Key | 系统显示名称 | 推荐单位 | 示例 | |----------|-------------------------------|--------|-------|------------------------------| | **噪音相关** | `noise`, `sound`, `decibel` | 噪音 | dB | `noise:65.5` → 噪音: 65.50dB | | **光照相关** | `light`, `illuminance`, `lux` | 光照 | lux | `light:500` → 光照: 500.00lux | | **粉尘相关** | `dust`, `particle`, `pm25` | 粉尘 | µg/m³ | `dust:35.2` → 粉尘: 35.20µg/m³ | | **气体相关** | `gas`, `co2`, `oxygen` | 气体 | ppm | `gas:400` → 气体: 400.00ppm | ##### 能耗与效率参数 | 您想监控的参数 | 建议使用的Key | 系统显示名称 | 推荐单位 | 示例 | |----------|------------------------------------|--------|------|--------------------------------| | **功率相关** | `power`, `watt`, `kw` | 功率 | kW | `power:15.5` → 功率: 15.50kW | | **能耗相关** | `energy`, `kwh`, `electricity` | 能耗 | kWh | `energy:125.8` → 能耗: 125.80kWh | | **效率相关** | `efficiency`, `eff`, `performance` | 效率 | % | `efficiency:85.2` → 效率: 85.20% | | **频率相关** | `frequency`, `freq`, `hz` | 频率 | Hz | `frequency:50.0` → 频率: 50.00Hz | | **产能相关** | `capacity`, `output`, `throughput` | 产能 | 件/h | `capacity:120` → 产能: 120.00件/h | ##### 生产统计参数 | 您想监控的参数 | 建议使用的Key | 系统显示名称 | 推荐单位 | 示例 | |------------|-----------------------------------------|--------|-------|----------------------------------| | **计数相关** | `count`, `quantity`, `pieces` | 计数 | 个 | `count:1250` → 计数: 1250个 | | **速率相关** | `rate`, `speed_production`, `velocity` | 速率 | 件/min | `rate:25.5` → 速率: 25.50件/min | | **周期时间相关** | `cycle_time`, `duration`, `period` | 周期时间 | s | `cycle_time:45.2` → 周期时间: 45.20s | | **批次相关** | `batch`, `lot`, `group` | 批次 | 批 | `batch:12` → 批次: 12批 | | **废料相关** | `waste`, `scrap`, `defect` | 废料 | kg | `waste:2.5` → 废料: 2.50kg | | **良品率相关** | `yield`, `output_ratio`, `success_rate` | 良品率 | % | `yield:98.5` → 良品率: 98.50% | ##### 设备健康与维护参数 | 您想监控的参数 | 建议使用的Key | 系统显示名称 | 推荐单位 | 示例 | |------------|------------------------------------------|--------|------|--------------------------------| | **磨损相关** | `wear`, `abrasion`, `erosion` | 磨损 | % | `wear:15.2` → 磨损: 15.20% | | **寿命相关** | `lifetime`, `lifespan`, `remaining_life` | 寿命 | h | `lifetime:8500` → 寿命: 8500.00h | | **可靠性相关** | `mttf`, `mtbf`, `reliability` | 可靠性 | h | `mttf:2500` → 可靠性: 2500.00h | | **故障代码相关** | `fault_code`, `error_code`, `diagnostic` | 故障代码 | - | `fault_code:E001` → 故障代码: E001 | | **维护相关** | `maintenance`, `service`, `repair` | 维护 | - | `maintenance:1` → 维护: 1 | ##### 状态与报警参数 | 您想监控的参数 | 建议使用的Key | 系统显示名称 | 推荐单位 | 示例 | |----------|--------------------------------|--------|------|-----------------------| | **状态相关** | `status`, `state`, `condition` | 状态 | - | `status:1` → 状态: 1 | | **报警相关** | `alarm`, `alert`, `warning` | 报警 | - | `alarm:0` → 报警: 0 | | **启用相关** | `enable`, `disable`, `on_off` | 启用 | - | `enable:1` → 启用: 1 | | **就绪相关** | `ready`, `busy`, `idle` | 就绪 | - | `ready:1` → 就绪: 1 | | **急停相关** | `emergency`, `estop`, `safety` | 急停 | - | `emergency:0` → 急停: 0 | ##### 数字编号Key | 您想监控的参数 | 建议使用的Key | 系统显示名称 | 推荐单位 | 示例 | |-------------|-----------------------|--------|------|------------------------| | **传统PLC点位** | `1`, `2`, `3`, `4`... | 数据点X | 自动推测 | `1:200` → 数据点1: 200.00 | #### 4.4.3 错误处理和重试机制 ``` 错误处理流程: 1. 数据采集失败 → 记录错误日志 → 重试3次 → 跳过本次采集 2. 数据库连接失败 → 缓存数据到本地 → 定期重试连接 3. 上传失败 → 记录失败数据 → 重新上传(最多重试5次) 4. 网络中断 → 启用本地缓存模式 → 网络恢复后批量同步 ``` ## 5. MES系统端配置指南 ### 5.1 设备基础信息配置 #### 5.1.1 设备信息录入流程 在MES系统中需要按以下步骤配置设备信息: **第一步:添加设备** 1. 登录MES系统管理后台 2. 导航至:`设备管理` → `车间设备` → `新增` 3. 填写以下必要信息: | 字段名称 | 填写内容 | 说明 | 示例 | |----------|-------|------------------------------|-------------| | **设备编号** | 唯一标识符 | 与LabVIEW配置一致 | `EQ001` | | **设备名称** | 中文名称 | 便于现场识别 | `配料机1005` | | **设备类型** | 选择类型 | 根据实际功能选择 | `采集终端` | | **工位** | 下拉选择 | 设备实际位置 | `配料工位1` | | **设备角色** | 选择角色 | collector(采集)/controller(控制) | `collector` | | **状态** | 启用状态 | 必须选择"启用" | `启用` | **第二步:配置点位信息(可选)** 如果需要按具体测量点分别管理数据: 1. 进入:`设备管理` → `点位管理` → `新增` 2. 关联刚创建的设备 3. 配置点位详细信息: | 点位字段 | 说明 | 示例 | |----------|----------|-----------------| | **点位名称** | 测量点中文名称 | `温度传感器1` | | **点位编码** | 英文标识(可选) | `temp_sensor_1` | | **数值类型** | 选择数据类型 | `模拟量` | | **单位** | 测量单位 | `°C` | | **采集间隔** | 采集频率(秒) | `5` | #### 5.1.2 权限配置 确保相关用户具有查看权限: 1. 进入:`系统管理` → `用户管理` → `角色管理` 2. 为相关角色分配以下权限: - `equipment:workshop:list`(设备列表查看) - `equipment:workshop:query`(设备信息查询) - `equipment:workshop:record`(状态记录查看) ### 5.2 前端显示效果预览 #### 5.2.1 设备列表页面显示 配置完成后,车间设备主页将显示设备卡片: ``` ┌─────────────────────────────────┐ │ 配料机1005 (EQ001) │ │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ │ │ 工位: 配料工位1 │ │ 类型: 采集终端 │ │ 状态: [启用] 🟢 │ │ 模拟量: 5个 数字量: 3个 │ │ ─────────────────────────────── │ │ [点位管理] [状态记录] │ └─────────────────────────────────┘ ``` #### 5.2.2 状态记录页面动态列显示 系统会根据上传的JSON数据自动生成动态列: | 设备信息 | 点位信息 | 设备状态 | 温度1 | 温度2 | 压力 | 电流 | 重量 | 转速 | 记录时间 | |-------------------------------------|------|--------|---------|---------|---------|--------|-----------|---------|---------------------| | **配料机1005**
EQ001
工位: 配料工位1 | 设备整体 | 🟢 运行中 | 25.50°C | 28.30°C | 2.35bar | 15.20A | 1250.80kg | 1450rpm | 2025-01-15 14:30:25 | | **配料机1005**
EQ001
工位: 配料工位1 | 设备整体 | 🟢 运行中 | 26.20°C | 29.10°C | 2.41bar | 15.80A | 1248.30kg | 1455rpm | 2025-01-15 14:30:35 | **显示特点**: - ✅ **设备信息**:自动显示设备名称、编号、工位 - ✅ **状态显示**:A=🟢运行中,B=🟠停机,C=🔴故障,D=🔵维修 - ✅ **动态列**:根据JSON字段自动生成列 - ✅ **智能单位**:自动识别并显示合适的单位 - ✅ **缺失数据**:某个设备没有的字段显示"-" #### 5.2.3 数据详情弹窗 点击任意记录可查看详细信息: ``` ┌─────────── 设备状态详情 ───────────┐ │ 设备: 配料机1005 (EQ001) │ │ 状态: 🟢 运行中 │ │ 时间: 2025-01-15 14:30:25 │ │ ─────────────────────────────── │ │ 📊 采集数据: │ │ ┌─────────────────────────────┐ │ │ │ { │ │ │ │ "temperature1": 25.5, │ │ │ │ "temperature2": 28.3, │ │ │ │ "pressure": 2.35, │ │ │ │ "current": 15.2, │ │ │ │ "weight": 1250.8, │ │ │ │ "speed": 1450 │ │ │ │ } │ │ │ └─────────────────────────────┘ │ │ │ │ [显示原始数据] [关闭] │ └─────────────────────────────────┘ ``` ## 6. 数据验证和错误处理指南 ### 6.1 必须遵守的数据验证规则 #### 6.1.1 必填字段验证 上传数据前,请确保以下字段符合要求: | 字段名 | 验证规则 | 错误后果 | 解决方法 | |--------------------|-------------------|---------|---------------------------| | `equipment_id` | 必须是有效的数字,且在设备表中存在 | 数据插入失败 | 检查设备是否已在MES中注册 | | `equipment_status` | 只能是 A、B、C、D 之一 | 状态显示异常 | 使用标准状态代码 | | `value` | 不能为空字符串或NULL | 无法生成动态列 | 至少传输一个有效数据 | | `record_time` | 必须是有效的日期时间格式 | 时间显示错误 | 使用 YYYY-MM-DD HH:mm:ss 格式 | #### 6.1.2 数据格式验证 **JSON格式检查**: ```python # 示例验证代码(Python伪代码) import json def validate_json_data(value_string): try: # 尝试解析JSON data = json.loads(value_string) # 检查数据类型 if not isinstance(data, dict): return False, "JSON必须是对象格式" # 检查字段值 for key, val in data.items(): if not isinstance(val, (int, float, str, bool)): return False, f"字段{key}的值类型不支持" return True, "验证通过" except json.JSONDecodeError as e: return False, f"JSON格式错误: {e}" ``` **键值对格式检查**: ```python def validate_keyvalue_data(value_string): try: # 检查格式:数字:数字,数字:数字 pairs = value_string.split(',') for pair in pairs: if ':' not in pair: return False, "缺少冒号分隔符" key, value = pair.split(':') if not key.strip().isdigit(): return False, "键必须是数字" float(value.strip()) # 检查值是否为数字 return True, "验证通过" except ValueError as e: return False, f"数值格式错误: {e}" ``` ### 6.2 完整的错误处理体系 #### 6.2.1 创建错误记录表 为了更好地监控和调试,建议创建专门的错误记录表: ```sql -- 创建错误记录表 CREATE TABLE labview_upload_errors ( id BIGINT AUTO_INCREMENT PRIMARY KEY, equipment_number VARCHAR(64) COMMENT '设备编号', equipment_name VARCHAR(128) COMMENT '设备名称', error_type VARCHAR(32) COMMENT '错误类型:VALIDATION/CONNECTION/FORMAT/OTHER', error_message TEXT COMMENT '详细错误信息', original_data TEXT COMMENT '原始数据(用于问题排查)', error_time DATETIME DEFAULT NOW() COMMENT '发生时间', retry_count INT DEFAULT 0 COMMENT '重试次数', is_resolved TINYINT(1) DEFAULT 0 COMMENT '是否已解决', resolved_time DATETIME COMMENT '解决时间', INDEX idx_equipment_error_time (equipment_number, error_time), INDEX idx_error_type (error_type) ) COMMENT='LabVIEW上传错误记录表'; ``` #### 6.2.2 常见错误类型和解决方案 | 错误类型 | 错误信息示例 | 可能原因 | 解决方案 | |--------------|----------------------------|--------------|------------------| | **数据库连接** | `Connection refused` | 网络问题、服务器停机 | 检查网络连接,确认数据库服务状态 | | **权限错误** | `Access denied for user` | 数据库用户权限不足 | 联系管理员分配正确的数据库权限 | | **字段不存在** | `Unknown column 'xxx'` | 数据库表结构与程序不匹配 | 更新数据库表结构或修改程序 | | **数据过长** | `Data too long for column` | 字符串超过字段长度限制 | 截断数据或扩大字段长度 | | **JSON格式错误** | `Invalid JSON format` | JSON语法错误 | 检查JSON格式,确保语法正确 | | **设备不存在** | `Equipment ID not found` | 设备未在MES中注册 | 先在MES中添加设备信息 | | **状态码无效** | `Invalid status code` | 使用了非标准状态码 | 仅使用A、B、C、D状态码 | #### 6.2.3 LabVIEW端错误处理代码示例 ``` LabVIEW错误处理流程: ┌─────────────────┐ │ 数据采集 │ └─────┬───────────┘ │ ▼ ┌─────────────────┐ │ 数据验证 │ ── 验证失败 ──→ ┌─────────────────┐ └─────┬───────────┘ │ 记录错误日志 │ │ └─────────────────┘ ▼ 验证通过 ┌─────────────────┐ │ 数据库连接 │ ── 连接失败 ──→ ┌─────────────────┐ └─────┬───────────┘ │ 启用缓存模式 │ │ └─────────────────┘ ▼ 连接成功 ┌─────────────────┐ │ 执行INSERT │ ── 执行失败 ──→ ┌─────────────────┐ └─────┬───────────┘ │ 重试机制 │ │ └─────────────────┘ ▼ 成功 ┌─────────────────┐ │ 确认上传 │ └─────────────────┘ ``` ## 7. 完整测试用例和示例数据 ### 7.1 标准测试用例 #### 7.1.1 配料机完整测试数据 ```sql -- 测试用例1:标准JSON格式数据 INSERT INTO dm_equipment_status_record_workshop VALUES (NULL, 5, NULL, 'EQ001', '配料机1005', '配料工位1', 'A', '{"temperature1":25.5,"temperature2":28.3,"pressure":2.35,"current":15.2,"weight":1250.8,"speed":1450,"flow_rate":12.5,"alarm_status":0}', '2025-01-15 14:30:25', '正常运行', 'labview_system', NOW(), NULL, NULL), -- 测试用例2:设备状态变化数据 (NULL, 5, NULL, 'EQ001', '配料机1005', '配料工位1', 'C', '{"temperature1":85.2,"temperature2":87.3,"pressure":0.15,"current":0,"weight":1248.3,"speed":0,"alarm_status":1,"fault_code":"OVERHEAT"}', '2025-01-15 14:32:15', '高温故障', 'labview_system', NOW(), NULL, NULL), -- 测试用例3:维修状态数据 (NULL, 5, NULL, 'EQ001', '配料机1005', '配料工位1', 'D', '{"maintenance_type":"preventive","technician":"张工","start_time":"2025-01-15 15:00:00","estimated_duration":120}', '2025-01-15 15:00:00', '计划维护', 'maintenance_system', NOW(), NULL, NULL); ``` #### 7.1.2 简化格式测试数据 ```sql -- 测试用例4:简化键值对格式 INSERT INTO dm_equipment_status_record_workshop VALUES (NULL, 6, NULL, 'EQ002', '破碎机2001', '破碎工位1', 'A', '1:200,2:300,3:400,4:5,5:1450,6:15.2', '2025-01-15 14:31:00', '数据点采集', 'labview_system', NOW(), NULL, NULL), -- 测试用例5:嵌套JSON格式 (NULL, 7, NULL, 'EQ003', '包装机3001', '包装工位1', 'A', '{"sensors":{"temp1":45.2,"temp2":47.8,"humidity":65},"motors":{"motor1_speed":1200,"motor1_current":8.5},"counters":{"total_packages":1250,"current_batch":125}}', '2025-01-15 14:32:00', '正常生产', 'labview_system', NOW(), NULL, NULL); ``` ### 7.2 边界和异常测试用例 ```sql -- 测试用例6:空数据处理 INSERT INTO dm_equipment_status_record_workshop VALUES (NULL, 5, NULL, 'EQ001', '配料机1005', '配料工位1', 'B', '{"status":"idle","message":"waiting_for_material"}', '2025-01-15 14:35:00', '等待原料', 'labview_system', NOW(), NULL, NULL), -- 测试用例7:大数值测试 INSERT INTO dm_equipment_status_record_workshop VALUES (NULL, 5, NULL, 'EQ001', '配料机1005', '配料工位1', 'A', '{"total_production":999999.99,"energy_consumption":123456.78,"operating_hours":87654.32}', '2025-01-15 14:36:00', '累计数据', 'labview_system', NOW(), NULL, NULL); ``` ## 8. LabVIEW键值对改写完整指导 ### 8.1 🔄 键值对改写原则 LabVIEW开发人员应该根据以下原则来命名数据字段,确保前端能正确识别并显示为合适的中文名称: #### 8.1.1 命名原则优先级 1. **工厂工人友好性**:优先考虑现场工人能否理解 2. **系统智能识别**:使用系统预定义的关键词 3. **描述性清晰**:字段名要能明确表达测量内容 4. **一致性标准**:同类设备使用相同的命名规范 #### 8.1.2 推荐的命名格式 ``` 格式:[设备部件]_[测量类型]_[编号/位置] 优秀示例: - motor_temp_bearing1 → 电机轴承1温度 - pump_pressure_outlet → 泵出口压力 - tank_level_water → 水罐液位 - conveyor_speed_main → 主输送带转速 - mixer_current_drive → 混合器驱动电流 ``` ### 8.2 🔧 LabVIEW实际改写案例 #### 8.2.1 改写前后对比 | 改写前(不好的命名) | 改写后(推荐命名) | 前端显示效果 | 说明 | |--------------------|-----------------------------|--------------------|------------| | `AI_001` | `motor_temp` | **电机温度** | 使用语义化命名 | | `DO_002` | `pump_status` | **泵状态** | 明确设备和参数类型 | | `temp1`, `temp2` | `inlet_temp`, `outlet_temp` | **进口温度**, **出口温度** | 区分不同位置的温度 | | `pressure` | `hydraulic_pressure` | **液压压力** | 明确压力类型 | | `speed` | `motor_speed`, `fan_speed` | **电机转速**, **风扇转速** | 区分不同设备的转速 | | `value1`, `value2` | `flow_rate`, `tank_level` | **流量**, **罐液位** | 使用具体的测量参数名 | #### 8.2.2 完整的设备改写示例 **配料机设备改写示例:** ```json // 改写前:传统PLC风格命名 { "AI001": 45.2, "AI002": 48.5, "AI003": 2.35, "AI004": 15.2, "DI001": 1, "DI002": 0 } // 改写后:智能识别命名 { "motor_temp": 45.2, "bearing_temp": 48.5, "hydraulic_pressure": 2.35, "motor_current": 15.2, "pump_status": 1, "emergency_stop": 0 } ``` **前端显示效果对比:** | 改写前显示 | 改写后显示 | |--------------|-------------------| | AI001: 45.20 | **电机温度**: 45.20°C | | AI002: 48.50 | **轴承温度**: 48.50°C | | AI003: 2.35 | **液压压力**: 2.35bar | | AI004: 15.20 | **电机电流**: 15.20A | | DI001: 1 | **泵状态**: 1 | | DI002: 0 | **急停**: 0 | ### 8.3 🏭 按设备类型的改写指导 #### 8.3.1 配料机设备 ```json { "motor_temp": 65.5, // 电机温度 "bearing1_temp": 55.2, // 轴承1温度 "bearing2_temp": 58.3, // 轴承2温度 "gearbox_temp": 48.5, // 减速器温度 "hydraulic_pressure": 2.35, // 液压压力 "motor_current": 15.2, // 电机电流 "motor_voltage": 220, // 电机电压 "mixer_speed": 1450, // 搅拌转速 "material_weight": 1250.8, // 物料重量 "tank_level": 85.2, // 料罐液位 "conveyor_speed": 120, // 输送带转速 "vibration_alarm": 0, // 振动报警 "emergency_stop": 0 // 急停状态 } ``` #### 8.3.2 泵类设备 ```json { "pump_pressure_inlet": 1.8, // 泵进口压力 "pump_pressure_outlet": 4.2, // 泵出口压力 "motor_temp": 62.3, // 电机温度 "pump_temp": 45.8, // 泵体温度 "motor_current": 18.5, // 电机电流 "pump_speed": 2850, // 泵转速 "flow_rate": 25.6, // 流量 "vibration": 2.1, // 振动值 "seal_pressure": 0.5, // 密封压力 "cooling_temp": 35.2, // 冷却水温度 "run_status": 1, // 运行状态 "fault_alarm": 0 // 故障报警 } ``` #### 8.3.3 风机设备 ```json { "motor_temp": 58.7, // 电机温度 "bearing_temp_front": 52.3, // 前轴承温度 "bearing_temp_rear": 54.1, // 后轴承温度 "motor_current": 22.8, // 电机电流 "fan_speed": 1425, // 风机转速 "air_pressure": 1.2, // 风压 "air_flow": 850, // 风量 "vibration_x": 1.8, // X轴振动 "vibration_y": 2.1, // Y轴振动 "noise_level": 68.5, // 噪音水平 "filter_pressure": 0.05, // 过滤器压差 "damper_position": 75 // 风门开度 } ``` ### 8.4 📝 LabVIEW代码实现指导 #### 8.4.1 JSON字符串构建 ```labview // LabVIEW中构建JSON字符串的推荐方式 String concatenation method: motor_temp_str = Format Into String("%.2f", motor_temp_value) bearing_temp_str = Format Into String("%.2f", bearing_temp_value) pressure_str = Format Into String("%.2f", pressure_value) json_string = "{" + "\"motor_temp\":" + motor_temp_str + "," + "\"bearing_temp\":" + bearing_temp_str + "," + "\"hydraulic_pressure\":" + pressure_str + "," + "\"motor_current\":" + current_str + "," + "\"pump_status\":" + status_str + "}" ``` #### 8.4.2 数据库插入代码模板 ```sql -- LabVIEW数据库插入的标准SQL模板 INSERT INTO dm_equipment_status_record_workshop ( equipment_id, equipment_number, equipment_name, station_name, equipment_status, value, record_time, note, create_by, create_time ) VALUES ( 5, -- 设备ID(从MES系统获取) 'EQ001', -- 设备编号 '配料机1005', -- 设备名称 '配料工位1', -- 工位名称 0, -- 设备状态(0-运行中) ?, -- JSON数据(参数化查询) NOW(), -- 记录时间 '自动采集', -- 备注 'labview_system', -- 创建者 NOW() -- 创建时间 ); ``` #### 8.4.3 键值对格式实现 ```labview // 如果使用简单的键值对格式 key_value_string = "motor_temp:" + motor_temp_str + "," + "bearing_temp:" + bearing_temp_str + "," + "hydraulic_pressure:" + pressure_str + "," + "motor_current:" + current_str + "," + "pump_status:" + status_str // 前端显示效果: // 电机温度: 65.50°C // 轴承温度: 55.20°C // 液压压力: 2.35bar // 电机电流: 15.20A // 泵状态: 1 ``` ## 9. 键值对Key映射规则详细说明 ### 9.1 🔧 智能识别关键词 当key中包含以下关键词时,系统会自动识别并显示对应的中文名称: #### 9.1.1 基础物理参数 | 输入Key | 系统识别为 | 前端显示列名 | 自动单位 | 示例 | |---------------------------------------------------------|-------|--------|-------|--------------------------------------| | `temp`, `temperature`, `temperature1` | 温度 | **温度** | °C | `temp:25.5` → **温度: 25.50°C** | | `press`, `pressure`, `pressure1`, `hydraulic_pressure` | 压力 | **压力** | bar | `press:2.35` → **压力: 2.35bar** | | `current`, `motor_current`, `amp`, `amperage` | 电流 | **电流** | A | `current:15.2` → **电流: 15.20A** | | `voltage`, `main_voltage`, `volt`, `v_supply` | 电压 | **电压** | V | `voltage:220` → **电压: 220.00V** | | `weight`, `total_weight`, `mass`, `load` | 重量 | **重量** | kg | `weight:1250` → **重量: 1250.00kg** | | `speed`, `motor_speed`, `rpm`, `revolution` | 转速 | **转速** | rpm | `motor_speed:1450` → **转速: 1450rpm** | | `level`, `tank_level`, `liquid_level`, `material_level` | 液位 | **液位** | % | `tank_level:85` → **液位: 85.00%** | | `flow`, `water_flow`, `flow_rate`, `flowmeter` | 流量 | **流量** | L/min | `flow:12.5` → **流量: 12.50** | #### 9.1.2 机械设备参数 | 输入Key | 系统识别为 | 前端显示列名 | 自动单位 | 示例 | |-----------------------------------------------|-------|---------|------|----------------------------------------| | `vibration`, `vib`, `oscillation`, `shake` | 振动 | **振动** | mm/s | `vibration:2.5` → **振动: 2.50mm/s** | | `position`, `pos`, `displacement`, `distance` | 位置 | **位置** | mm | `position:125.5` → **位置: 125.50mm** | | `angle`, `rotation`, `degree`, `angular` | 角度 | **角度** | ° | `angle:45.2` → **角度: 45.20°** | | `torque`, `moment`, `twist`, `rotation_force` | 扭矩 | **扭矩** | N·m | `torque:350.8` → **扭矩: 350.80N·m** | | `force`, `thrust`, `push_force`, `pull_force` | 力 | **力** | N | `force:1250` → **力: 1250.00N** | | `acceleration`, `accel`, `g_force`, `shock` | 加速度 | **加速度** | m/s² | `acceleration:9.8` → **加速度: 9.80m/s²** | #### 9.1.3 工艺过程参数 | 输入Key | 系统识别为 | 前端显示列名 | 自动单位 | 示例 | |------------------------------------------------------|-------|---------|-------|---------------------------------------------| | `concentration`, `conc`, `density_ratio`, `strength` | 浓度 | **浓度** | % | `concentration:15.5` → **浓度: 15.50%** | | `ph`, `ph_value`, `acidity`, `alkalinity` | pH值 | **pH值** | pH | `ph:7.2` → **pH值: 7.20pH** | | `viscosity`, `visc`, `thickness`, `consistency` | 粘度 | **粘度** | cP | `viscosity:250.5` → **粘度: 250.50cP** | | `density`, `specific_gravity`, `sg`, `bulk_density` | 密度 | **密度** | kg/m³ | `density:1250.8` → **密度: 1250.80kg/m³** | | `humidity`, `moisture`, `water_content`, `rh` | 湿度 | **湿度** | %RH | `humidity:65.2` → **湿度: 65.20%RH** | | `conductivity`, `conduct`, `resistance`, `impedance` | 电导率 | **电导率** | µS/cm | `conductivity:1250` → **电导率: 1250.00µS/cm** | #### 9.1.4 环境监测参数 | 输入Key | 系统识别为 | 前端显示列名 | 自动单位 | 示例 | |--------------------------------------------------|-------|--------|-------|------------------------------------| | `noise`, `sound`, `decibel`, `acoustic` | 噪音 | **噪音** | dB | `noise:65.5` → **噪音: 65.50dB** | | `light`, `illuminance`, `brightness`, `lux` | 光照 | **光照** | lux | `light:500` → **光照: 500.00lux** | | `dust`, `particle`, `pm25`, `pollution` | 粉尘 | **粉尘** | µg/m³ | `dust:35.2` → **粉尘: 35.20µg/m³** | | `gas`, `co2`, `oxygen`, `o2`, `emission` | 气体 | **气体** | ppm | `gas:400` → **气体: 400.00ppm** | | `radiation`, `radioactivity`, `dose`, `exposure` | 辐射 | **辐射** | mSv | `radiation:0.05` → **辐射: 0.05mSv** | #### 9.1.5 能耗与效率参数 | 输入Key | 系统识别为 | 前端显示列名 | 自动单位 | 示例 | |-------------------------------------------------------|-------|--------|------|------------------------------------| | `power`, `watt`, `consumption`, `kw` | 功率 | **功率** | kW | `power:15.5` → **功率: 15.50kW** | | `energy`, `kwh`, `electricity`, `consumption_total` | 能耗 | **能耗** | kWh | `energy:125.8` → **能耗: 125.80kWh** | | `efficiency`, `eff`, `performance`, `utilization` | 效率 | **效率** | % | `efficiency:85.2` → **效率: 85.20%** | | `frequency`, `freq`, `hz`, `cycles` | 频率 | **频率** | Hz | `frequency:50.0` → **频率: 50.00Hz** | | `capacity`, `output`, `throughput`, `production_rate` | 产能 | **产能** | 件/h | `capacity:120` → **产能: 120.00件/h** | #### 9.1.6 生产统计参数 | 输入Key | 系统识别为 | 前端显示列名 | 自动单位 | 示例 | |------------------------------------------------------|-------|----------|-------|--------------------------------------| | `count`, `quantity`, `pieces`, `total_count` | 计数 | **计数** | 个 | `count:1250` → **计数: 1250个** | | `rate`, `speed_production`, `velocity`, `pace` | 速率 | **速率** | 件/min | `rate:25.5` → **速率: 25.50件/min** | | `cycle_time`, `duration`, `period`, `interval` | 周期时间 | **周期时间** | s | `cycle_time:45.2` → **周期时间: 45.20s** | | `batch`, `lot`, `group`, `batch_size` | 批次 | **批次** | 批 | `batch:12` → **批次: 12批** | | `waste`, `scrap`, `defect`, `reject` | 废料 | **废料** | kg | `waste:2.5` → **废料: 2.50kg** | | `yield`, `output_ratio`, `success_rate`, `pass_rate` | 良品率 | **良品率** | % | `yield:98.5` → **良品率: 98.50%** | #### 9.1.7 设备健康与维护参数 | 输入Key | 系统识别为 | 前端显示列名 | 自动单位 | 示例 | |-----------------------------------------------------|-------|----------|------|------------------------------------| | `wear`, `abrasion`, `erosion`, `degradation` | 磨损 | **磨损** | % | `wear:15.2` → **磨损: 15.20%** | | `lifetime`, `lifespan`, `remaining_life`, `hours` | 寿命 | **寿命** | h | `lifetime:8500` → **寿命: 8500.00h** | | `mttf`, `mtbf`, `reliability`, `uptime` | 可靠性 | **可靠性** | h | `mttf:2500` → **可靠性: 2500.00h** | | `fault_code`, `error_code`, `diagnostic`, `trouble` | 故障代码 | **故障代码** | - | `fault_code:E001` → **故障代码: E001** | | `maintenance`, `service`, `repair`, `check` | 维护 | **维护** | - | `maintenance:1` → **维护: 1** | #### 9.1.8 状态与报警参数 | 输入Key | 系统识别为 | 前端显示列名 | 自动单位 | 示例 | |---------------------------------------------|-------|--------|------|---------------------------| | `status`, `state`, `condition`, `mode` | 状态 | **状态** | - | `status:1` → **状态: 1** | | `alarm`, `alert`, `warning`, `fault` | 报警 | **报警** | - | `alarm:0` → **报警: 0** | | `enable`, `disable`, `on_off`, `switch` | 启用 | **启用** | - | `enable:1` → **启用: 1** | | `ready`, `busy`, `idle`, `working` | 就绪 | **就绪** | - | `ready:1` → **就绪: 1** | | `emergency`, `estop`, `safety`, `interlock` | 急停 | **急停** | - | `emergency:0` → **急停: 0** | ### 9.2 🔢 数字Key处理 | 输入Key | 前端显示列名 | 示例 | |-------|------------|--------------------------------| | `1` | **数据点1** | `1:200` → **数据点1: 200.00** | | `2` | **数据点2** | `2:300` → **数据点2: 300.00** | | `100` | **数据点100** | `100:45.5` → **数据点100: 45.50** | ### 9.3 📝 其他Key处理 如果key不包含任何识别关键词,系统会直接显示key值作为列名: | 输入Key | 前端显示列名 | 示例 | |---------------|-----------------|---------------------------------------------| | `xyz` | **xyz** | `xyz:123` → **xyz: 123.00** | | `custom_data` | **custom_data** | `custom_data:456` → **custom_data: 456.00** | ### 9.4 💡 最佳实践建议 **推荐命名格式**:`设备功能_测量类型_编号` ``` 优秀示例: - mixer_temperature_1 → 温度: XX.XX°C - pump_pressure_inlet → 压力: XX.XXbar - motor_current_drive → 电流: XX.XXA - tank_level_water → 液位: XX.XX% - conveyor_speed_main → 转速: XX.XXrpm ``` **避免的命名方式**: - 纯数字(除非是传统PLC点位):`123:value` - 无意义缩写:`abc:value`,`xyz:value` - 中文key:系统支持但不推荐 ### 9.5 🏭 行业专用关键词扩展 #### 9.5.1 化工行业专用参数 | 输入Key | 系统识别为 | 前端显示列名 | 自动单位 | 示例 | |----------------------------------------------------|-------|----------|------|------------------------------------------| | `catalyst`, `cat_activity`, `catalyst_temp` | 催化剂 | **催化剂** | % | `catalyst:95.2` → **催化剂: 95.20%** | | `reaction_temp`, `reactor_temp`, `furnace_temp` | 反应温度 | **反应温度** | °C | `reaction_temp:450` → **反应温度: 450.00°C** | | `distillation`, `column_temp`, `reflux_ratio` | 蒸馏 | **蒸馏** | - | `reflux_ratio:3.5` → **蒸馏: 3.50** | | `crystallization`, `crystal_size`, `purity` | 结晶 | **结晶** | % | `purity:99.8` → **结晶: 99.80%** | | `polymerization`, `molecular_weight`, `conversion` | 聚合 | **聚合** | % | `conversion:85.5` → **聚合: 85.50%** | #### 9.5.2 食品行业专用参数 | 输入Key | 系统识别为 | 前端显示列名 | 自动单位 | 示例 | |-------------------------------------------------|-------|----------|------|----------------------------------------| | `baking_temp`, `oven_temp`, `cooking_temp` | 烘烤温度 | **烘烤温度** | °C | `baking_temp:180` → **烘烤温度: 180.00°C** | | `fermentation`, `yeast_activity`, `ph_ferment` | 发酵 | **发酵** | pH | `ph_ferment:4.2` → **发酵: 4.20pH** | | `sterilization`, `pasteur_temp`, `sterile_time` | 杀菌 | **杀菌** | °C | `pasteur_temp:72` → **杀菌: 72.00°C** | | `packaging`, `seal_pressure`, `vacuum_level` | 包装 | **包装** | kPa | `vacuum_level:85` → **包装: 85.00kPa** | | `shelf_life`, `expiry`, `freshness` | 保质期 | **保质期** | 天 | `shelf_life:30` → **保质期: 30.00天** | #### 9.5.3 纺织行业专用参数 | 输入Key | 系统识别为 | 前端显示列名 | 自动单位 | 示例 | |----------------------------------------------|-------|----------|-------|-----------------------------------------| | `tension`, `yarn_tension`, `fabric_tension` | 张力 | **张力** | N | `yarn_tension:15.5` → **张力: 15.50N** | | `weaving`, `warp_speed`, `weft_speed` | 织造 | **织造** | m/min | `warp_speed:120` → **织造: 120.00m/min** | | `dyeing`, `dye_concentration`, `color_depth` | 染色 | **染色** | % | `dye_concentration:2.5` → **染色: 2.50%** | | `finishing`, `resin_content`, `shrinkage` | 整理 | **整理** | % | `shrinkage:3.2` → **整理: 3.20%** | | `quality_grade`, `fabric_defect`, `gsm` | 质量等级 | **质量等级** | g/m² | `gsm:180` → **质量等级: 180.00g/m²** | #### 9.5.4 制药行业专用参数 | 输入Key | 系统识别为 | 前端显示列名 | 自动单位 | 示例 | |--------------------------------------------------|-------|----------|--------|----------------------------------------| | `api_content`, `active_ingredient`, `assay` | 活性成分 | **活性成分** | % | `api_content:98.5` → **活性成分: 98.50%** | | `tablet_weight`, `capsule_weight`, `uniformity` | 片重 | **片重** | mg | `tablet_weight:250` → **片重: 250.00mg** | | `dissolution`, `release_rate`, `bioavailability` | 溶出度 | **溶出度** | % | `dissolution:95.2` → **溶出度: 95.20%** | | `sterility`, `bioburden`, `endotoxin` | 无菌 | **无菌** | CFU/ml | `bioburden:10` → **无菌: 10.00CFU/ml** | | `stability`, `degradation`, `shelf_study` | 稳定性 | **稳定性** | % | `degradation:0.5` → **稳定性: 0.50%** | #### 9.5.5 金属加工行业专用参数 | 输入Key | 系统识别为 | 前端显示列名 | 自动单位 | 示例 | |---------------------------------------------------|-------|----------|-------|---------------------------------------------| | `cutting_speed`, `spindle_speed`, `feed_rate` | 切削速度 | **切削速度** | m/min | `cutting_speed:150` → **切削速度: 150.00m/min** | | `tool_wear`, `cutting_force`, `surface_finish` | 刀具磨损 | **刀具磨损** | µm | `tool_wear:50.5` → **刀具磨损: 50.50µm** | | `hardness`, `tensile_strength`, `yield_strength` | 硬度 | **硬度** | HRC | `hardness:45` → **硬度: 45.00HRC** | | `heat_treatment`, `quench_temp`, `tempering_temp` | 热处理 | **热处理** | °C | `quench_temp:850` → **热处理: 850.00°C** | | `coating`, `plating_thickness`, `corrosion_rate` | 涂层 | **涂层** | µm | `plating_thickness:25` → **涂层: 25.00µm** | #### 9.5.6 塑料行业专用参数 | 输入Key | 系统识别为 | 前端显示列名 | 自动单位 | 示例 | |--------------------------------------------------------|-------|----------|---------|----------------------------------------------| | `melt_temp`, `barrel_temp`, `nozzle_temp` | 熔融温度 | **熔融温度** | °C | `melt_temp:230` → **熔融温度: 230.00°C** | | `injection_pressure`, `hold_pressure`, `back_pressure` | 注射压力 | **注射压力** | MPa | `injection_pressure:80` → **注射压力: 80.00MPa** | | `mold_temp`, `cooling_time`, `cycle_time_injection` | 模具温度 | **模具温度** | °C | `mold_temp:60` → **模具温度: 60.00°C** | | `shrinkage_rate`, `warpage`, `flash` | 收缩率 | **收缩率** | % | `shrinkage_rate:1.2` → **收缩率: 1.20%** | | `mfi`, `melt_flow_index`, `viscosity_melt` | 熔融指数 | **熔融指数** | g/10min | `mfi:25` → **熔融指数: 25.00g/10min** | ### 9.6 🔧 复合关键词智能识别 系统支持复合关键词识别,可以同时匹配多个含义: | 输入Key | 识别关键词 | 前端显示列名 | 自动单位 | 示例 | |------------------------|--------------------------|-------------|-------|---------------------------------------------------| | `motor_temp_bearing` | motor + temp + bearing | **电机轴承温度** | °C | `motor_temp_bearing:65.5` → **电机轴承温度: 65.50°C** | | `pump_pressure_outlet` | pump + pressure + outlet | **泵出口压力** | bar | `pump_pressure_outlet:2.8` → **泵出口压力: 2.80bar** | | `tank_level_chemical` | tank + level + chemical | **化工罐液位** | % | `tank_level_chemical:75` → **化工罐液位: 75.00%** | | `conveyor_speed_main` | conveyor + speed + main | **主输送带转速** | m/min | `conveyor_speed_main:45` → **主输送带转速: 45.00m/min** | | `reactor_temp_jacket` | reactor + temp + jacket | **反应器夹套温度** | °C | `reactor_temp_jacket:120` → **反应器夹套温度: 120.00°C** | ### 9.7 🌐 多语言Key支持 系统同时支持英文和中文拼音关键词: | 英文Key | 中文拼音Key | 前端显示列名 | 示例 | |---------------|-----------------|--------|----------------------------------| | `temperature` | `wendu`, `wd` | **温度** | `wendu:25.5` → **温度: 25.50°C** | | `pressure` | `yali`, `yl` | **压力** | `yali:2.35` → **压力: 2.35bar** | | `current` | `dianliu`, `dl` | **电流** | `dianliu:15.2` → **电流: 15.20A** | | `voltage` | `dianya`, `dy` | **电压** | `dianya:220` → **电压: 220.00V** | | `speed` | `zhuansu`, `zs` | **转速** | `zhuansu:1450` → **转速: 1450rpm** | ---