Samrello MMS-03 Modbus register map
Three-phase multifunction energy meter with LCD and RS485 Modbus
- Official
- 235 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 8E1 · 9600 baud, 8 data bits, even parity, 1 stop bit defaults
- 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
- 1 holding register, 234 input registers
- Groups
- 11
- Translation tables
- 1
- Revision
- 1 · 2026-11-11
- Added
- ()
- File
- maps/samrello/mms-03.mbmap.json · 64 KB · history
- SHA-256
- 2ee76d51d8e158e851e53703ef6e5ed1fa39c8a8a8973e86a7a3466dadf70396
- Manufacturer
- samrello.com.br
Sources and notes
- MMS-03 Modbus Registers Spreadsheet supplied with the map request
Source: Samrello, MMS-03 Modbus Registers (spreadsheet)
- Addresses are those in the spreadsheet, used as they are (address_base 0). Input registers are read with function 0x04. All values are big endian.
- Energies are 64-bit integers in micro-units (µWh, µvarh, µVAh); the scale converts them to Wh, varh and VAh.
- The spreadsheet gives the hour timers at 53 and 55 as '33 bit' and '34 bit' unsigned; they are taken as 32-bit like the first one at 51.
- The spreadsheet gives no serial settings (baud rate, parity, stop bits) or unit id, so none are set here.
- The THD values are sent as the actual value divided by 100 (a ratio), so the scale of 100 gives percent. The individual harmonics 2 to 31 are sent as the actual value multiplied by 100, so the scale of 0.01 gives percent.
- Register 4000 is write-only: the spreadsheet says to send 'T' for relay on and 'F' for relay off.
| Area | Address | Name | Type | Access | Unit | Scale | Description |
|---|---|---|---|---|---|---|---|
| IR | 0 | uint16 | R | ||||
| IR | 2 | uint16 | R | ||||
| IR | 4 | uint16 | R | ||||
| IR | 6 | uint16 | R | ||||
| IR | 8 | uint16 | R | ||||
| IR | 9 | uint64 ABCD | R | Wh | ×0.000001 | Sent in µWh | |
| IR | 13 | uint64 ABCD | R | VARh | ×0.000001 | Sent in µVARh | |
| IR | 17 | uint64 ABCD | R | VARh | ×0.000001 | Sent in µVARh | |
| IR | 21 | uint64 ABCD | R | VAh | ×0.000001 | Sent in µVAh | |
| IR | 25 | uint64 ABCD | R | Wh | ×0.000001 | Sent in µWh | |
| IR | 29 | uint64 ABCD | R | VARh | ×0.000001 | Sent in µVARh | |
| IR | 33 | uint64 ABCD | R | VARh | ×0.000001 | Sent in µVARh | |
| IR | 37 | uint64 ABCD | R | VAh | ×0.000001 | Sent in µVAh | |
| IR | 41 | float32 ABCD | R | Hz | |||
| IR | 43 | float32 ABCD | R | kW/kVA | |||
| IR | 45 | float32 ABCD | R | kW/kVA | |||
| IR | 47 | float32 ABCD | R | kW/kVA | |||
| IR | 49 | float32 ABCD | R | kW/kVA | |||
| IR | 51 | uint32 ABCD | R | h | ×0.1 | Sent in tenths of an hour | |
| IR | 53 | uint32 ABCD | R | h | ×0.1 | Sent in tenths of an hour | |
| IR | 55 | uint32 ABCD | R | h | ×0.1 | Sent in tenths of an hour | |
| IR | 57 | float32 ABCD | R | V | |||
| IR | 59 | float32 ABCD | R | V | |||
| IR | 61 | float32 ABCD | R | ° | |||
| IR | 63 | float32 ABCD | R | A | |||
| IR | 65 | float32 ABCD | R | ||||
| IR | 67 | float32 ABCD | R | W | |||
| IR | 69 | float32 ABCD | R | var | |||
| IR | 71 | float32 ABCD | R | VA | |||
| IR | 73 | float32 ABCD | R | ° | |||
| IR | 75 | float32 ABCD | R | % | ×100 | The device sends the actual value divided by 100 | |
| IR | 77 | float32 ABCD | R | % | ×100 | The device sends the actual value divided by 100 | |
| IR | 79 | float32 ABCD | R | V | |||
| IR | 81 | float32 ABCD | R | V | |||
| IR | 83 | float32 ABCD | R | ° | |||
| IR | 85 | float32 ABCD | R | A | |||
| IR | 87 | float32 ABCD | R | ||||
| IR | 89 | float32 ABCD | R | W | |||
| IR | 91 | float32 ABCD | R | var | |||
| IR | 93 | float32 ABCD | R | VA | |||
| IR | 95 | float32 ABCD | R | ° | |||
| IR | 97 | float32 ABCD | R | % | ×100 | The device sends the actual value divided by 100 | |
| IR | 99 | float32 ABCD | R | % | ×100 | The device sends the actual value divided by 100 | |
| IR | 101 | float32 ABCD | R | V | |||
| IR | 103 | float32 ABCD | R | V | |||
| IR | 105 | float32 ABCD | R | ° | |||
| IR | 107 | float32 ABCD | R | A | |||
| IR | 109 | float32 ABCD | R | ||||
| IR | 111 | float32 ABCD | R | W | |||
| IR | 113 | float32 ABCD | R | var | |||
| IR | 115 | float32 ABCD | R | VA | |||
| IR | 117 | float32 ABCD | R | ° | |||
| IR | 119 | float32 ABCD | R | % | ×100 | The device sends the actual value divided by 100 | |
| IR | 121 | float32 ABCD | R | % | ×100 | The device sends the actual value divided by 100 | |
| IR | 1000 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1001 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1002 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1003 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1004 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1005 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1006 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1007 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1008 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1009 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1010 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1011 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1012 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1013 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1014 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1015 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1016 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1017 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1018 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1019 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1020 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1021 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1022 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1023 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1024 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1025 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1026 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1027 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1028 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1029 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1030 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1031 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1032 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1033 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1034 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1035 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1036 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1037 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1038 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1039 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1040 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1041 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1042 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1043 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1044 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 | |
| IR | 1045 | uint16 | R | % | ×0.01 | The device sends the actual value multiplied by 100 |
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).