Skip to content

Add SLMP (MELSEC Communication 3E) protocol module (read-only wire layer)#2597

Draft
LivingLikeKrillin wants to merge 1 commit into
apache:developfrom
LivingLikeKrillin:feature/slmp-protocol
Draft

Add SLMP (MELSEC Communication 3E) protocol module (read-only wire layer)#2597
LivingLikeKrillin wants to merge 1 commit into
apache:developfrom
LivingLikeKrillin:feature/slmp-protocol

Conversation

@LivingLikeKrillin

Copy link
Copy Markdown

First increment of the SLMP driver proposed in #2585 — the codegen-layer protocol module only (protocols/slmp), opened as a draft per the Slack suggestion so the work is visible early.

What''s in it

  • 3E binary frame (request/response discriminated on the subheader byte), little-endian, read-only
  • Commands: Batch Read (0x0401), Random Read (0x0403), Batch Read Multiple Blocks (0x0406), word units
  • Root type declares the new-SPI encoding defaults
  • ParserSerializer vectors derived from the worked examples in the public Mitsubishi reference manual SH-080008 (sections 8.1 / 8.3 / 8.4)

Validation so far

  • mvn -pl protocols/slmp test green on current develop (post-SPI3 merge): the mspec parses and all type references resolve
  • 0x0401 / 0x0403 cross-checked against pymcprotocol (independent MIT-licensed client): its request bytes are byte-identical to the vectors except the monitoring-timer field, and it decodes the responses to the manual''s exact values
  • 0x0406: pymcprotocol has no multi-block API, so the request vector rests on the manual''s worked example plus an independent re-encode check — flagging this honestly
  • The ParserSerializer suite is not yet executed by any build module — like the other protocols, it runs from the (upcoming) driver module; until then the in-module test validates that the mspec parses and all type references resolve
  • Byte round-trip through generated code will come with the driver module

Next (not in this PR)


Developed with AI assistance; every wire-layer byte was verified against SH-080008, with the batch and random reads additionally cross-checked against pymcprotocol as noted above.

…wire layer

Adds the codegen-layer protocol module for SLMP / MELSEC Communication
protocol (Mitsubishi PLCs), as proposed in the SLMP driver proposal issue:

- slmp.mspec modelling the 3E binary frame (request/response), with
  Batch Read (0x0401), Random Read (0x0403) and Batch Read Multiple
  Blocks (0x0406) in word units, read-only
- ParserSerializer test suite with vectors derived from the worked
  examples in the public Mitsubishi reference manual SH-080008
  (sections 8.1/8.3/8.4)
- Root type declares the new-SPI encoding defaults (little-endian)

The driver module (plc4j/drivers/slmp) will follow on top of the new
SPI as a separate step.

Signed-off-by: Jooyoung Jung <livinglikekrillin@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant