Embrasul MD20 Modbus register map
Three-phase multifunction energy meter with RS485 Modbus RTU
- Official
- 171 registers
- Modbus RTU
- Revision 1 · 2026-11-11
Official: Written from the manufacturer's documentation, but not tested on a device yet. Check the map against the manufacturer's documentation before you write to a live device. Tested it? Report a test.
Communication
- Protocol
- Modbus RTU
- Unit ID
- 1
- Serial
- 9600 8N1 · 9600 baud, 8 data bits, none parity, 1 stop bit
- Byte / word order
- ABCD · bytes big-endian, words high first
- Addresses
- 0-based
Connection values are defaults: the device may be configured differently.
Map
- Registers
- 171 holding registers
- Groups
- 12
- Translation tables
- 7
- Revision
- 1 · 2026-11-11
- Added
- ()
- File
- maps/embrasul/md20.mbmap.json · 37 KB · history
- SHA-256
- ab0d075642211ca3cfa56a37311590dc6ec74b8a82bd7f5f3309bd7e8b4e395c
- Manufacturer
- embrasul.com.br
Sources and notes
- Manual de Instalação e Operação do MD20 Sections 7 and 8, supplied with the map request
Source: Embrasul, Manual de Instalação e Operação do MD20, section 7 (Modbus RTU) and section 8 (register list)
- Register addresses are the decimal ones in the manual, used as they are (address_base 0): the manual's read example for the phase voltages sends start address 1000 (0x03E8). Function 0x03 reads; function 0x10 writes.
- Data bytes are sent high byte first and the example (0x435C0000 = 220) shows a 32-bit float with the high word first, so the word order is big. The manual does not state the word order of the 32-bit integers; big is assumed.
- Registers marked R/WC in the manual (clock, communication, power parameters and the others) are changed with the configuration command block: write an instruction code and its parameters with function 0x10 at registers 300 to 423, then read the result code at 425 (0 = accepted). They are marked read-only here because they cannot be written directly. The instruction codes are in sections 8.1 to 8.8 and are not mapped.
- Energy registers are integers in 0.1 kWh, 0.1 kvarh and 0.1 kVAh; the scale of 0.1 gives kWh, kvarh and kVAh.
- Names follow the manual's aliases. I1VGMax and I1VGMin in the manual are the maximum and minimum of the average three-phase current; the manual lists phase B minimum power at 6078, which is taken as the 6072 the sequence implies.
- The peak demand dates (5120, 5128, 5136), the demand reset time (5002) and the unmapped date-time values use four registers of the manual's date format and are not mapped.
- Serial settings: 2400, 4800, 9600 or 19200 baud, no, odd or even parity, 8 data bits, 1 stop bit, address 1 to 247. Defaults are 9600 baud, no parity, address 1.
| Area | Address | Name | Type | Access | Unit | Scale | Description |
|---|---|---|---|---|---|---|---|
| HR | 50 | string[20] | R | UTF-8 text | |||
| HR | 70 | uint32 ABCD | R | ||||
| HR | 72 | uint16 | R | Format X.Y.ZTT | |||
| HR | 73 | uint16 | R | 0 to 99, years since 2000 | |||
| HR | 74 | uint16 | R | Month in the high byte, day in the low byte | |||
| HR | 75 | uint16 | R | Hour in the high byte, minute in the low byte | |||
| HR | 76 | uint16 | R | 0 to 59999 (seconds and milliseconds) | |||
| HR | 80 | uint16 | R | 1 to 247 | |||
| HR | 81 | uint16 | R | ||||
| HR | 82 | uint16 | R | ||||
| HR | 90 | uint16 | R | ||||
| HR | 91 | uint32 ABCD | R | V/V | ×0.0001 | Sent as the ratio multiplied by 10000 | |
| HR | 93 | uint32 ABCD | R | A/A | ×0.0001 | Sent as the ratio multiplied by 10000 | |
| HR | 150 | uint16 | R | ||||
| HR | 151 | uint16 | R | ||||
| HR | 152 | uint16 | R | ||||
| HR | 1000 | float32 ABCD | R | V | |||
| HR | 1002 | float32 ABCD | R | V | |||
| HR | 1004 | float32 ABCD | R | V | |||
| HR | 1006 | float32 ABCD | R | V | |||
| HR | 1008 | float32 ABCD | R | V | |||
| HR | 1010 | float32 ABCD | R | V | |||
| HR | 1012 | float32 ABCD | R | V | |||
| HR | 1014 | float32 ABCD | R | V | |||
| HR | 1016 | float32 ABCD | R | A | |||
| HR | 1018 | float32 ABCD | R | A | |||
| HR | 1020 | float32 ABCD | R | A | |||
| HR | 1022 | float32 ABCD | R | A | |||
| HR | 1026 | float32 ABCD | R | W | |||
| HR | 1028 | float32 ABCD | R | W | |||
| HR | 1030 | float32 ABCD | R | W | |||
| HR | 1032 | float32 ABCD | R | W | |||
| HR | 1034 | float32 ABCD | R | var | |||
| HR | 1036 | float32 ABCD | R | var | |||
| HR | 1038 | float32 ABCD | R | var | |||
| HR | 1040 | float32 ABCD | R | var | |||
| HR | 1042 | float32 ABCD | R | VA | |||
| HR | 1044 | float32 ABCD | R | VA | |||
| HR | 1046 | float32 ABCD | R | VA | |||
| HR | 1048 | float32 ABCD | R | VA | |||
| HR | 1050 | float32 ABCD | R | ||||
| HR | 1052 | float32 ABCD | R | ||||
| HR | 1054 | float32 ABCD | R | ||||
| HR | 1056 | float32 ABCD | R | ||||
| HR | 1058 | float32 ABCD | R | ||||
| HR | 1060 | float32 ABCD | R | ||||
| HR | 1062 | float32 ABCD | R | ||||
| HR | 1064 | float32 ABCD | R | ||||
| HR | 1066 | float32 ABCD | R | Hz | |||
| HR | 2000 | float32 ABCD | R | % | |||
| HR | 2002 | float32 ABCD | R | % | |||
| HR | 2004 | float32 ABCD | R | % | |||
| HR | 2006 | float32 ABCD | R | % | |||
| HR | 2008 | float32 ABCD | R | % | |||
| HR | 2010 | float32 ABCD | R | % | |||
| HR | 2012 | float32 ABCD | R | % | |||
| HR | 2014 | float32 ABCD | R | % | |||
| HR | 4000 | uint32 ABCD | R | kWh | ×0.1 | ||
| HR | 4002 | uint32 ABCD | R | kWh | ×0.1 | ||
| HR | 4004 | uint32 ABCD | R | kWh | ×0.1 | ||
| HR | 4006 | uint32 ABCD | R | kWh | ×0.1 | ||
| HR | 4008 | uint32 ABCD | R | kWh | ×0.1 | ||
| HR | 4010 | uint32 ABCD | R | kWh | ×0.1 | ||
| HR | 4012 | uint32 ABCD | R | kWh | ×0.1 | ||
| HR | 4014 | uint32 ABCD | R | kWh | ×0.1 | ||
| HR | 4024 | uint32 ABCD | R | kvarh | ×0.1 | ||
| HR | 4026 | uint32 ABCD | R | kvarh | ×0.1 | ||
| HR | 4028 | uint32 ABCD | R | kvarh | ×0.1 | ||
| HR | 4030 | uint32 ABCD | R | kvarh | ×0.1 | ||
| HR | 4032 | uint32 ABCD | R | kvarh | ×0.1 | ||
| HR | 4034 | uint32 ABCD | R | kvarh | ×0.1 | ||
| HR | 4036 | uint32 ABCD | R | kvarh | ×0.1 | ||
| HR | 4038 | uint32 ABCD | R | kvarh | ×0.1 | ||
| HR | 4048 | uint32 ABCD | R | kVAh | ×0.1 | ||
| HR | 4050 | uint32 ABCD | R | kVAh | ×0.1 | ||
| HR | 4052 | uint32 ABCD | R | kVAh | ×0.1 | ||
| HR | 4054 | uint32 ABCD | R | kVAh | ×0.1 | ||
| HR | 5000 | uint16 | R | ||||
| HR | 5001 | uint16 | R | min | |||
| HR | 5020 | float32 ABCD | R | W | |||
| HR | 5022 | float32 ABCD | R | W | |||
| HR | 5028 | float32 ABCD | R | W | |||
| HR | 5030 | float32 ABCD | R | W | |||
| HR | 5036 | float32 ABCD | R | W | |||
| HR | 5038 | float32 ABCD | R | W | |||
| HR | 5044 | float32 ABCD | R | W | |||
| HR | 5046 | float32 ABCD | R | W | |||
| HR | 5052 | float32 ABCD | R | var | |||
| HR | 5054 | float32 ABCD | R | var | |||
| HR | 5060 | float32 ABCD | R | var | |||
| HR | 5062 | float32 ABCD | R | var | |||
| HR | 5068 | float32 ABCD | R | var | |||
| HR | 5070 | float32 ABCD | R | var | |||
| HR | 5076 | float32 ABCD | R | var | |||
| HR | 5078 | float32 ABCD | R | var | |||
| HR | 5084 | float32 ABCD | R | VA | |||
| HR | 5086 | float32 ABCD | R | VA | |||
| HR | 5092 | float32 ABCD | R | VA | |||
| HR | 5094 | float32 ABCD | R | VA | |||
| HR | 5100 | float32 ABCD | R | VA |
No registers match
Try part of the name, an address (decimal or 0x hex) or clear the filters.
Help improve this map
- I tested it on a deviceReport whether it worked, even if you did not write the map.
- Suggest a correctionEdit the file on GitHub; it opens a pull request.
- Report a problemA wrong address, type, scale or byte order.
- Read the formatWhat each key of the file means (SPEC.md).