PLC4X(代理)
plc4x 协议是 PLC4X 自有的代理协议:一个 PLC4X 实例(通常是 PLC4X Server)接受来自 plc4x 客户端的连接,并通过其他任意 PLC4X 驱动(s7、modbus、ads、opcua、simulated……)将读写操作转发给真实的 PLC。当只有运行服务器的机器才能访问到 PLC 时——例如 PLC 位于防火墙之后或处于隔离的 OT 网络中,而客户端位于别处——该协议非常有用。身份验证是必需的,默认传输方式为 TLS。
支持的操作
| 操作 | 在此协议中的作用 |
|---|---|
read | 通过代理从远程 PLC 读取标签。 |
write | 通过代理向远程 PLC 写入标签。 |
不支持订阅与浏览:该驱动只重写了读取和写入操作。
连接字符串
plc4x 协议的连接具有以下格式:
plc4x:{transport}://{host}:{port}?remote-connection-string={url-encoded-connection-string}&username={user}&password={pass}{transport} 为 tls(默认值,未指定传输方式时使用)或 tcp(明文方式,需显式启用,适用于受信任的网络或测试场景)。remote-connection-string 是代理应连接实际 PLC 所使用的 URL 编码连接字符串。username 和 password 为必填项。
示例连接字符串,TLS(默认)与明文 TCP:
plc4x:tls://host:59837?remote-connection-string=s7&username=op&password=hunter2&tls.verify=falseplc4x://host?remote-connection-string=s7%3A%2F%2Foperator%3Ahunter2%40plc%3A102连接字符串选项
名称
类型
默认值
是否必需
描述
名称
PLC4X (Proxy-Protocol)
代码
plc4x
Maven 依赖
<dependency>
<groupId>org.apache.plc4x</groupId>
<artifactId>plc4j-driver-plc4x</artifactId>
<version>1.0.0</version>
</dependency>默认传输
tls
支持的传输协议
tlstcp
配置选项:
remote-connection-string
STRING
用于在代理端连接给定 PLC 的 URL 编码连接字符串。
request-timeout-ms
INT
5000
所有类型请求的默认超时时间。
username
STRING
用于通过 PLC4X 代理服务器进行身份验证的用户名。身份验证为必填项。
password
STRING
用于向 PLC4X 代理服务器进行身份验证的密码。身份验证为必填项。
传输配置选项:
tls
tls.verify
BOOLEAN
true
tls.ignore-common-name
BOOLEAN
false
接受为与所连接主机不同的其他主机颁发的服务器证书。
tls.trust-store
STRING
要信任的证书密钥库,用以取代 JVM 的公共权威证书库
tls.trust-store-password
STRING
由 tls.trust-store 指定的信任库(trust store)的密码
tls.trust-store-type
STRING
PKCS12
由 tls.trust-store 指定的信任库(trust store)的类型
tls.version
STRING
TLS 协议版本(例如 'TLSv1.2'、'TLSv1.3')。若未设置,则使用 TLS 1.3,并在不支持时回退到 TLS 1.2。
tls.keystore
STRING
用于双向 TLS 的客户端证书与私钥所在的密钥库(PKCS12/JKS)路径。
tls.keystore-password
STRING
客户端密钥库的密码。
tls.keystore-type
STRING
密钥库类型(例如 'PKCS12'、'JKS')。默认为 PKCS12。
tls.log-session-keys
BOOLEAN
false
以 SSLKEYLOGFILE 格式将 TLS 会话密钥记录到审计日志中,供 Wireshark 进行解密。
tls.connect-timeout-ms
INT
5000
以毫秒为单位的连接超时时间。
tls.read-timeout-ms
INT
0
以毫秒为单位的套接字读取超时时间。0 表示不超时。
tls.write-timeout-ms
INT
0
套接字写入超时时间(毫秒)。0 表示不超时。
tls.no-delay
BOOLEAN
true
启用 TCP_NODELAY(禁用 Nagle 算法)。
tls.keep-alive
布尔值
false
启用 SO_KEEPALIVE。
tls.send-buffer-size
INT
81920
发送缓冲区大小(字节)。0 表示使用系统默认值。
tls.receive-buffer-size
INT
81920
以字节为单位的接收缓冲区大小。0 表示使用系统默认值。
tls.local-address
STRING
要绑定的本地地址(可选)。如果未设置,则使用默认值。
tls.local-port
整型
0
用于绑定的本地端口(可选)。0 表示使用临时端口。
tcp
tcp.connect-timeout-ms
INT
5000
连接超时时间(以毫秒为单位)。
tcp.read-timeout-ms
INT
0
以毫秒为单位的套接字读取超时时间。0 表示不超时。
tcp.write-timeout-ms
INT
0
套接字写入超时时间,单位为毫秒。0 表示不超时。
tcp.no-delay
BOOLEAN
true
启用 TCP_NODELAY(禁用 Nagle 算法)。
tcp.keep-alive
BOOLEAN
false
启用 SO_KEEPALIVE。
tcp.send-buffer-size
INT
81920
以字节为单位的发送缓冲区大小。0 表示使用系统默认值。
tcp.receive-buffer-size
INT
81920
以字节为单位的接收缓冲区大小。0 表示使用系统默认值。
tcp.local-address
STRING
用于绑定的本地地址(可选)。若未设置,则使用默认值。
tcp.local-port
INT
0
要绑定的本地端口(可选)。0 表示使用临时端口。
标签地址
标签地址的实现在 C 和 Java 中都有提供。各实现支持的具体能力参见协议支持矩阵]。
通用格式
一个 plc4x 标签地址指向的是远程连接上的标签,也就是代理所打开的那个连接,而不是代理连接自身的标签。驱动程序不会解析或校验该地址;它只会截去末尾的 :{type} 后缀,并将其余部分原样透传给远程连接,因此该地址必须遵循 remote-connection-string 所指向的驱动程序的标签语法:
{remote-tag-address}:{data-type}例如,在远程连接到 simulated PLC 时,标签地址由 simulated 驱动地址加上 PLC4X 值类型组成:
RANDOM/foo:BOOL
STDOUT/foo:INT数据类型
末尾的 :{data-type} 后缀是 PLC4X 标准值类型之一,例如 BOOL、BYTE、WORD、DWORD、USINT、UINT、UDINT、ULINT、SINT、INT、DINT、LINT、REAL、LREAL、CHAR 或 WCHAR。
示例
从远程 simulated 连接读取数据以及向其写入数据:
RANDOM/foo:BOOL
RANDOM/foo:DWORD
RANDOM/foo:LREALSTDOUT/foo:BOOL
STDOUT/foo:UDINT
STDOUT/foo:WCHAR评论
登录后参与评论
KnowForge