Eastron SDM630 Modbus Register Map and Simulator
The Eastron SDM630 is one of the most common three-phase energy meters in solar installations, submetering projects, and distribution panels. It is cheap, MID-certified in several variants, and speaks plain Modbus RTU, which makes it a default choice for PV monitoring, tenant billing, and energy dashboards. If you are writing software that reads one, you need the register map.
This reference lists the SDM630's measurement registers exactly as they appear in Eastron's official SDM630 Modbus protocol implementation document, explains the float encoding, and shows you how to simulate the full map on your Mac before the meter arrives on site.
Overview: Eastron SDM630
The SDM630 is a DIN-rail three-phase meter that measures line-to-neutral and line-to-line voltage, per-phase current, active, reactive, and apparent power, power factor, frequency, and imported and exported energy. Eastron sells it in several flavors (SDM630-Modbus, SDM630-Modbus V2, SDM630MCT with MID approval), and all of them share the same Modbus register layout documented in the protocol PDF linked above.
It talks Modbus RTU over RS485 only. There is no Ethernet or TCP variant, so in practice you either poll it directly from a serial port or put a serial-to-TCP gateway in front of it. If you are troubleshooting the RS485 side, our RS485 termination and biasing guide covers the wiring mistakes that cause intermittent CRC errors.
Communication Setup
The defaults from the Eastron protocol document are:
- Slave address: 1 (configurable 1 to 247, broadcast on address 0 supported).
- Baud rate: 9600 by default; 2400, 4800, 19200, and 38400 selectable via the baud rate holding register.
- Frame format: 1 stop bit and no parity by default (Even or Odd parity with 1 stop bit are configurable).
- Function code: 0x04 (Read Input Registers) for all measurement values. Configuration parameters live in holding registers read with 0x03.
Two protocol quirks matter in practice. First, every read request must contain an even number of registers: each value is a two-register float, and an odd count returns a Modbus exception. Second, a single transaction is limited to 40 values (80 registers); anything larger also triggers an exception response.
SDM630 Register Map: Electrical Measurements
All measurement values are 32-bit IEEE 754 floats spanning two consecutive input registers, accessed with function code 0x04. The table shows the protocol start address (hex), the equivalent 3xxxx register number used by many tools, the data type, and the unit. Addresses come directly from the Eastron protocol document.
A single read of 0x0046 through 0x0051 (registers 30071 to 30082) pulls frequency plus all five energy totals in one transaction: 12 registers, six float values. For a full dashboard snapshot, read 0x0000 to 0x0049 (80 registers, the protocol maximum) and you get every electrical measurement plus the kWh counters in one pass.
Float Encoding and Word Order
Every SDM630 value is a 32-bit IEEE 754 float split across two 16-bit registers. The Eastron document specifies that the most significant register comes first (big-endian word order) by default, and that this order can be changed through a holding register if your master expects the opposite.
Concretely: a phase 1 voltage of 230.5 V encodes as 0x43668000. Register 0x0000 holds the high word 0x4366, register 0x0001 holds the low word 0x8000. If your dashboard shows 4.3e-41 or some absurd number instead of volts, you are combining the words in the wrong order. The failure mode and the fix are the same for every meter, and our Modbus floating point byte order guide walks through all four combinations.
One more decoding note: power factor on the SDM630 is a plain float between -1 and +1, where the sign indicates current direction (positive forward, negative reverse), so you do not need any scaling. Energy floats are in kWh and kVArh directly, again with no multiplier.
Testing Without Hardware: Simulating the SDM630
SDM630 software projects have a predictable shape: a data logger, an MQTT bridge, or a billing script that polls registers over a USB-RS485 adapter. Testing all of that against the real meter requires a panel, CTs, and a load. Against a simulator, it takes minutes.
Options for testing without hardware:
- Manual register entry: Any generic Modbus slave simulator can answer on input registers 0x0000 onward, but you have to hand-encode every float into two register halves and keep values moving so your logger sees change.
- Custom device template: MacTools Modbus Poll runs a Modbus slave on macOS where you build a template from a blank register map: enter the SDM630 addresses from the table above, set each to Float32, and the simulator fills them with realistic auto-drifting values. Voltage hovers near 230 V, current varies with a load factor, and the kWh registers accumulate, so your logger and billing logic exercise exactly the data shapes a real SDM630 produces.
The template is a ten-minute job: 22 rows from the table, one data type, done. Save it once and every future SDM630 project starts from a known-good slave.
Quick Start: Reading an SDM630
- Wire the bus. Daisy-chain A and B lines, terminate both ends with 120 ohms, keep it under 1200 m.
- Build or load your template. In MacTools Modbus Poll, create a custom template from the register table above (Float32, big-endian word order) and start the slave.
- Point your master at it. For a real meter, connect through your USB-RS485 adapter at 9600 8-N-1, slave address 1. For the simulator, connect to localhost with the same slave address.
- Read input registers with FC04. Start at 0x0000 for 80 registers to grab everything, or read 0x0046 to 0x0051 for just frequency and energy.
- Decode float pairs. Combine each two-register pair high word first as IEEE 754 float32.
The same register map works unchanged whether the slave is a simulator or a meter on the wall, which is the whole point of testing against the map first.
Frequently Asked Questions
What is the default Modbus setting on an Eastron SDM630?
The factory defaults are slave address 1, 9600 baud, no parity, and 1 stop bit. The address is configurable from 1 to 247 and baud rates from 2400 to 38400 are supported via the configuration holding registers.
Which Modbus function code does the SDM630 use for measurements?
All measurement values are input registers read with function code 0x04. Configuration parameters such as baud rate and meter ID live in holding registers and use function code 0x03 for reads.
Why does my SDM630 return a Modbus exception on register reads?
The two most common causes are odd register counts (every read must request an even number of registers because each value is a two-register float) and requests above the 80-register (40 value) transaction limit. Both return an exception response by design.
What byte order does the SDM630 use for floating point values?
The most significant register comes first by default, so the high word of each IEEE 754 float sits in the lower address. Eastron documents a configuration register that can swap the order if your master expects little-endian words.
Can I test SDM630 integrations without a physical meter?
Yes. Build a custom slave template in MacTools Modbus Poll using the register addresses from the official protocol document, and the simulator answers FC04 requests with realistic drifting float values on your Mac, no RS485 hardware required.
Simulate the SDM630 on macOS
MacTools Modbus Poll runs a Modbus slave with custom device templates, so you can rehearse the full SDM630 register map without hardware. Native macOS app. $19 one-time.
Get MacTools Modbus PollRelated: Full SCADA System
Need continuous monitoring with dashboards, alarms, and trending across all your devices? Voltrus SCADA supports Modbus, OPC-UA, Siemens S7, Allen-Bradley, DNP3, BACnet, MQTT, and more. Lifetime license from $49.