Apache PLC4X 1.0.0 介绍与选型指南

基于官方发行目录与快速入门梳理 Apache PLC4X 1.0.0 的分层架构、多协议驱动、被动模式特性、Java 快速上手与 Milo/libplctag/python-snap7 量化选型对比,查询日期 2026-10-18

Apache PLC4XApache PLC4XJava2026/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-NOTEShttps://downloads.apache.org/plc4x/1.0.0/RELEASE_NOTES1.0.0 变更清单
Java 快速入门https://plc4x.apache.org/users/getting-started/plc4j.html依赖与最小代码示例
Maven Centralhttps://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.0Eclipse Milo 1.1.6libplctag v3.23.0python-snap7 3.2.1
开源许可Apache-2.0EPL-2.0(POM SPDX 声明)MPL-2.0 / LGPL-2.1+ 双许可(官方 README)MIT(PyPI 声明)
GitHub stars 与最近发版stars 官方未公布;源码发行 2026-09-03stars 官方未公布;Maven Central 元数据更新 2026-10-12(1.2.0-RC1)stars 官方未公布;官方 README 标注最新稳定 v3.23.0stars 官方未公布;PyPI 上架 2026-10-04
版本节奏0.x 长期演进后于 2026-09 达成 1.0.01.x 稳定线 + 1.2.0 预发布长期维护,稳定版本持续更新跟随 snap7 演进,更新活跃
兼容矩阵Java(11+)/Go/C 多语言,驱动按协议独立引入Java 17+ 构建,运行时兼容 17 及更高,仅 OPC UA(1.05)C 库,Linux/Windows/macOS,仅 EtherNet/IP 与 Modbus TCPPython,仅西门子 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。

八、参考链接