好复杂的 IoT 世界:工业数据采集技术栈全景解析

好复杂的 IoT 世界:工业数据采集技术栈全景解析

从 PLC 到可视化,一条完整的数据链路是如何运转的?

图片来源:Unsplash(免费授权)


引言

在工业物联网(IIoT)的世界里,数据采集是一切智能决策的基础。但当你真正开始搭建一个数据采集系统时,会发现这个领域远比想象中复杂:

  • 工厂里有西门子、三菱、欧姆龙等各种品牌的 PLC
  • 每种设备说着不同的"通信方言"(Modbus、OPC UA、Profinet...)
  • 数据最终要送到数据库、SCADA 系统或云平台

如何让这些"鸡同鸭讲"的设备统一协作?

本文将带你梳理一条完整的工业数据采集链路,介绍其中的核心工具:KEPServerEXTelegrafInfluxDB


一、工业数据采集的三层架构

复制代码
┌─────────────────────────────────────────────────────────────┐
│                      应用层(可视化/分析)                    │
│              Grafana / SCADA / MES / ERP                     │
└─────────────────────────────────────────────────────────────┘
                              ▲
                              │
┌─────────────────────────────────────────────────────────────┐
│                      存储层(时序数据库)                      │
│                    InfluxDB / TimescaleDB                    │
└─────────────────────────────────────────────────────────────┘
                              ▲
                              │
┌─────────────────────────────────────────────────────────────┐
│                      采集层(数据代理)                        │
│              Telegraf / KEPServerEX / 自定义采集              │
└─────────────────────────────────────────────────────────────┘
                              ▲
                              │
┌─────────────────────────────────────────────────────────────┐
│                      设备层(现场设备)                        │
│        PLC / CNC / 传感器 / 机器人 / 智能仪表                  │
└─────────────────────────────────────────────────────────────┘

二、KEPServerEX:工业通信的"万能翻译官"

图片来源:Unsplash(免费授权)

2.1 什么是 KEPServerEX?

KEPServerEX 是由美国 Kepware 公司(现隶属于 PTC)开发的工业级 OPC 服务器软件,被誉为工业数据采集领域的"瑞士军刀"。

它的核心使命很简单:让不同品牌、不同协议的工业设备能够"说同一种语言"

2.2 为什么需要它?

想象一个典型的工厂场景:

设备类型 品牌 通信协议
生产线 PLC 西门子 S7 协议
数控机床 发那科 FOCAS 协议
温度传感器 第三方 Modbus RTU
机器人 ABB OPC UA

如果没有统一的通信中间件,你需要为每种协议写不同的采集程序。而 KEPServerEX 提供了 150+ 种设备驱动,可以一站式解决这个难题。

2.3 核心能力

复制代码
┌─────────────┐     ┌─────────────────┐     ┌─────────────┐
│  西门子 PLC  │ ──▶ │                 │     │  OPC UA     │
│  三菱 PLC   │ ──▶ │   KEPServerEX   │ ──▶ │  MQTT       │
│  Modbus设备 │ ──▶ │   (协议转换)     │     │  REST API   │
│  OPC UA设备 │ ──▶ │                 │     │  ODBC       │
└─────────────┘     └─────────────────┘     └─────────────┘
   多种输入协议              统一平台              标准输出协议

主要特性:

  • 驱动丰富:支持 150+ 工业协议,覆盖主流 PLC、CNC、机器人品牌
  • 多协议输出:OPC UA、OPC DA、MQTT、REST API 等
  • 高可靠性:工业级稳定性,支持冗余部署
  • 模块化设计:按需购买驱动插件

2.4 典型应用场景

  • SCADA 集成:将现场设备数据接入组态软件
  • MES/ERP 对接:打通 IT 与 OT 的数据壁垒
  • 云平台接入:通过 MQTT 将数据上云
  • 时序数据存储:配合 InfluxDB 实现数据持久化

三、Telegraf:数据采集的"勤劳搬运工"

图片来源:Unsplash(免费授权)

3.1 什么是 Telegraf?

Telegraf 是 InfluxData 公司开发的开源数据采集代理,用 Go 语言编写,专为时序数据设计。

如果说 KEPServerEX 解决了"设备通信协议"的问题,那么 Telegraf 则解决了"数据如何进入存储系统"的问题。

3.2 核心定位

复制代码
┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│  数据源     │ ──▶ │  Telegraf   │ ──▶ │  InfluxDB   │
│ (各种来源)  │     │  (采集+处理) │     │  (时序存储)  │
└─────────────┘     └─────────────┘     └─────────────┘

Telegraf 的核心工作流程:

  1. 输入插件:从各种来源采集数据
  2. 处理器:清洗、转换、过滤数据
  3. 聚合器:按时间窗口计算统计值
  4. 输出插件:将数据发送到目标存储

3.3 主要优势

特性 说明
插件丰富 200+ 插件,覆盖系统指标、数据库、消息队列等 17 类数据源
轻量级 单二进制文件,内存占用 < 100MB
跨平台 Linux、Windows、macOS、Docker、Kubernetes
多输出 可同时发送到多个目标(InfluxDB、Kafka、MySQL 等)
易配置 TOML 格式配置文件,简单直观

3.4 常见数据源

系统层面:

  • CPU、内存、磁盘 I/O、网络流量
  • Docker 容器指标
  • 进程监控

