Carlo Gavazzi EM111/EM112 Modbus register map
Also searched as: EM111 · EM112 · EM110 · ET112 · EM111-DIN · EM112-DIN · ET112-DIN · EM100 series · ET100 series
48 Modbus registers of the Carlo Gavazzi EM111 and EM112, with the address on the wire, the 30001-style reference, data type, byte order, unit and scale. Transcribed from EM100 Series and ET100 Series Communication Protocol (Version 2 Revision 14).
EM100 and ET100 series single-phase DIN-rail meters (EM110, EM111, EM112, ET112) with Modbus RTU; scaled integers, low word first.
- Device type
- Energy meter
- Registers
- 48
- Interfaces
- Modbus RTU
- Default unit ID
- 1
- Byte order (multi-register values)
- CDAB
- Serial settings
- 9600 baud, 8 data bits, no parity, 1 stop bit
- Registers per read
- 50
- Models covered
- EM110, EM111, EM112, ET112
Hardware verification
Not yet verified on hardware. The map is transcribed from the vendor document and checked against it by script; check the first readings against the device display.
Connection notes
- Function codes 03 and 04 return the same values; input registers here can also be read as holding registers.
- 32-bit values are sent low word first (LSW, MSW); bytes inside each word are high byte first.
- Up to 50 registers per read.
- Registers 0100h to 0185h repeat the same values in another order and are not listed.
- The 1 Wh totalizers at 0400h need an EM111 or EM112 with firmware b.10, made from 2020 on.
- The 64-bit totalizers at 0500h are left out; their LSW-first word order has no byte_order code here.
- Reading a setup address not listed in the document returns an illegal data address exception.
Registers
Grouped as in the vendor document.
Voltage 2 registers
| Name and key | Reference | Address | Type | Byte order | Unit | Scale |
|---|---|---|---|---|---|---|
Voltagevoltage | 30001 | 0x0000 | int32 | CDAB | V | × 0.1 |
Frequencyfrequency | 30016 | 0x000F | int16 | Hz | × 0.1 |
Current 1 registers
| Name and key | Reference | Address | Type | Byte order | Unit | Scale |
|---|---|---|---|---|---|---|
Currentcurrent | 30003 | 0x0002 | int32 | CDAB | A | × 0.001 |
Power 4 registers
| Name and key | Reference | Address | Type | Byte order | Unit | Scale |
|---|---|---|---|---|---|---|
Active poweractive_power | 30005 | 0x0004 | int32 | CDAB | W | × 0.1 |
Apparent powerapparent_power | 30007 | 0x0006 | int32 | CDAB | VA | × 0.1 |
Reactive powerreactive_power | 30009 | 0x0008 | int32 | CDAB | var | × 0.1 |
Power factorpower_factor | 30015 | 0x000E | int16 | × 0.001 |
Energy 7 registers
| Name and key | Reference | Address | Type | Byte order | Unit | Scale |
|---|---|---|---|---|---|---|
Total imported active energyimport_active_energy | 30017 | 0x0010 | int32 | CDAB | kWh | × 0.1 |
Total imported reactive energyimport_reactive_energy | 30019 | 0x0012 | int32 | CDAB | kvarh | × 0.1 |
Partial imported active energyimport_active_energy_partial | 30021 | 0x0014 | int32 | CDAB | kWh | × 0.1 |
Partial imported reactive energyimport_reactive_energy_partial | 30023 | 0x0016 | int32 | CDAB | kvarh | × 0.1 |
Total exported active energyexport_active_energy | 30033 | 0x0020 | int32 | CDAB | kWh | × 0.1 |
Total exported reactive energyexport_reactive_energy | 30035 | 0x0022 | int32 | CDAB | kvarh | × 0.1 |
Hour counterrun_hours | 30045 | 0x002C | int32 | CDAB | h | × 0.01 |
Demand 2 registers
| Name and key | Reference | Address | Type | Byte order | Unit | Scale |
|---|---|---|---|---|---|---|
Active power demandactive_power_demand | 30011 | 0x000A | int32 | CDAB | W | × 0.1 |
Peak active power demandactive_power_demand_max | 30013 | 0x000C | int32 | CDAB | W | × 0.1 |
Tariff energy 2 registers
| Name and key | Reference | Address | Type | Byte order | Unit | Scale |
|---|---|---|---|---|---|---|
Imported active energy, tariff 1import_active_energy_t1 | 30025 | 0x0018 | int32 | CDAB | kWh | × 0.1 |
Imported active energy, tariff 2import_active_energy_t2 | 30027 | 0x001A | int32 | CDAB | kWh | × 0.1 |
Energy hr 8 registers
| Name and key | Reference | Address | Type | Byte order | Unit | Scale |
|---|---|---|---|---|---|---|
Total imported active energy, integer partimport_active_energy_int | 31025 | 0x0400 | int32 | CDAB | kWh | |
Total imported active energy, decimal partimport_active_energy_dec | 31027 | 0x0402 | int32 | CDAB | kWh | × 0.001 |
Total imported reactive energy, integer partimport_reactive_energy_int | 31029 | 0x0404 | int32 | CDAB | kvarh | |
Total imported reactive energy, decimal partimport_reactive_energy_dec | 31031 | 0x0406 | int32 | CDAB | kvarh | × 0.001 |
Total exported active energy, integer partexport_active_energy_int | 31033 | 0x0408 | int32 | CDAB | kWh | |
Total exported active energy, decimal partexport_active_energy_dec | 31035 | 0x040A | int32 | CDAB | kWh | × 0.001 |
Total exported reactive energy, integer partexport_reactive_energy_int | 31037 | 0x040C | int32 | CDAB | kvarh | |
Total exported reactive energy, decimal partexport_reactive_energy_dec | 31039 | 0x040E | int32 | CDAB | kvarh | × 0.001 |
Info 5 registers
| Name and key | Reference | Address | Type | Byte order | Unit | Scale |
|---|---|---|---|---|---|---|
Version codeversion_code | 30771 | 0x0302 | uint16 | |||
Revision coderevision_code | 30772 | 0x0303 | uint16 | |||
Maximum words per readmax_read_words | 48197 | 0x2004 | uint16 | |||
Serial numberserial_number | 320481 | 0x5000 | raw | |||
Production yearproduction_year | 320497 | 0x5010 | uint16 |
Setup 17 registers
| Name and key | Reference | Address | Type | Byte order | Unit | Scale |
|---|---|---|---|---|---|---|
Passwordpassword | 44097 | 0x1000 | uint16 | |||
Current transformer ratioct_ratio | 44100 | 0x1003 | uint32 | CDAB | × 0.1 | |
Demand integration timedemand_interval | 44113 | 0x1010 | uint32 | CDAB | min | |
Pulse output on timepulse_duration | 44115 | 0x1012 | uint32 | CDAB | ||
Display modedisplay_mode | 44353 | 0x1100 | uint16 | |||
Tariff managementtariff_enable | 44354 | 0x1101 | uint16 | |||
Home pagehome_page | 44355 | 0x1102 | uint16 | |||
Measurement modemeasurement_mode | 44356 | 0x1103 | uint16 | |||
Tariff selection sourcetariff_mode | 44609 | 0x1200 | uint16 | |||
Active tariff (serial selection)tariff_select | 44610 | 0x1201 | uint16 | |||
RS485 instrument addressmodbus_address | 48193 | 0x2000 | uint16 | |||
RS485 baud ratebaud_rate | 48194 | 0x2001 | uint16 | |||
RS485 parityparity | 48195 | 0x2002 | uint16 | |||
RS485 stop bitsstop_bits | 48196 | 0x2003 | uint16 | |||
Reset partial and tariff meters and demand peakreset_partial | 416385 | 0x4000 | uint16 | |||
Reset total energy metersreset_totals | 416386 | 0x4001 | uint16 | |||
Reset hour counterreset_hour_counter | 416387 | 0x4002 | uint16 |
Source documents
- EM100 Series and ET100 Series Communication Protocol , Carlo Gavazzi, Version 2 Revision 14 (accessed 2026-11-09)
Read it by name
Read the EM111/EM112 with an AI assistant
The Proxus Industrial MCP Server includes this map. Set it on the device, and Claude, Cursor or VS Code reads registers by key with the right type, byte order, scale and unit. It only reads.
This device speaks Modbus RTU: reach it through a Modbus TCP gateway and use the gateway’s address with the device’s unit ID.
proxus-mcp.json
{
"devices": {
"em111-1": {
"protocol": "modbus-tcp",
"host": "192.168.10.40",
"unit_id": 1,
"map": "carlo-gavazzi/em111-em112"
}
}
} Ask your assistant
Read voltage, frequency, current from em111-1.
The tool call it makes
read_named(device: "em111-1", keys: ["voltage", "frequency", "current"]) Have this device? Verify the map.
Ask your assistant to run verify_device_map. It reads every register once, read-only, checks that the values are plausible and asks you to compare two values with the display. You get a report and a prefilled GitHub issue to submit; your name goes on this map’s verified list.
Collecting from many devices?
Proxus reads Modbus TCP and RTU devices next to the machines, keeps the history and delivers the values to dashboards, databases and AI.