欢迎光临
我们一直在努力

TDengine 应用案例 — 工业大数据与智能制造

分类:15.应用案例 | 篇章:02 工业大数据 在这里插入图片描述 免费详情

智能制造场景具有测点数量大、采集频率高、对实时分析要求严格的特点。本文以汽车装配车间为例,展示 TDengine 在 SCADA/MES 场景下的应用。

场景速查表

维度参数
设备数 500 台
测点数 5 万(每设备 100 个)
频率 1 秒/点(部分高频 100ms)
数据量 数十 GB/天
保留 1 年热 + 3 年冷

详细解析

1. 业务背景

汽车装配车间:

① 设备类型:
– 焊接机器人 100 台
– 涂装线 50 台
– 装配工位 200 台
– 检测设备 150 台

② 测点:
– 设备运行参数(温度、压力、电流、振动)
– 工艺参数(焊接电流、涂层厚度)
– 质量数据(尺寸、扭矩)
– 能耗(电、水、气)

③ 需求:
– SCADA 实时显示
– 工艺追溯(按车架号反查)
– OEE / 设备效率分析
– 预测性维护
– 能耗管理

2. 数据建模

— 1. 数据库
CREATE DATABASE manufacturing
PRECISION 'ms'
KEEP 365
DURATION 7
REPLICA 3
VGROUPS 32;

USE manufacturing;

— 2. 按设备类型建超级表

— 焊接机器人
CREATE STABLE robot_welding (
ts TIMESTAMP,
current_a FLOAT, — 焊接电流
voltage_v FLOAT, — 焊接电压
wire_speed FLOAT, — 送丝速度
gas_flow FLOAT, — 保护气流量
temperature FLOAT, — 焊枪温度
vibration FLOAT, — 振动 mm/s
motor_current FLOAT, — 电机电流
cycle_count BIGINT, — 循环计数
status TINYINT, — 状态
fault_code INT — 故障码
) TAGS (
equipment_id BINARY(20),
workshop NCHAR(20),
line BINARY(20),
station BINARY(20),
model NCHAR(50),
install_year SMALLINT
);

— 装配工位
CREATE STABLE station_assembly (
ts TIMESTAMP,
torque FLOAT, — 扭矩
angle FLOAT, — 角度
duration_ms INT, — 工序时长
vin BINARY(20), — 车架号
part_no BINARY(30), — 零件号
operator BINARY(20), — 操作员
result TINYINT — 结果 0/1
) TAGS (
equipment_id BINARY(20),
workshop NCHAR(20),
station BINARY(20)
);

— 能耗
CREATE STABLE energy_meter (
ts TIMESTAMP,
power_kw FLOAT, — 瞬时功率
energy_kwh DOUBLE, — 累计电量
voltage FLOAT,
current FLOAT,
pf FLOAT — 功率因数
) TAGS (
meter_id BINARY(20),
workshop NCHAR(20),
feeder BINARY(20)
);

3. 数据采集架构

OPC UA Server (PLC)
│
├── 协议:OPC UA / Modbus / S7
│
▼
taosX OPC UA Connector
│
├── 周期采集
├── 字段映射
│
▼
TDengine
│
├── Stream → 实时 KPI
├── TMQ → 告警系统
└── Grafana → SCADA 大屏

采集要点:
– 高频测点单独建超级表(100ms)
– 低频测点合并(1s)
– 状态变化用 STATE_WINDOW
– 大量 boolean 用位图压缩

4. SCADA 实时查询

— 1. 车间总览
SELECT
workshop,
COUNT(DISTINCT tbname) AS active_equipment,
AVG(motor_current) AS avg_load
FROM robot_welding
WHERE ts > NOW – 1m
PARTITION BY workshop;

— 2. 单设备最新状态
SELECT * FROM robot_welding
WHERE equipment_id = 'WR_001'
ORDER BY ts DESC LIMIT 1;

— 3. 故障设备列表
SELECT tbname, equipment_id, LAST(fault_code) AS code
FROM robot_welding
WHERE ts > NOW – 5m
PARTITION BY tbname
HAVING code != 0;