数据库层面:

  • MySQL、PostgreSQL、Redis、MongoDB 性能指标

消息队列:

  • Kafka、MQTT、RabbitMQ

工业协议:

  • OPC UA(可与 KEPServerEX 对接)
  • Modbus

四、InfluxDB:时序数据的"专业仓库"

图片来源:Unsplash(免费授权)

4.1 什么是 InfluxDB?

InfluxDB 是专为时序数据设计的数据库,在 DB-Engines 时序数据库排名中常年位居前列。

4.2 版本演进

版本 状态 特点
InfluxDB 1.x 维护中 传统版本,稳定成熟
InfluxDB 2.x 稳定版 内置 UI 和任务引擎
InfluxDB 3.x 最新版(2025.4 GA) 全新架构,性能大幅提升

4.3 核心优势

  • 高性能写入:专为高频时序数据优化
  • 高效存储:列式存储 + 压缩算法
  • 强大查询:支持类 SQL 的 InfluxQL 和 Flux 查询语言
  • 保留策略:自动过期旧数据
  • 生态完善:与 Grafana、Telegraf 无缝集成

4.4 数据模型

复制代码
Measurement: cpu_usage
Tags: host=server01, region=beijing
Fields: value=75.5, user=45.2, system=30.3
Timestamp: 2025-01-15T08:30:00Z

五、完整链路实战:从 PLC 到可视化

图片来源:Unsplash(免费授权)

5.1 典型架构

复制代码
┌─────────┐    ┌─────────────┐    ┌──────────┐    ┌─────────┐    ┌─────────┐
│ 西门子   │───▶│ KEPServerEX │───▶│ Telegraf │───▶│InfluxDB │───▶│ Grafana │
│  PLC    │    │ (OPC UA输出) │    │(数据采集) │    │(时序存储)│    │(可视化) │
└─────────┘    └─────────────┘    └──────────┘    └─────────┘    └─────────┘

协议转换层          通信中间件          采集代理          数据存储          可视化

5.2 各组件职责

组件 职责 解决的问题
KEPServerEX 协议转换 西门子 S7 → OPC UA
Telegraf 数据采集 从 OPC UA 读取 → 写入 InfluxDB
InfluxDB 数据存储 高效存储时序数据
Grafana 可视化 仪表盘展示

5.3 配置示例

Telegraf 配置(从 KEPServerEX 采集 OPC UA 数据):

toml 复制代码
[[inputs.opcua]]
  ## KEPServerEX 的 OPC UA 服务器地址
  endpoint = "opc.tcp://localhost:49320"
  
  ## 认证信息
  username = ""
  password = ""
  
  ## 要采集的节点
  nodes = [
    {name="temperature", namespace="2", identifier_type="s", identifier="Channel1.Device1.Tag1"},
    {name="pressure", namespace="2", identifier_type="s", identifier="Channel1.Device1.Tag2"},
  ]

[[outputs.influxdb]]
  urls = ["http://localhost:8086"]
  database = "factory_data"

六、选型建议

6.1 什么时候用 KEPServerEX?

推荐使用:

  • 工厂有多品牌 PLC 需要统一接入
  • 需要与 SCADA 系统对接
  • 需要 OPC UA/DA 标准接口

可能不需要:

  • 只有单一品牌设备且原生支持 MQTT
  • 预算有限(商业软件,需要授权)

6.2 什么时候用 Telegraf?

推荐使用:

  • 需要采集服务器/容器指标
  • 需要将数据从 KEPServerEX 导入 InfluxDB
  • 需要多目标输出(同时发送到多个数据库)

6.3 版本选择建议

场景 推荐版本
新部署 InfluxDB 3.x(2025.4 GA)
已有 1.x/2.x 可继续使用,或评估迁移到 3.x
Windows 免安装 1.x 或 2.x(3.x Windows 原生支持待完善)

七、总结

工业数据采集是一个分层协作的过程:

层级 工具 核心价值
协议转换层 KEPServerEX 打通设备通信壁垒
数据采集层 Telegraf 灵活、轻量的数据搬运
数据存储层 InfluxDB 专业时序数据管理
可视化层 Grafana 直观的数据洞察

理解每个工具的定位和边界,才能搭建出高效、稳定、可扩展的工业数据采集系统。


参考资料

相关推荐
月落归舟1 小时前
Java线程小记
java·开发语言
西凉的悲伤1 小时前
Spring Cloud Gateway介绍
java·spring cloud·gateway
逸Y 仙X2 小时前
文章五:Elasticsearch安全通信
java·大数据·安全·elasticsearch·搜索引擎·全文检索·jenkins
quan26312 小时前
20260529,日常开发-查老数据全量更新闭坑
java·mysql·主从·主从延迟
大大杰哥2 小时前
Java 日志框架详解:SLF4J + Logback 从入门到实战
java·开发语言·logback
Dest1ny-安全2 小时前
2026最新CTF知识库:12大Web漏洞深度文章+1156篇历年大赛WP+50+脚本+Payload速查 +AI/RAG离线在线知识库
java·学习·安全·web安全·servlet
404号扳手2 小时前
Java 基础知识(六)
java·后端
我命由我123453 小时前
SEO 与 GEO 极简理解
java·linux·运维·开发语言·学习·算法·运维开发
金銀銅鐵3 小时前
[Java] 自己写程序,来解析方法的 descriptor
java·后端