Logix
Logix
Logix 是 Allen-Bradley/Rockwell ControlLogix、CompactLogix 以及其它通过 EtherNet/IP 使用 CIP(通用工业协议)的控制器所采用的基于标签的寻址方式。
本页介绍 logix 驱动代码,它由同一个 eip 模块注册,并共享其 Java 标签类——有关相同的标签语法说明,请参阅 EtherNet/IP 页面,其中记录了通用的 CIP 符号寻址内容。
支持的操作
| 名称 | 值 | 说明 |
|---|---|---|
read | Go 与 Java。读取一个或多个标签,或标签数组的一部分。 | |
write | Go 与 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 的响应码,而不是值。 |
|---|
示例
| 地址 | 含义 |
|---|---|
myTag | myTag 的单个元素,解码为 DINT |
myTag:REAL | myTag 的单个元素,解码为 REAL |
myTag[0..3] | myTag 的四个元素,解码为 DINT |
myArray[3]:DINT | myArray 的第 3 个元素 |
myArray[0..3]:DINT | myArray 的第 0 到 3 个元素,以列表形式返回 |
%myTag:REAL | myTag 的单个元素,解码为 REAL — % 前缀可选 |
表 1. 示例
评论
登录后参与评论
KnowForge