— 4. 高频曲线(最近 1 分钟)
SELECT ts, current_a, voltage_v
FROM robot_welding
WHERE equipment_id = 'WR_001'
AND ts > NOW – 1m
ORDER BY ts;

5. 工艺追溯

— 1. 按车架号查所有工序
SELECT * FROM station_assembly
WHERE vin = 'VIN12345678'
ORDER BY ts;

— 2. 某车架在某工位的过程数据
SELECT
a.ts, a.torque, a.angle, a.result,
w.current_a, w.voltage_v
FROM station_assembly a
LEFT JOIN robot_welding w
ON timetruncate(a.ts, 1s) = timetruncate(w.ts, 1s)
AND a.station = w.station
WHERE a.vin = 'VIN12345678';

— 3. 质量问题溯源(不合格批次共性)
SELECT
station, operator,
AVG(torque) AS avg_torque,
COUNT(*) AS fail_count
FROM station_assembly
WHERE result = 0
AND ts > NOW – 7d
PARTITION BY station, operator
HAVING fail_count > 10
ORDER BY fail_count DESC;

6. OEE 计算

— OEE = 可用率 × 性能 × 质量

— 1. 可用率(运行时间 / 计划时间)
SELECT
equipment_id,
SUM(CASE WHEN status = 1 THEN 1 ELSE 0 END) * 1.0 / COUNT(*)
AS availability
FROM robot_welding
WHERE ts > NOW – 1d
PARTITION BY equipment_id;

— 2. 性能(实际节拍 / 理论节拍)
WITH cycle_data AS (
SELECT
equipment_id,
LAST(cycle_count) – FIRST(cycle_count) AS cycles,
LAST(ts) – FIRST(ts) AS duration_ms
FROM robot_welding
WHERE ts > NOW – 1d
PARTITION BY equipment_id
)
SELECT
equipment_id,
cycles * 1.0 / (duration_ms / 1000) AS actual_rate,
cycles * 1.0 / (duration_ms / 1000) / theoretical_rate AS performance
FROM cycle_data;

— 3. 质量率
SELECT
station,
SUM(result) * 1.0 / COUNT(*) AS quality_rate
FROM station_assembly
WHERE ts > NOW – 1d
PARTITION BY station;

— 4. OEE 综合
— 三个指标相乘

7. 预测性维护

— 1. 振动趋势异常检测
SELECT
equipment_id,
AVG(vibration) AS current_vib,
(SELECT AVG(vibration) FROM robot_welding
WHERE equipment_id = r.equipment_id
AND ts BETWEEN NOW – 30d AND NOW – 7d) AS baseline
FROM robot_welding r
WHERE ts > NOW – 1d
PARTITION BY equipment_id
HAVING current_vib > baseline * 1.5;

— 2. 状态变化频率
SELECT
equipment_id,
COUNT(*) AS state_changes
FROM (
SELECT equipment_id, _wstart, status
FROM robot_welding
PARTITION BY equipment_id
STATE_WINDOW(status)
)
WHERE _wstart > NOW – 1d
PARTITION BY equipment_id
HAVING state_changes > 50;

— 3. 故障预测特征
SELECT
equipment_id,
STDDEV(motor_current) AS current_std,
MAX(temperature) AS max_temp,
AVG(vibration) AS avg_vib
FROM robot_welding
WHERE ts > NOW – 7d
PARTITION BY equipment_id;

8. 能耗分析

— 1. 车间日能耗
SELECT
workshop,
LAST(energy_kwh) – FIRST(energy_kwh) AS daily_kwh
FROM energy_meter
WHERE ts > NOW – 1d
PARTITION BY workshop;

