SLMP (Mitsubishi MELSEC)
SLMP (Seamless Message Protocol, also known as MELSEC Communication Protocol / MC protocol) is used by Mitsubishi Electric MELSEC PLCs such as the iQ-R, iQ-F, Q and L series.
The driver communicates using binary 3E frames over TCP.
Both the Go and Java drivers address the word devices D, W and R only. This is the driver’s deliberate scope, not an unfinished port: the bit devices (M, X, Y, B) and the wider MELSEC command set are not implemented in either language.
Supported Operations
| Name | Value | Description |
|---|---|---|
|
||
|
||
|
||
Connection String
SLMP has the following connection string format:
slmp:{transport}://{ip-address}:{port}?{options}
An example connection string would look like:
slmp:tcp://192.168.0.10:5007
Note the transport, port and option fields are optional.
Connection String Options
Name |
Type |
Default Value |
Required |
Description |
Name |
SLMP (MELSEC) 3E |
|||
Code |
|
|||
Maven Dependency |
<dependency> <groupId>org.apache.plc4x</groupId> <artifactId>plc4j-driver-slmp</artifactId> <version>1.0.0</version> </dependency> |
|||
Default Transport |
|
|||
Supported Transports |
|
|||
Config options: |
||||
|
INT |
0 |
SLMP monitoring timer written into each 3E request frame (0 = wait infinitely). |
|
|
INT |
5000 |
Client-side timeout in milliseconds awaiting a response. |
|
Transport config options: |
||||
tcp |
||||
|
INT |
5000 |
Connection timeout in milliseconds. |
|
|
INT |
0 |
Socket read timeout in milliseconds. 0 means no timeout. |
|
|
INT |
0 |
Socket write timeout in milliseconds. 0 means no timeout. |
|
|
BOOLEAN |
true |
Enable TCP_NODELAY (disable Nagle’s algorithm). |
|
|
BOOLEAN |
false |
Enable SO_KEEPALIVE. |
|
|
INT |
81920 |
Send buffer size in bytes. 0 uses system default. |
|
|
INT |
81920 |
Receive buffer size in bytes. 0 uses system default. |
|
|
STRING |
Local address to bind to (optional). If not set, uses default. |
||
|
INT |
0 |
Local port to bind to (optional). 0 uses ephemeral port. |
|
Tag Addresses
Addressing is implemented in Go and Java. Both address the word devices D, W and R only. See the protocol support matrix for what each implementation does.
General Format
|
Array selection uses the shared notation - a single index, an inclusive range, and optionally the array’s declared lower bound, placed before the type. See Addressing arrays. |
In general all SLMP addresses have this format:
{device}{address}[selection]:{data-type}
If the data-type part is omitted, it defaults to WORD.
If no selection is given, a single element is assumed.
Devices
The following word devices are supported:
-
D(data register, decimal address) -
R(file register, decimal address) -
W(link register, hexadecimal address; an optional0xprefix is accepted)
The 0x prefix is only valid for hexadecimally addressed devices (W).
A single read or write request may cover at most 960 words (a conservative single-frame ceiling); larger requests are rejected instead of being split.
Data Types
The following data types are supported:
-
WORD (uint 16, default)
-
INT (int 16)
-
UINT (uint 16)
-
DINT (int 32)
-
UDINT (uint 32)
-
REAL (float 32)
Multi-word types (DINT, UDINT, REAL) are decoded from consecutive words in little-endian (low-word-first) order, as transmitted by the PLC.
Examples
-
D350(one word from data register 350, default WORD type) -
D350:DINT(one 32-bit integer, occupying two words, from data register 350) -
R200[0..3]:REAL(four floats from file register 200) -
W1A[0..9]:WORD(ten words from link register 0x1A) -
W0x1A(link register 0x1A, using the explicit0xprefix form)