好复杂的 IoT 世界:工业数据采集技术栈全景解析
从 PLC 到可视化,一条完整的数据链路是如何运转的?

图片来源:Unsplash(免费授权)
引言
在工业物联网(IIoT)的世界里,数据采集是一切智能决策的基础。但当你真正开始搭建一个数据采集系统时,会发现这个领域远比想象中复杂:
- 工厂里有西门子、三菱、欧姆龙等各种品牌的 PLC
- 每种设备说着不同的"通信方言"(Modbus、OPC UA、Profinet...)
- 数据最终要送到数据库、SCADA 系统或云平台
如何让这些"鸡同鸭讲"的设备统一协作?
本文将带你梳理一条完整的工业数据采集链路,介绍其中的核心工具:KEPServerEX 、Telegraf 和 InfluxDB。
一、工业数据采集的三层架构
┌─────────────────────────────────────────────────────────────┐
│ 应用层(可视化/分析) │
│ 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 的核心工作流程:
- 输入插件:从各种来源采集数据
- 处理器:清洗、转换、过滤数据
- 聚合器:按时间窗口计算统计值
- 输出插件:将数据发送到目标存储
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 | 直观的数据洞察 |
理解每个工具的定位和边界,才能搭建出高效、稳定、可扩展的工业数据采集系统。