— 2. 单位产量能耗(kWh/件)
WITH energy AS (
SELECT workshop,
LAST(energy_kwh) – FIRST(energy_kwh) AS kwh
FROM energy_meter
WHERE ts > NOW – 1d
PARTITION BY workshop
),
production AS (
SELECT workshop, COUNT(*) AS units
FROM station_assembly
WHERE ts > NOW – 1d AND result = 1
PARTITION BY workshop
)
SELECT
e.workshop,
e.kwh / p.units AS kwh_per_unit
FROM energy e JOIN production p ON e.workshop = p.workshop;

— 3. 峰谷电费分析
SELECT
workshop,
SUM(CASE WHEN HOUR(ts) BETWEEN 8 AND 22 THEN power_kw ELSE 0 END) * 0.001
AS peak_kwh,
SUM(CASE WHEN HOUR(ts) NOT BETWEEN 8 AND 22 THEN power_kw ELSE 0 END) * 0.001
AS valley_kwh
FROM energy_meter
WHERE ts > NOW – 30d
PARTITION BY workshop;

代码示例

实时大屏流计算

— 1 分钟级 KPI
CREATE STREAM stream_workshop_kpi INTO workshop_kpi_1m AS
SELECT
_wstart, workshop,
AVG(motor_current) AS avg_current,
COUNT(CASE WHEN status = 1 THEN 1 END) * 1.0 / COUNT(*)
AS availability,
COUNT(CASE WHEN fault_code != 0 THEN 1 END) AS fault_count
FROM robot_welding
PARTITION BY workshop
INTERVAL(1m);

— 实时告警
CREATE STREAM stream_alerts TRIGGER AT_ONCE INTO alerts_stream AS
SELECT
ts, equipment_id, workshop,
fault_code, status
FROM robot_welding
WHERE fault_code != 0 OR temperature > 80;

Python 实时监控应用

import taosws

consumer = taosws.Consumer({
'td.connect.user': 'root',
'td.connect.pass': 'taosdata',
'group.id': 'scada_alert',
'auto.offset.reset': 'latest',
})

consumer.subscribe(['alerts_topic'])

while True:
msg = consumer.poll(1)
if msg:
for record in msg:
for row in record:
send_to_andon(row) # 推送到安灯系统
if row['fault_code'] in CRITICAL_CODES:
stop_line(row['workshop'])

性能考量

高频测点优化

频率优化策略
100ms 单独超级表 + 高 CACHE
1s 标准建模
10s+ 普通建模 + TSMA

TSMA 推荐

— 大量历史聚合查询
CREATE TSMA tsma_robot_1m ON robot_welding
FUNCTION(AVG(current_a), AVG(voltage_v), MAX(temperature), MAX(vibration))
INTERVAL(1m);

CREATE TSMA tsma_robot_1h ON robot_welding
FUNCTION(AVG(current_a), AVG(voltage_v), MAX(temperature), MAX(vibration))
INTERVAL(1h);

FAQ

Q1: OPC UA 怎么对接?

通过 taosX OPC UA Connector,或自研 Python/Java 客户端。

Q2: 高频 100ms 测点能存吗?

可以。注意:

  • 单独超级表
  • 用 STMT2 批量写
  • 多节点分摊
  • 提前规划存储

Q3: 车架号怎么关联?

把 VIN 作为列存储(不是 Tag)。可在多个超级表中通过 VIN + ts 关联查询。

Q4: MES 系统怎么集成?

  • 通过 REST API 写入工序数据
  • 通过 SQL 查询追溯
  • 通过 TMQ 订阅事件

Q5: 边缘端怎么部署?

  • 工厂边缘部署小集群
  • 通过 taosX 同步到云端
  • 边缘做实时分析,云端做长期归档

参考

系统构架篇

  • 01-《TDengine 整体架构全景》
  • 02-《集群拓扑深度解析》
  • 03-《MNode 内部机制深度解析》
  • 04-《RPC 通信层深度解析》
  • 05-《VNode 生命周期》
  • 06-《RAFT 共识协议》
  • 07-《端到端的消息流》

数据模型

  • 01-《数据库创建与参数详解》
  • 02-《超级表/子表/普通表》
  • 03-《支持数据类型深度解析》
  • 04-《TDengine Tag 设计哲学与 Schema 变更机制》
  • 05-《TDengine 虚拟表实现原理》

