协议

Logix

qianmoQqianmoQ· 更新于 2026-10-01· 阅读 13 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

Logix

Logix 是 Allen-Bradley/Rockwell ControlLogix、CompactLogix 以及其它通过 EtherNet/IP 使用 CIP(通用工业协议)的控制器所采用的基于标签的寻址方式。

本页介绍 logix 驱动代码,它由同一个 eip 模块注册,并共享其 Java 标签类——有关相同的标签语法说明,请参阅 EtherNet/IP 页面,其中记录了通用的 CIP 符号寻址内容。

支持的操作

名称值说明
readGo 与 Java。读取一个或多个标签,或标签数组的一部分。
writeGo 与 Java。写入一个或多个标签,或标签数组的一部分。
subscribe仅限 Java,通过轮询模拟。EtherNet/IP 在此没有推送机制,因此订阅在底层实际上是一次周期性读取,而非设备主动发起的通知。
discover仅限 Go。设备发现通过独立的 discovery API 提供,而非通过 browse。Java 的 LogixDriver 未实现发现功能。

连接字符串

Logix 的连接字符串格式如下:

logix:tcp://{ip-address}:{port}?{options}

tcp 是唯一受支持的传输方式。端口和选项是可选的。一个连接字符串示例如下:

logix:tcp://127.0.0.1:44818?communication-path=[1,1]

连接字符串选项

名称

类型

默认值

必填

描述

名称

Logix CIP

代码

logix

Maven 依赖

<dependency>
  <groupId>org.apache.plc4x</groupId>
  <artifactId>plc4j-driver-eip</artifactId>
  <version>1.0.0</version>
</dependency>

默认传输

tcp

支持的传输协议

  • tcp

配置选项:

big-endian

BOOLEAN

true

配置连接是否以大端(Big-Endian)格式传输数据。

connection-serial-number

INT

0

用于 Forward_Open 的连接序列号。CIP 要求每个连接的序列号唯一,因此默认值 0 表示“每个连接随机选择一个”。仅当交换过程需要可复现时(例如在录制的测试中)才应显式设置该值。
自 1.0.0 起

force-unconnected-operation

BOOLEAN

false

强制驱动使用非连接请求。
自 0.13.0 起

request-timeout-ms

INT

10000

所有类型请求的默认超时时间。

communication-path

STRING

通信路径允许跨多个背板进行连接路由。它使用 Logix 控制器中常见的一种通用格式。
该路径由成对的值组成,每对值以 1(背板)或 2(以太网)开头,如果是背板地址,后面跟一个槽位号;如果使用以太网,则后面跟一个 IP 地址。例如 [1,4,2,192.168.0.1,1,1] —— 路由到第一个机架的第 4 个槽位,该槽位是一个以太网模块,随后连接到地址 192.168.0.1,并在槽位 1 中找到该模块。

传输配置选项:

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 表示使用临时端口。

标签地址

标签寻址在 Go 和 Java 中均有实现。参见协议支持矩阵]了解每种实现所支持的功能。

通用格式

要向 PLC4X 设备读写数据,Logix 驱动使用符号段。这用于通过符号名称引用对象。这样读取数据会简单得多,因为读取时无需指定数据类型。

{tagname}
{tagname}:{DataType}
{tagname}[{selection}]
{tagname}[{selection}]:{DataType}
名称说明
标签名(Tagname)数据的符号名称。可以选择性地以 % 作为前缀。
选择(可选)要读取数组中的哪些元素——单个索引或一个闭区间。它位于标签名之后、数据类型之前。参见数组寻址。
数据类型(可选)该值的数据类型。省略时默认为 DINT,因此对于任何不是 32 位整数的值,都应显式给出——读取时同样如此。
选择位于数据类型之前,区间表示要读取多少个元素。从索引 0 开始读取四个 DINT 的写法是 myArray[0..3]:DINT。
CIP 数组索引通过 MemberID 传输,其实例字段为 uint 8,因此选择不能从索引 255 之后开始。区间可以超出该范围——请求携带起始值和数量——但不能从那里开始。
Java 驱动的标签名不要求以 % 开头——rate:DINT 可以在 Java 中解析。Go 驱动的地址模式要求标签名以 % 开头,因此相同的地址在那里会被拒绝。本页描述的是 Java 语法;Go 驱动可接受的格式请参阅其源码。

数据类型

以下是该驱动可以编码和解码的数据类型:

用于存储使用此数据类型
位BOOL
8 位位串BYTE
16 位位串WORD
32 位位串DWORD
64 位位串LWORD
8 位整数SINT
16 位整数INT
32 位整数DINT
64 位整数LINT
8 位无符号整数USINT
16 位无符号整数UINT
32 位无符号整数UDINT
64 位无符号整数ULINT
32 位浮点数REAL
64 位浮点数LREAL
字符串STRING
无符号类型和位串类型覆盖其完整范围,因此 UDINT 或 DWORD 返回的范围是 0 到 4294967295,ULINT 或 LWORD 返回的范围是 0 到 18446744073709551615。它们的有符号对应类型则保持不变:值为 0xFFFFFFFF 的 DINT 仍然读作 -1。
其他 CIP 数据类型会被地址解析器接受,但驱动不会对其编码或解码;读取此类标签会得到 INTERNAL_ERROR 的响应码,而不是值。

示例

地址含义
myTagmyTag 的单个元素,解码为 DINT
myTag:REALmyTag 的单个元素,解码为 REAL
myTag[0..3]myTag 的四个元素,解码为 DINT
myArray[3]:DINTmyArray 的第 3 个元素
myArray[0..3]:DINTmyArray 的第 0 到 3 个元素,以列表形式返回
%myTag:REALmyTag 的单个元素,解码为 REAL — % 前缀可选

表 1. 示例

评论

登录后参与评论

正在加载评论…