SLMP(三菱 MELSEC)
SLMP(Seamless Message Protocol,亦称 MELSEC Communication Protocol / MC 协议)被三菱电机的 MELSEC PLC 所使用,例如 iQ-R、iQ-F、Q 和 L 系列。
该驱动通过 TCP 使用二进制 3E 帧进行通信。
Go 和 Java 驱动都仅支持字装置 D、W 和 R。这是该驱动刻意限定的范围,而非未完成的移植:位装置(M、X、Y、B)以及更完整的 MELSEC 命令集在这两种语言中均未实现。
支持的操作
| 名称 | 值 | 描述 |
|---|---|---|
read | ||
write | ||
subscribe(仅轮询模拟——SLMP 没有原生的推送机制,因此订阅在底层实际上是一次周期性读取) |
连接字符串
SLMP 的连接字符串格式如下:
slmp:{transport}://{ip-address}:{port}?{options}一个示例连接字符串如下所示:
slmp:tcp://192.168.0.10:5007请注意,传输协议、端口和选项字段为可选字段。
连接字符串选项
名称
类型
默认值
是否必填
描述
名称
SLMP (MELSEC) 3E
代码
slmp
Maven 依赖
<dependency>
<groupId>org.apache.plc4x</groupId>
<artifactId>plc4j-driver-slmp</artifactId>
<version>1.0.0</version>
</dependency>默认传输
KEEPALIVE
| 名称 | 描述 |
|---|---|
KEEP_ALIVE_INTERVAL_MS |
传输层发送数据包(用于检查连接状态)的时间间隔,单位为毫秒。未指定时,传输层通常默认为 20,000(即 20 秒)。 |
未明确指定时,传输层的默认值为 K
tcp
支持的传输方式
tcp
配置选项:
monitoring-timer
INT
0
写入每个 3E 请求帧的 SLMP 监视定时器(0 = 无限等待)。
request-timeout-ms
INT
5000
客户端等待响应的超时时间(毫秒)。
传输配置选项:
tcp
tcp.connect-timeout-ms
INT
5000
连接超时时间,单位为毫秒。
tcp.read-timeout-ms
INT
0
以毫秒为单位的套接字读取超时时间。0 表示不超时。
tcp.write-timeout-ms
INT(16位有符号整数)
0
Socket 写入超时时间,单位为毫秒。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 中实现。两者仅支持字元件 D、W 和 R。各实现的具体支持情况请参见协议支持矩阵。
通用格式
| 数组选择使用共享记法——单个索引、闭区间范围,以及可选的数组声明下界,置于类型之前。参见数组寻址。 |
|---|
通常,所有 SLMP 地址都具有以下格式:
{device}{address}[selection]:{data-type}如果省略数据类型部分,则默认为 WORD。如果未给出选择,则视为单个元素。
设备
支持以下字设备:
D(数据寄存器,十进制地址)R(文件寄存器,十进制地址)W(链接寄存器,十六进制地址;可接受可选的0x前缀)
前缀 0x 仅对以十六进制寻址的设备(W)有效。
单次读取或写入请求最多可涵盖 960 个字(保守的单帧上限);超过该上限的请求会被拒绝,而不会被拆分。
数据类型
支持以下数据类型:
- WORD(uint 16,默认)
- INT(int 16)
- UINT(uint 16)
- DINT(int 32)
- UDINT(uint 32)
- REAL(float 32)
多字类型(DINT、UDINT、REAL)按小端序(低字在前)从连续的字中解码,顺序与 PLC 传输的一致。
示例
D350(从数据寄存器 350 读取一个字,默认 WORD 类型)D350:DINT(从数据寄存器 350 读取一个 32 位整数,占用两个字)R200[0..3]:REAL(从文件寄存器 200 读取四个浮点数)W1A[0..9]:WORD(从链接寄存器 0x1A 读取十个字)W0x1A(链接寄存器 0x1A,使用显式的0x前缀形式)
评论
登录后参与评论
KnowForge