Files
MES/yawei-mes/.tasks/2025-09-23_LabVIEW数据上传接口规范文档.md
2026-04-02 10:39:03 +08:00

1429 lines
70 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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**
- 保存后系统会自动分配设备ID5
- 记录此IDLabVIEW程序中需要使用
#### 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. 参数数组:
- 参数15 (Integer)
- 参数20 (Integer)
- 参数3JSON字符串 (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**<br/>EQ001<br/>工位: 配料工位1 | 设备整体 | 🟢 运行中 | 25.50°C | 28.30°C | 2.35bar | 15.20A | 1250.80kg | 1450rpm | 2025-01-15 14:30:25 |
| **配料机1005**<br/>EQ001<br/>工位: 配料工位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** |
---