Electron do Brasil EP4 IoT Modbus register map
Thermal protection relay (ANSI 23, 26, 38, 45, 49, 74, 77, 94) with four temperature sensors, alarm, shutdown, fault and ventilation relays, analog output and Modbus RTU
- Official
- 86 registers
- Modbus RTU
- Revision 1 · 2026-11-10
- Identity: serial number
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
- 1-based · wire address = address − 1
Connection values are defaults: the device may be configured differently.
Map
- Registers
- 86 holding registers
- Groups
- 6
- Translation tables
- 6
- Revision
- 1 · 2026-11-10
- Added
- ()
- File
- maps/electron/ep4-iot.mbmap.json · 20 KB · history
- SHA-256
- db133223210e2e4b97e3bfdc92fe77af87b467abe03ad1eb1495d56bfab7a4b4
- Manufacturer
- electron.com.br
Device identity
What a tool can read to check that this map fits the connected device (SPEC.md section 4.7). Registers with a role are read like any other register.
| Role | Register | Address | Type | Values |
|---|---|---|---|---|
| Serial number | Serial number | holding 97 | uint32 ABCD |
Sources and notes
- Mapa de Registradores MODBUS RTU, Relé de Proteção Térmica EP4 IoT linked in issue #129; the document linked for the EP3 in issue #128 has the same text
Source: Electron do Brasil, Mapa de Registradores MODBUS RTU, Relé de Proteção Térmica EP4 IoT
- All registers are holding registers. The document numbers them 1 to 99 and calls the type Holding Register (40.000), so the addresses are 1-based (address on the wire = number minus 1). The document does not say so explicitly: if a read fails, try address_base 0.
- The document allows 2400 to 57600 bps with automatic baud rate detection, 8 data bits and 1 stop bit. It gives no parity, default baud rate or slave address: 9600 N and 1 are placeholders; the slave address is in register 50.
- Temperatures are shown in the document with one decimal and a scale of -1000:10, which it does not explain. They are given as raw values: check against the display before applying a scale.
- Registers 26, 42, 43, 45, 46, 47, 48, 49 and 61 are bit fields, one entry per bit. The command bits are write-only. Registers 80 to 83 (map latitude, two registers each, both labelled latitude) and the maximum current-output temperature of sensor 4 are not in the document or not clear, so they are left out.
- The EP3 IoT document linked in issue #128 has exactly the same content and title (EP4 IoT), so this map may not match an EP3 IoT.
- Written from the manufacturer's document; not tested on a device.
| Area | Address | Name | Type | Access | Unit | Scale | Description |
|---|---|---|---|---|---|---|---|
| HR | 1 | uint16 | RW | Range 0 to 200.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display) | |||
| HR | 2 | uint16 | RW | Range 0 to 200.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display) | |||
| HR | 3 | uint16 | RW | Range 0 to 200.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display) | |||
| HR | 4 | uint16 | RW | Range 0 to 200.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display) | |||
| HR | 9 | uint16 | RW | ×0.1 | Range 0 to 10.0 | ||
| HR | 10 | uint16 | RW | Range 0 to 200.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display) | |||
| HR | 11 | uint16 | RW | Range 0 to 200.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display) | |||
| HR | 12 | uint16 | RW | Range 0 to 200.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display) | |||
| HR | 13 | uint16 | RW | Range 0 to 200.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display) | |||
| HR | 18 | uint16 | RW | min | |||
| HR | 19 | uint16 | RW | Range 0 to 200.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display) | |||
| HR | 20 | uint16 | RW | Range 0 to 200.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display) | |||
| HR | 21 | uint16 | RW | Range 0 to 200.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display) | |||
| HR | 22 | uint16 | RW | Range 0 to 200.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display) | |||
| HR | 24 | uint16 | RW | ||||
| HR | 25 | uint16 | RW | ||||
| HR | 26 | bool bit 0 | W | Write 1 | |||
| HR | 26 | bool bit 1 | W | Write 1 | |||
| HR | 27 | uint16 | RW | ×0.1 | Range 0 to 30.0 | ||
| HR | 28 | uint16 | RW | ||||
| HR | 29 | uint16 | R | Range 0 to 200.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display) | |||
| HR | 30 | uint16 | R | Range 0 to 200.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display) | |||
| HR | 31 | uint16 | R | Range 0 to 200.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display) | |||
| HR | 32 | uint16 | R | Range 0 to 200.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display) | |||
| HR | 33 | int16 | RW | Range -10.0 to 10.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display) | |||
| HR | 34 | int16 | RW | Range -10.0 to 10.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display) | |||
| HR | 35 | int16 | RW | Range -10.0 to 10.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display) | |||
| HR | 36 | int16 | RW | Range -10.0 to 10.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display) | |||
| HR | 37 | uint16 | R | Range 0 to 200.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display) | |||
| HR | 38 | uint16 | R | Range 0 to 200.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display) | |||
| HR | 39 | uint16 | R | Range 0 to 200.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display) | |||
| HR | 40 | uint16 | R | Range 0 to 200.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display) | |||
| HR | 42 | bool bit 0 | RW | ||||
| HR | 42 | bool bit 1 | RW | ||||
| HR | 42 | bool bit 2 | RW | ||||
| HR | 42 | bool bit 3 | RW | ||||
| HR | 43 | bool bit 0 | RW | ||||
| HR | 43 | bool bit 1 | RW | ||||
| HR | 43 | bool bit 2 | RW | ||||
| HR | 43 | bool bit 3 | RW | The document lists value 1 as Normal for this relay: taken to be a typing error | |||
| HR | 45 | bool bit 0 | R | ||||
| HR | 45 | bool bit 1 | R | ||||
| HR | 45 | bool bit 2 | R | ||||
| HR | 45 | bool bit 3 | R | ||||
| HR | 46 | bool bit 0 | R | ||||
| HR | 46 | bool bit 1 | R | ||||
| HR | 46 | bool bit 2 | R | ||||
| HR | 46 | bool bit 3 | R | Sensor 4 is the ambient sensor | |||
| HR | 47 | bool bit 0 | R | ||||
| HR | 47 | bool bit 1 | R | ||||
| HR | 47 | bool bit 2 | R | ||||
| HR | 47 | bool bit 3 | R | Sensor 4 is the ambient sensor | |||
| HR | 48 | bool bit 0 | R | ||||
| HR | 48 | bool bit 1 | R | ||||
| HR | 48 | bool bit 2 | R | ||||
| HR | 48 | bool bit 3 | R | ||||
| HR | 48 | bool bit 4 | R | ||||
| HR | 48 | bool bit 6 | R | ||||
| HR | 48 | bool bit 7 | R | ||||
| HR | 49 | bool bit 0 | R | ||||
| HR | 49 | bool bit 1 | R | ||||
| HR | 49 | bool bit 2 | R | ||||
| HR | 49 | bool bit 3 | R | ||||
| HR | 50 | uint16 | R | Range 1 to 254 | |||
| HR | 51 | uint16 | RW | ||||
| HR | 60 | uint16 | RW | ||||
| HR | 61 | bool bit 0 | RW | ||||
| HR | 61 | bool bit 1 | RW | ||||
| HR | 61 | bool bit 2 | RW | ||||
| HR | 61 | bool bit 3 | RW | ||||
| HR | 62 | uint16 | RW | ms | ×500 | The value is the number of 500 ms periods; range 5 to 50 | |
| HR | 63 | int16 | RW | Range -1.00 to 1.00; the document's scale column (-1000:100) is not explained, so the value is raw (check against the display) | |||
| HR | 70 | uint16 | RW | Range 0 to 2000; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display) | |||
| HR | 71 | uint16 | RW | Range 0 to 2000; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display) | |||
| HR | 72 | uint16 | RW | Range 0 to 2000; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display) | |||
| HR | 73 | uint16 | RW | Range 0 to 2000; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display) | |||
| HR | 75 | uint16 | RW | Range 0 to 2000; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display) | |||
| HR | 76 | uint16 | RW | Range 0 to 2000; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display) | |||
| HR | 77 | uint16 | RW | Range 0 to 2000; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display) | |||
| HR | 92 | int16 | R | Range -50.0 to 250.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display) | |||
| HR | 93 | int16 | R | Range -50.0 to 250.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display) | |||
| HR | 94 | uint16 | R | Range 1 to 31 | |||
| HR | 95 | uint16 | R | Range 1 to 12 | |||
| HR | 96 | uint16 | R | Range 2020 to 2099 | |||
| HR | 97 | uint32 ABCD | R | Registers 97 (MSB) and 98 (LSB) | |||
| HR | 99 | uint16 | R | Range 0 to 999 |
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).