协议

SLMP(三菱 MELSEC)

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

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

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 前缀形式)

评论

登录后参与评论

正在加载评论…