meta data for this page
LamaPLC: Eastron SDM 230 with Modbus Communication
The Eastron SDM230 Modbus MID 1-phase kWh meter is ideal for the precise monitoring of, for example, a solar panel system, a charging station, a heat pump, or another 1-phase group of your choice. On the illuminated LCD screen, you can immediately see how many kWh the respective system consumes or produces, and it is used for official registration and billing of the measurement data. For example, if you want to bill a tenant for the electricity consumption of a specific room.
Key Features
- Measurement: Measures various parameters, including active energy (kWh), reactive energy (kVArh), power (kW, kVAr, kVA), voltage, current, frequency, and power factor.
- Bi-directional Energy: Supports bi-directional energy measurement (import and export), making it suitable for solar PV and battery storage applications.
- Direct Connection: Designed for a maximum 100A direct connection, eliminating the need for external current transformers (CTs).
- Display: Features a blue-backlit LCD screen for easy reading of data.
- Communication: Includes two pulse outputs and a communication port (RS485 Modbus or M-Bus, depending on the model) for remote monitoring and integration with building management systems (BMS) or SCADA systems. Some models also offer Wi-Fi or LoRaWAN communication options.
- Certification: Many variants are MID-certified (Class B EN50470-3), making them suitable for billing applications.
- Design: Compact design (two modules wide, 36mm) for DIN rail mounting.
Technical Specifications
According to Eastron Europe and Camax.co.uk, the general specifications are as follows:
| Specification | Detail |
|---|---|
| Nominal Voltage (Un) | 230V AC (range 176~276V AC) |
| Base Current (Ib) | 10A |
| Max. Current (Imax) | 100A |
| Frequency | 50/60 Hz (±10%) |
| Accuracy | Active Energy: Class 1 (IEC62053-21) / Class B (EN50470-3) |
| Power Consumption | <2W/10VA |
| Operating Temperature | -25°C to +55°C |
| Mounting | 35mm DIN rail |
| IP Rating | IP51 (indoor) |
Eastron SDM 230 Versions
The differences between versions of the Eastron SDM230 primarily involve physical wiring updates, communication defaults, and enhanced firmware features relating to energy measurement.
| Feature | SDM230 V1 | SDM230 V2 & V3 |
|---|---|---|
| Physical Wiring Layout | Non-standard. Live In/Out at the top; Neutral In/Out at the bottom. | Standard. Live and Neutral In at the top; Live and Neutral Out at the bottom. |
| Energy Calculation | Basic energy measurement mode. | Enhanced “Net-counting” (better for solar/bidirectional energy). |
| Exported Energy | Limited export recording capability. | Separate and reliable measurement of exported energy (kWh). |
| Default Baud Rate | Often defaults to 2400 bps. | Often defaults to 9600 bps (configurable). |
| Resettable Energy | Single total energy counter. | Includes a second, user-resettable total energy counter. |
| Certifications | Older certifications | Updated MID certification options available |
| Firmware Date | Older builds | Recent builds (typically post-2018 for V2/V3) |
If you'd like to support the development of the site with the price of a coffee — or a few — please do so here.
Here's a handy tip: you can quickly save this page as a PDF by clicking “export to PDF” in the menu on the right side of the screen.
Modbus communication
RS485 communication interface, MODBUS RTU protocol:
- Baudrate: 9600 Baud (default, can be set)
- Parity: Even
- Databits: 8
- Stopbits: 1
- Default slave ID: 45
- Number of Drivers and Receivers: 32 Drivers, 32 Receivers (without repeater)
- Maximum Cable Length: 1200 m
- Maximum Data Rate: 10 Mbaud
- Maximum Common Mode Voltage: 12 V .. –7 V
- Minimum Driver Output Levels (Loaded): +/– 1.5 V
- Minimum Driver Output Levels (Unloaded): +/– 6 V
- Drive Load: Minimum 60 ohms
- Driver Output Short Circuit Current Limit: 150 mA to Gnd, 250 mA to 12 V, 250 mA to -7 V
- Minimum Receiver Input Resistance: 12 kΩ
- Receiver Sensitivity: +/- 200 mV
32-bit (2 words) input registers
The registers are read-only.
Float conversion: 32-bit float with big-endian
| Code | Register Nr | Description | Type | Unit | Modbus reading |
|---|---|---|---|---|---|
| 1st modbus block | |||||
| V1 | 30000 | Line neutral volt | Float | V | Basis 0x00, words: 37 |
| C1 | 30006 | Current | Float | A | 0x06 |
| ACP1 | 30012 | Active power | Float | W | 0x0C |
| APP1 | 30018 | Apparent power | Float | VA | 0x12 |
| RAP1 | 30024 | Reactive power | Float | VAr | 0x18 |
| PF1 | 30030 | Power factor | Float | - | 0x1E |
| PA1 | 30036 | Phase angle | Float | ° | 0x24 |
| 2nd modbus block | |||||
| FR1 | 30070 | Frequency | Float | Hz | Basis 0x46, words: 25 |
| IACE1 | 30072 | Import active energy | Float | kWh | 0x02 |
| EACE1 | 30074 | Export active energy | Float | kWh | 0x04 |
| IRAE1 | 30076 | Import reactive energy | Float | kvarh | 0x06 |
| ERAE1 | 30078 | Export reactive energy | Float | kvarh | 0x08 |
| TP | 30084 | Total system power demand | Float | W | 0x0E |
| - | 30086 | Maximum total system power demand | Float | W | 0x10 |
| - | 30088 | Current system positive power demand | Float | W | 0x12 |
| - | 30090 | Maximum system positive power demand | Float | W | 0x14 |
| - | 30092 | Current system reverse power demand | Float | W | 0x16 |
| - | 30094 | Maximum system reverse power demand | Float | W | 0x18 |
| 3th modbus block | |||||
| - | 30258 | Current demand | Float | A | Basis 0x102, words: 7 |
| - | 30264 | Maximum current demand | Float | A | 0x06 |
| 4th modbus block | |||||
| TAE | 30342 | Total active energy | Float | kWh | Basis 0x342, words: 7 |
| TRE | 30344 | Total reactive energy | Float | kvarh | |
| - | 30384 | Current resettable total active energy | Float | kWh | |
| - | 30386 | Current resettable total reactive energy | Float | kvarh | |
| MA | 40020 | Modbus node address RW, default 45 | Float | - | |
| MBR | 40028 | Modbus baud rate RW, 0 = 2400 bps(default) 1 = 4800 bps 2 = 9600 bps 5=1200 bps | Float | - | |
Arduino & Eastron SDM 230
To use the Eastron SDM230 with an Arduino, you need an RS-485-to-TTL converter module and a library such as the SDM_Energy_Meter library by reaper7, since the meter uses Modbus RTU over RS-485 physical lines.
Required Hardware
- Arduino Board: e.g., Uno, Nano, or ESP32.
- RS485 Converter Module: A module based on the MAX485 or similar chip.
- Eastron SDM230: Ensure its Modbus ID (address) and Baud Rate are noted (defaults are typically Address 1 and 2400 bps or 9600 bps; check your model's manual).
Wiring Schematic (MAX485 module)
| MAX485 Pin | Function | Arduino Pin |
|---|---|---|
| VCC | Power | 5V |
| GND | Ground | GND |
| DI | Driver Input (TX) | Pin 4 (SoftwareSerial TX) |
| RO | Receiver Output (RX) | Pin 3 (SoftwareSerial RX) |
| DE & RE | Driver/Receiver Enable | Pin 2 (Connect these two pins together) |
| A | RS485+ | SDM230 Terminal A |
| B | RS485- | SDM230 Terminal B |
Arduino Example Code
This example uses the SDM_Energy_Meter library. First, install the library via the Arduino Library Manager.
#include <SoftwareSerial.h> #include <SDM.h> // Pins for SoftwareSerial communication (RX, TX) SoftwareSerial sdmSerial(3, 4); // Pin used to control the DE/RE pins of the MAX485 converter #define RS485_EN 2 // Create an SDM object (SoftwareSerial instance, Enable Pin, Slave ID) // Default address is 1 (0x01) SDM sdm(&sdmSerial, RS485_EN, 0x01); void setup() { Serial.begin(115200); // Serial monitor output to PC sdmSerial.begin(9600); // SDM230 default baud rate (Check your meter, may be 2400bps) Serial.println("\nEastron SDM230 Reader Initialized"); } void loop() { // Read Voltage (Register 0x0000) float voltage = sdm.readVal(SDM_PHASE_1_VOLTAGE); if (!isnan(voltage)) { Serial.print("Voltage: "); Serial.print(voltage); Serial.println(" V"); } else { Serial.println("Failed to read Voltage"); } // Read Total Power (Register 0x000C) float power = sdm.readVal(SDM_PHASE_1_POWER); if (!isnan(power)) { Serial.print("Power: "); Serial.print(power); Serial.println(" W"); } else { Serial.println("Failed to read Power"); } // Read Total Active Energy (Register 0x0156 or 0x0048 for Import) float energy = sdm.readVal(SDM_TOTAL_ACTIVE_ENERGY); if (!isnan(energy)) { Serial.print("Total Energy: "); Serial.print(energy); Serial.println(" kWh"); } else { Serial.println("Failed to read Energy"); } delay(3000); // Wait 3 seconds before next read }
This page has been accessed for: Today: 1, Until now: 24