存储引擎

  • 01-《TDengine 存储引擎概览》
  • 02-《TDengine MemTable 深度解析》
  • 03-《TDengine WAL 预写日志机制》
  • 04-《TDengine 数据文件格式》
  • 05-《TDengine Commit 与 Flush 机制 》
  • 06-《TDengine Compaction 合并策略 》
  • 07-《TDengine 数据保留与 TTL》
  • 08-《TDengine 压缩编码机制》
  • 09-《TDengine Cache 与 Last 查询加速》
  • 10-《TDengine 逻辑计划生成》

查询引擎

  • 01-《TDengine 查询引擎概览》
  • 02-《TDengine SQL 解析与词法分析》
  • 03-《TDengine 语义分析与 AST 重写》
  • 04-《TDengine 逻辑计划生成》
  • 05-《TDengine 物理计划生成》
  • 06-《TDengine 扫描算子》
  • 07-《TDengine 聚合算子》
  • 08-《TDengine 连接算子》
  • 09-《TDengine 排序、填充与投影》
  • 10-《TDengine 分布式查询执行》
  • 11-《TDengine EXPLAIN 与查询优化》

数据写入

  • 01-《TDengine SQL INSERT》
  • 02-《TDengine 无模式写入》
  • 03-《TDengine STMT 写入》
  • 04-《TDengine 写入内部流程》
  • 05-《TDengine 数据更新删除》

数据订阅

  • 01-《TDengine 数据订阅》
  • 02-《TDengine 订阅 vs Kafka》
  • 03-《TDengine TMQ 消费流程》
  • 04-《TDengine 内部机制》
  • 05-《TDengine TMQ 最佳实践》

预聚合

  • 01-《TDengine RSMA》
  • 02-《TDengine TSMA — 时间维度的物化聚合视图》
  • 03-《TDengine SMA 内部实现》

索引

  • 01-《TDengine Tag 索引》
  • 02-《TDengine SMA 索引》

SQL 语句

  • 01-《TDengine DDL》
  • 02-《TDengine DML SELECT》
  • 03-《TDengine DML 函数完整参考》
  • 04-《TDengine JOIN 完整语法》
  • 05-《TDengine 窗口完整语法》
  • 06-《TDengine 操作符与表达式》
  • 07-《TDengine 系统表》
  • 08-《TDengine SQL 与标准 SQL 差异》

客户端与连接器

  • 01-《TDengine 的连接方式》
  • 02-《TDengine C/C++ 连接器》
  • 03-《TDengine java 连接器》
  • 04-《TDengine Python 连接器》
  • 05-《TDengine Go 与 Rust 连接器》
  • 06-《TDengine Node.js 与 C# 连接器》

运维

  • 01-《TDengine 部署指南》
  • 02-《TDengine 配置详解》
  • 03-《TDengine 监控系统》
  • 04-《TDengine 备份与恢复》
  • 05-《TDengine 版本升级》
  • 06-《TDengine 加密使用指南》

安全

  • 01-《TDengine 认证与权限》
  • 02-《TDengine 认证与权限》
  • 03-《TDengine 审计日志》

生态

  • 01-《TDengine taosAdapter》
  • 02-《TDengine taosX 与 Explorer》
  • 03-《TDengine Grafana 集成》
  • 04-《TDengine 第三方工具》

应用案例

  • 01-《TDengine IoT 设备监控》

关于 TDengine

TDengine 专为物联网IoT平台、工业大数据平台设计。其中,TDengine TSDB 是一款高性能、分布式的时序数据库(Time Series Database),同时它还带有内建的缓存、流式计算、数据订阅等系统功能;TDengine IDMP 是一款AI原生工业数据管理平台,它通过树状层次结构建立数据目录,对数据进行标准化、情景化,并通过 AI 提供实时分析、可视化、事件管理与报警等功能。

赞(0)
未经允许不得转载:171主机测评 » TDengine 应用案例 — 工业大数据与智能制造
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址