An unofficial summary of facts (addresses, types, units, scaling) from the maker's manual. Not affiliated with the maker; values can differ by firmware or model. Always check the device manual before writing (run commands, settings).
Default communication
| Protocol | Modbus RTU |
|---|---|
| Baud (factory) | 9600 bps — options: 1200, 2400, 4800, 9600 |
| Data · parity · stop | — · None · 1 |
| Slave ID (factory) | 1 (1~247) |
| 32-bit order | ABCD |
| Manual address style | 40001/30001 style (wire address + 1, first digit = table) |
- The manual lists 30001/40001-style numbers with a Hex start-address column (30001 ↔ 00 00, 40003 ↔ 00 02). Wire address = number − 30001 / − 40001; 6-digit numbers (461457, 463761 …) use − 400001 (p.16-19).
- Addressing confirmed by frame examples: read 30001 L1 voltage 01 04 00 00 00 02 71 CB → 01 04 04 43 66 00 00 0E 1F (230.0) (p.16-17); read 40003 01 03 00 02 00 02 65 CB → 01 03 04 42 70 00 00 EF 90 (60.0); write 15 min 01 10 00 02 00 02 04 41 70 00 00 67 91 → 01 10 00 02 00 02 E0 08 (p.19-20). CRC recomputed and correct for all six.
- Float is big-endian: the first register holds the high 16 bits (p.15 response frame description; example 43 66 00 00 = 230).
- Defaults 9600 bps, no parity, address 1 (p.6 spec table, p.18 40019/40021/40029). Data bits are not stated.
Registers (31)
«Wire» is the 0-based address in the request frame (PortDock's «0-based» notation). Value = raw × scale. Table: HR holding register, IR input register, CO coil, DI discrete input. Function codes in hex.
Swipe the table sideways — the first column (manual address) stays put.
| Manual | Wire | Table | Name | Type | Unit · scale | R/W | FC | Details |
|---|---|---|---|---|---|---|---|---|
| 30001 | 0 (0x0000) | IR | Line-to-neutral voltage | F32 ABCD | V | R | 04 | p.16 (PDF 19) |
| 30007 | 6 (0x0006) | IR | Current | F32 ABCD | A | R | 04 | p.16 (PDF 19) |
| 30013 | 12 (0x000C) | IR | Active power | F32 ABCD | W | R | 04 | p.16 (PDF 19) |
| 30019 | 18 (0x0012) | IR | Apparent power | F32 ABCD | VA | R | 04 | p.16 (PDF 19) |
| 30025 | 24 (0x0018) | IR | Reactive power | F32 ABCD | VAr | R | 04 | p.16 (PDF 19) |
| 30031 | 30 (0x001E) | IR | Power factor | F32 ABCD | R | 04 | p.16 (PDF 19) | |
| 30071 | 70 (0x0046) | IR | Frequency | F32 ABCD | Hz | R | 04 | p.16 (PDF 19) |
| 30073 | 72 (0x0048) | IR | Import active energy | F32 ABCD | kWh | R | 04 | p.16 (PDF 19) |
| 30075 | 74 (0x004A) | IR | Export active energy | F32 ABCD | kWh | R | 04 | p.16 (PDF 19) |
| 30077 | 76 (0x004C) | IR | Import reactive energy | F32 ABCD | kVArh | R | 04 | p.16 (PDF 19) |
| 30079 | 78 (0x004E) | IR | Export reactive energy | F32 ABCD | kVArh | R | 04 | p.16 (PDF 19) |
| 30085 | 84 (0x0054) | IR | Total active power demand | F32 ABCD | W | R | 04 | p.16 (PDF 19) |
| 30087 | 86 (0x0056) | IR | Maximum total active power demand | F32 ABCD | W | R | 04 | p.16 (PDF 19) |
| 30089 | 88 (0x0058) | IR | Import active power demand | F32 ABCD | W | R | 04 | Table name says 'Import active energy demand' but unit is W p.16 (PDF 19) |
| 30091 | 90 (0x005A) | IR | Maximum import active power demand | F32 ABCD | W | R | 04 | p.16 (PDF 19) |
| 30093 | 92 (0x005C) | IR | Export active power demand | F32 ABCD | W | R | 04 | p.16 (PDF 19) |
| 30095 | 94 (0x005E) | IR | Maximum export active power demand | F32 ABCD | W | R | 04 | p.16 (PDF 19) |
| 30259 | 258 (0x0102) | IR | Current demand | F32 ABCD | A | R | 04 | p.16 (PDF 19) |
| 30265 | 264 (0x0108) | IR | Maximum current demand | F32 ABCD | A | R | 04 | p.16 (PDF 19) |
| 30343 | 342 (0x0156) | IR | Total active energy | F32 ABCD | kWh | R | 04 | p.16 (PDF 19) |
| 30345 | 344 (0x0158) | IR | Total reactive energy | F32 ABCD | kVArh | R | 04 | p.16 (PDF 19) |
| 40003 | 2 (0x0002) | HR | Demand period | F32 ABCD | min | R/W | 03·10 | Default 60; 0 = real time (updated every second) Range 0 ~ 60 min p.17 (PDF 20) |
| 40013 | 12 (0x000C) | HR | Relay pulse width | F32 ABCD | ms | R/W | 03·10 | 60 = 60 ms (default) · 100 = 100 ms · 200 = 200 ms p.17 (PDF 20) |
| 40019 | 18 (0x0012) | HR | Parity and stop bits | F32 ABCD | R/W | 03·10 | 0 = 1 stop bit, no parity (default) · 1 = 1 stop bit, even parity · 2 = 1 stop bit, odd parity · 3 = 2 stop bits, no parity p.17-18 (PDF 20-21) | |
| 40021 | 20 (0x0014) | HR | Modbus address | F32 ABCD | R/W | 03·10 | Default 1 Range 1 ~ 247 p.18 (PDF 21) | |
| 40029 | 28 (0x001C) | HR | Baud rate | F32 ABCD | R/W | 03·10 | 0 = 2400 bps · 1 = 4800 bps · 2 = 9600 bps (default) · 5 = 1200 bps p.18 (PDF 21) | |
| 40051 | 50 (0x0032) | HR | CT primary current | F32 ABCD | A | R/W | 03·10 | Default 5 Range 5 ~ 9999 A p.18 (PDF 21) |
| 40061 | 60 (0x003C) | HR | Backlight time | F32 ABCD | min | R/W | 03·10 | 0 = always on, 121 = always off, default 60 Range 0 ~ 121 min p.18 (PDF 21) |
| 40087 | 86 (0x0056) | HR | Pulse 1 output mode | F32 ABCD | R/W | 03·10 | 1 = Import active energy · 2 = Import + export active energy · 4 = Export active energy (default) · 5 = Import reactive energy · 6 = Import + export reactive energy · 8 = Export reactive energy p.18 (PDF 21) | |
| 461457 | 61456 (0xF010) | HR | Reset | U16 | W | 10 | 2-byte hex (F0 10) 0 = Reset maximum demand p.18 (PDF 21) | |
| 463761 | 63760 (0xF910) | HR | Pulse 1 rate | U16 | R/W | 03·10 | 2-byte hex (F9 10) 0 = 0.001 kWh/imp (default) · 1 = 0.01 kWh/imp · 2 = 0.1 kWh/imp · 3 = 1 kWh/imp p.19 (PDF 22) |
Notes
- Left out: 463779 metering mode (number 463779 means F9 22 but the Hex column says F9 20; no example decides, p.19), 463745 scroll display time (BCD format), 464513 serial number (unsigned int32 — word order not stated).
- Read/write Float values as register pairs (even start). This manual covers the 40 mA CT version only; check other SDM120 variants against their own manuals.
Read it with PortDock
- Install the free PortDock Modbus Master and connect with the device's settings.
- On the table toolbar, «Device profile…» → pick this device → «Load». Polling tables, names, types and the Slave ID are filled in (optionally the serial settings too).
- Names carry the unit and scale (e.g. «×0.01 Hz»). Values on screen are raw — multiply by the scale.
- To test your program without the device, PortDock Modbus Slave's «Emulate device…» serves the same map with example values.
Download JSON
- eastron/sdm120ct-40ma.json (GitHub raw) · copy on this site · history
- schema.json — format (JSON Schema). table, address (0-based), type and order match the PortDock CSV.
- License: CC BY 4.0 — please cite:
PortDock device register maps, v2026.10 · 09ac1d0b2792, https://portdock.dev/devices/
and this page. LICENSE · data bundle, version and changelog - Found a mistake? Please open a GitHub issue with the manual page.
Sources
- SDM120CT-40mA User Manual — Eastron Electronic Co., Ltd., 2026 V1.0 (version history 1.0 = 2026-07-16 initial issue); file name EastronSDM120CT-M40mAUsermanualV10.pdf (posted 2026-07-17 on the eastrongroup.com download center) · printed p.6 comm specs, p.14-15 frame format, p.16-17 input registers and example, p.17-20 holding registers and examples (PDF page = printed + 3) · checked 2026-10-29