Apache PLC4X 1.0.0 介绍与选型指南
基于官方发行目录与快速入门梳理 Apache PLC4X 1.0.0 的分层架构、多协议驱动、被动模式特性、Java 快速上手与 Milo/libplctag/python-snap7 量化选型对比,查询日期 2026-10-18
Apache PLC4X 1.0.0 介绍与选型指南
一、信息基准
1.1 基本信息
- 查询日期:2026-10-18
- 本文基准版本:Apache PLC4X 1.0.0(官方首个 1.0 稳定版)
- 维护方:Apache Software Foundation(Apache PLC4X 项目)
- 开源许可:Apache License 2.0(官网明确声明)
- 多语言形态:PLC4J(Java)、PLC4Go(Go)、PLC4C(C),官方 Getting Started 按语言分别提供指南
1.2 版本依据
- downloads.apache.org/plc4x/ 目录下存在 1.0.0/ 目录,目录时间戳 2026-09-07,其中 apache-plc4x-1.0.0-source-release.zip 及配套 .asc/.sha512 文件时间戳为 2026-09-03。
- Maven Central
org.apache.plc4x:plc4j-api元数据 release 与 latest 均为 1.0.0,元数据最近更新时间 2026-09-07,与发行目录交叉一致。 - 官网下载页在查询时因页面缓存仍显示 0.12.0,本文以 ASF 发行目录与 Maven Central 为准;0.12.0 发布说明中已明确"准备瞄准 1.0.0 大版本"。
1.3 官方来源清单
| 来源 | 地址 | 用途 |
|---|---|---|
| 官网首页 | https://plc4x.apache.org/ | 项目定位与集成生态 |
| ASF 发行目录 | https://downloads.apache.org/plc4x/ | 1.0.0 源码发行与签名校验 |
| 1.0.0 RELEASE-NOTES | https://downloads.apache.org/plc4x/1.0.0/RELEASE_NOTES | 1.0.0 变更清单 |
| Java 快速入门 | https://plc4x.apache.org/users/getting-started/plc4j.html | 依赖与最小代码示例 |
| Maven Central | https://repo1.maven.org/maven2/org/apache/plc4x/plc4j-api/ | 版本交叉核验 |
二、软件概述
2.1 软件定位
本文介绍 Apache PLC4X 1.0.0。PLC4X 官方定位为"工业物联网的通用协议适配器":一组以统一 API 与多种工业协议通信、对接可编程逻辑控制器(PLC)的库,让上位机在不改造现有产线设备的前提下直连车间资产。项目对安全性有明确设计主张,提供"passive-mode 被动模式驱动"以保证对既有设备无副作用。
2.2 集成生态
官方首页列出的内置集成包括 Apache Camel、Apache NiFi、Apache Kafka、Apache IoTDB、Apache Calcite、Apache StreamPipes、Apache Hop 与 Eclipse Ditto,可作为数据上行链路的落地通道。
三、核心架构
3.1 分层结构
PLC4X 采用"统一 API + 协议驱动 + 传输层"的结构:应用只面向统一 PlcConnection API 编程;各协议以独立驱动工件提供(如 plc4j-driver-s7),按需加入运行时类路径;底层传输(TCP、串口等)由 transport 层承载。1.0.0 发布说明还确认了驱动元数据自描述能力:可查询某驱动支持哪些 transport、配置项、类型与默认值,便于工具提供连接辅助。
3.2 连接串与驱动管理
连接通过协议前缀连接串表达,如 s7://10.10.64.20;由 PlcDriverManager 创建连接管理器并获得 PlcConnection。驱动按协议前缀自动匹配。
3.3 统一操作模型
官方快速入门明确 PLC4X 提供一组刻意收敛的基础能力:发现设备、列出 PLC 内资源、读数据、写数据、订阅数据。协议不支持的能力不会被强行模拟。
四、功能特性
4.1 多协议驱动
查询时可从官方发行说明确证的驱动包括:S7(西门子)、ADS(倍福)、EIP(EtherNet/IP)、Modbus、KNX、OPC UA、UMAS(1.0.0 新增)、SLMP(三菱 MELSEC,1.0.0 新增)以及 Mock/Simulated 模拟驱动;完整清单以官网驱动页为准。其中 S7 驱动支持不声明最大长度直接读取 STRING/WSTRING,OPC UA Java 驱动支持基于证书的认证与加密。
4.2 1.0.0 版本要点(引自官方 RELEASE-NOTES)
- 驱动配置支持 FILE 类型参数;变更订阅支持设置最小通知间隔防止风暴;
- 新增 PlcCertificateAuthentication;新增 Java UMAS 驱动与 Java SLMP 驱动(3E 二进制帧读写 D/W/R 字设备);
- plc4x 代理驱动支持 TLS 传输并强制用户名口令认证;
- Go 串口传输支持完整串口参数与多连接共享物理串口(reuse-port,多从站 Modbus RTU)及帧间隔控制;Java 串口共享端口模式修复响应拆分问题;
- 工程化:推进可复现构建。
4.3 无源改造接入
借助被动模式驱动,读取过程对设备无副作用,无需采购经认证的软件即可接入既有产线。
五、快速上手
5.1 Java 依赖
以下依赖结构引自官方 Java 快速入门页;官方页面示例版本号因站点缓存显示为 0.12.0,实际以 Maven Central 当前 release 1.0.0 为准:
<dependency>
<groupId>org.apache.plc4x</groupId>
<artifactId>plc4j-api</artifactId>
<version>1.0.0</version>
</dependency>
连接 S7 设备还需加入运行时驱动实现:
<dependency>
<groupId>org.apache.plc4x</groupId>
<artifactId>plc4j-driver-s7</artifactId>
<version>1.0.0</version>
<scope>runtime</scope>
</dependency>
来源:https://plc4x.apache.org/users/getting-started/plc4j.html
5.2 最小连接示例
以下代码引自官方 Java 快速入门页原文:
String connectionString = "s7://10.10.64.20";
try (PlcConnection plcConnection = PlcDriverManager.getDefault().getConnectionManager().getConnection(connectionString)) {
// ... do something with the connection here ...
}
来源:https://plc4x.apache.org/users/getting-started/plc4j.html
说明:本文为纯官方资料溯源整理,未做本地安装与运行实测。
六、适用场景与限制
6.1 适用场景
- 工业数据采集上行链路:PLC → PLC4X → Kafka/Camel/NiFi/IoTDB 等官方集成通道;
- 多品牌车间统一接入:用一套 API 覆盖 S7、EIP、Modbus、OPC UA 等异构协议;
- 不允许改动设备或加装网关的老旧产线数字化改造;
- Java/Go/C 多语言团队复用同一套连接串语义。
6.2 限制
- Java 侧自 0.12 起基线为 Java 11(官方 0.12.0 发布说明:Java 8 不再官方支持),老 JDK 环境需评估;
- 协议能力以设备实际支持为上界,订阅、发现等操作并非所有协议都可用;
- 1.0.0 为源码发行,无预编译二进制包(官方下载页仅提供 source release),构建需自行完成;
- OPC UA 场景下若需完整服务器端 SDK(而非客户端连接),PLC4X 定位是协议适配而非完整 OPC UA 服务器框架。
七、同类选型对比
7.1 候选说明
同类候选选取 Eclipse Milo(OPC UA 的 Java 实现,含客户端与服务器 SDK)、libplctag(C 语言 PLC 通信库)与 python-snap7(S7 协议 Python 封装),版本数据于 2026-10-18 实查 Maven Central / PyPI / 项目官方 README。
7.2 量化对比
| 维度 | Apache PLC4X 1.0.0 | Eclipse Milo 1.1.6 | libplctag v3.23.0 | python-snap7 3.2.1 |
|---|---|---|---|---|
| 开源许可 | Apache-2.0 | EPL-2.0(POM SPDX 声明) | MPL-2.0 / LGPL-2.1+ 双许可(官方 README) | MIT(PyPI 声明) |
| GitHub stars 与最近发版 | stars 官方未公布;源码发行 2026-09-03 | stars 官方未公布;Maven Central 元数据更新 2026-10-12(1.2.0-RC1) | stars 官方未公布;官方 README 标注最新稳定 v3.23.0 | stars 官方未公布;PyPI 上架 2026-10-04 |
| 版本节奏 | 0.x 长期演进后于 2026-09 达成 1.0.0 | 1.x 稳定线 + 1.2.0 预发布 | 长期维护,稳定版本持续更新 | 跟随 snap7 演进,更新活跃 |
| 兼容矩阵 | Java(11+)/Go/C 多语言,驱动按协议独立引入 | Java 17+ 构建,运行时兼容 17 及更高,仅 OPC UA(1.05) | C 库,Linux/Windows/macOS,仅 EtherNet/IP 与 Modbus TCP | Python,仅西门子 S7 |
数据来源:downloads.apache.org/plc4x/、repo1.maven.org(org.eclipse.milo:milo-sdk-server)、github.com/libplctag/libplctag 官方 README、pypi.org/pypi/python-snap7/json,查询日期 2026-10-18。
7.3 选型建议
若需要用一套统一 API 覆盖多品牌多协议并将数据接入主流数据链路组件,选 PLC4X;若场景只有 OPC UA 且要完整客户端/服务器 SDK,选 Eclipse Milo;若 C 环境只对接 Allen-Bradley(EtherNet/IP)与 Modbus,选 libplctag;若 Python 技术栈只对接西门子 S7,选 python-snap7。
八、参考链接
- 官方主页:https://plc4x.apache.org/
- ASF 发行目录:https://downloads.apache.org/plc4x/
- 1.0.0 RELEASE-NOTES:https://downloads.apache.org/plc4x/1.0.0/RELEASE_NOTES
- Java 快速入门:https://plc4x.apache.org/users/getting-started/plc4j.html
- 快速入门总览:https://plc4x.apache.org/users/getting-started/index.html
- Maven Central:https://repo1.maven.org/maven2/org/apache/plc4x/plc4j-api/