Phase 3 PR 58 -- Mitsubishi MELSEC pymodbus profile + smoke #57

Merged
dohertj2 merged 1 commits from phase-3-pr58-mitsubishi-sim-profile into v2 2026-04-18 23:10:23 -04:00
Owner

Summary

  • tests/.../Pymodbus/mitsubishi.json: representative MELSEC Modbus Device Assignment — D0..D1023 → HR[0..1023], M-relay marker at coil 512, X-input marker at DI 528. D0 fingerprint = 0x1234. Float32 / Int32 in CDAB word order (same family as DL260). D10 = binary 1234 (NOT BCD) — proves binary-by-default.
  • tests/.../Mitsubishi/MitsubishiProfile.cs + MitsubishiSmokeTests.cs — single smoke fact write-then-read HR[200], gated on MODBUS_SIM_PROFILE=mitsubishi.
  • csproj copies Mitsubishi/**.

Validation

  • 1/1 Mitsubishi integration smoke pass
  • No regression in S7 / DL205 suites

Test plan

  • Profile boots cleanly under pymodbus
  • Smoke round-trip
  • Shared-blocks cell collision avoided by placing M marker at cell 32 (coil 512) not cell 0
## Summary - `tests/.../Pymodbus/mitsubishi.json`: representative MELSEC Modbus Device Assignment — D0..D1023 → HR[0..1023], M-relay marker at coil 512, X-input marker at DI 528. D0 fingerprint = 0x1234. Float32 / Int32 in CDAB word order (same family as DL260). D10 = binary 1234 (NOT BCD) — proves binary-by-default. - `tests/.../Mitsubishi/MitsubishiProfile.cs` + `MitsubishiSmokeTests.cs` — single smoke fact write-then-read HR[200], gated on `MODBUS_SIM_PROFILE=mitsubishi`. - csproj copies `Mitsubishi/**`. ## Validation - 1/1 Mitsubishi integration smoke pass - No regression in S7 / DL205 suites ## Test plan - [x] Profile boots cleanly under pymodbus - [x] Smoke round-trip - [x] Shared-blocks cell collision avoided by placing M marker at cell 32 (coil 512) not cell 0
dohertj2 added 1 commit 2026-04-18 23:10:19 -04:00
Phase 3 PR 58 -- Mitsubishi MELSEC pymodbus profile + smoke integration test. Adds tests/ZB.MOM.WW.OtOpcUa.Driver.Modbus.IntegrationTests/Pymodbus/mitsubishi.json modelling a representative MELSEC Modbus Device Assignment block: D0..D1023 -> HR[0..1023], M-relay marker at coil 512 (cell 32) and X-input marker at DI 528 (cell 33). Covers the canonical MELSEC quirks from docs/v2/mitsubishi.md: D0 fingerprint at HR[0]=0x1234 so clients can verify the assignment parameter block is in effect, scratch HR 200..209 mirroring dl205/s7_1500/standard scratch range for uniform smoke tests, Float32 1.5f at HR[100..101] in CDAB word order (HR[100]=0, HR[101]=0x3FC0) -- same as DL260, OPPOSITE of S7 ABCD, confirms MELSEC-family driver profile default must be ByteOrder.WordSwap. Int32 0x12345678 CDAB at HR[300..301]. D10 = binary 1234 (0x04D2) proves MELSEC is BINARY-by-default (opposite of DL205 BCD-by-default quirk) -- reading D10 with Bcd16 data type would throw InvalidDataException on nibble 0xD. M-relay marker cell moved to address 32 (coil 512) to avoid shared-block collision with D0 uint16 marker at cell 0; pymodbus shared-blocks=true semantics allow only one type per cell index, so Modbus-coil-0 can't coexist with Modbus-HR-0 on the same sim. Same pattern we applied to dl205 profile (X-input bank at cell 1, not cell 0, to coexist with V0 marker). Adds Mitsubishi/ test directory with MitsubishiProfile.cs (SmokeHoldingRegister=200, SmokeHoldingValue=7890, BuildOptions with probe-disabled + 2s timeout) and MitsubishiSmokeTests.cs (Mitsubishi_roundtrip_write_then_read_of_holding_register single fact that writes 7890 at HR[200] then reads back, gated on MODBUS_SIM_PROFILE=mitsubishi). csproj copies Mitsubishi/** as PreserveNewest. Per-model differences (FX5U firmware gate, QJ71MT91 FC22/23 absence, FX/iQ-F octal vs Q/L/iQ-R hex X-addressing) are handled in the MelsecAddress helper (PR 59) + per-model test classes (PR 60). Verified: smoke 1/1 passes against live mitsubishi sim. Prior S7 tests 4/4 still green when swapped back. Modbus.Tests unit suite 143/143. f52b7d8979
dohertj2 merged commit fccb566a30 into v2 2026-04-18 23:10:23 -04:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: dohertj2/lmxopcua#57