Enapter · Electrolyser
Electrolyser 4.1 (EL 4.1) Modbus register map
Default configuration
- Protocol
- Modbus TCP
- Port
- 502
- Unit ID
- 1
- Addressing
- 0-based
- Byte order
- Big endian
- Word order
- High word first
Register map
| Address | Count | Name | Type | Unit | Scale | Access |
|---|---|---|---|---|---|---|
| 0 | 2 | Device model 0x45533431 for the EL 4.1. | UInt32 | - | 1 | R |
| 2 | 1 | Firmware major and minor version e.g. 769 means major 769 // 256 = 3 and minor 769 % 256 = 1, i.e. 3.1. | UInt16 | - | 1 | R |
| 3 | 1 | Firmware patch version | UInt16 | - | 1 | R |
| 4 | 2 | Firmware build number | UInt32 | - | 1 | R |
| 18 | 1 | System state 0 = internal error / system not initialised, 1 = system in operation, 2 = error, 3 = fatal error, 4 = system in expert mode. | UInt16 | - | 1 | R |
| 20 | 2 | Live time Total time the system has been powered up, not only the time the stack was working. | UInt32 | s | 1 | R |
| 22 | 2 | Uptime How long the system has been running. | UInt32 | s | 1 | R |
| 1000 | 2 | Product code Enumeration of the ELE41 product variants (e.g. 0x44 = ELE410535A2ASV01). | UInt32 | - | 1 | R |
| 1002 | 2 | Stack start/stop cycles How many start/stop cycles the stack has run. | UInt32 | - | 1 | R |
| 1004 | 2 | Stack total runtime | UInt32 | s | 1 | R |
| 1006 | 2 | Stack total hydrogen production | Float32 | NL | 1 | R |
| 1008 | 2 | Hydrogen flow rate NaN when the electrolyser is not producing hydrogen. | Float32 | NL/h | 1 | R |
| 1014 | 1 | Cooling type 1 = air cooling, 2 = liquid cooling. | UInt16 | - | 1 | R |
| 1200 | 1 | Electrolyser state 0 = halted, 1 = maintenance mode, 2 = idle, 3 = steady, 4 = stand-by (max pressure), 5 = curve. | UInt16 | - | 1 | R |
| 4000 | 1 | Configuration progress 1 = a configuration is in progress. | UInt16 | - | 1 | R |
| 4001 | 1 | Configuration source 1 = configuration over Modbus. | UInt16 | - | 1 | R |
| 4002 | 2 | Last configuration result 0 = OK, 1 = permanent failure, 2 = no entry / interrupted, 5 = I/O data save error, 11 = try again, 13 = access denied (a changed register is read-only), 16 = busy, 22 = invalid data. | Int32 | - | 1 | R |
| 4004 | 1 | Last configuration wrong holding register First invalid holding register number that prevented a successful configuration commit. | UInt16 | - | 1 | R |
| 4600 | 1 | Heartbeat Modbus heartbeat timeout in seconds; 0 = disabled (default). | UInt16 | s | 1 | R |
| 6000 | 1 | Dryer error flags 16-bit bitmask; bit 0-3 = TT00-TT03 invalid, bit 4-7 = TT00-TT03 value growth not enough, bit 8 = pressure switch PS00 triggered, bit 9 = pressure switch PS01 triggered, bit 10-12 = F100-F102 invalid RPM, bit 13 = PT00 invalid, bit 14 = PT01 invalid. | UInt16 | - | 1 | R |
| 6001 | 1 | Dryer warning flags Same bitmask as register 6000. | UInt16 | - | 1 | R |
| 6002 | 2 | Dryer TT00 temperature Heater element temperature, cartridge 0 (first line). | Float32 | °C | 1 | R |
| 6004 | 2 | Dryer TT01 temperature Heater element temperature, cartridge 1 (second line). | Float32 | °C | 1 | R |
| 6006 | 2 | Dryer TT02 temperature Heater element temperature, cartridge 2 (first line). | Float32 | °C | 1 | R |
| 6008 | 2 | Dryer TT03 temperature Heater element temperature, cartridge 3 (second line). | Float32 | °C | 1 | R |
| 6010 | 2 | Dryer PT00 input pressure | Float32 | bar | 1 | R |
| 6012 | 2 | Dryer PT01 output pressure | Float32 | bar | 1 | R |
| 6021 | 1 | Dryer state Dryer logic state. | UInt16 | - | 1 | R |
| 7000 | 1 | High electrolyte level switch LSH102B 1 = electrolyte level above the sensor, 0 = below. | UInt16 | - | 1 | R |
| 7001 | 1 | Very high electrolyte level switch LSHH102A 1 = electrolyte level above the sensor, 0 = below. | UInt16 | - | 1 | R |
| 7002 | 1 | Low electrolyte level switch LSL102D 1 = electrolyte level above the sensor, 0 = below. | UInt16 | - | 1 | R |
| 7003 | 1 | Medium electrolyte level switch LSM102C 1 = electrolyte level above the sensor, 0 = below. | UInt16 | - | 1 | R |
| 7004 | 1 | Electrolyte tank high pressure switch PSH102 1 = pressure too high, 0 = normal. | UInt16 | - | 1 | R |
| 7007 | 1 | Electronic compartment high temperature switch TSH108 1 = temperature too high, 0 = normal. | UInt16 | - | 1 | R |
| 7009 | 1 | Chassis water presence switch WPS104 1 = water present on the input, 0 = no water input. | UInt16 | - | 1 | R |
| 7010 | 1 | Dry contact 1 = OK (closed), 0 = not OK (open). | UInt16 | - | 1 | R |
| 7500 | 2 | Electrolyte cooler fan speed F103A | Float32 | rpm | 1 | R |
| 7502 | 2 | Air circulation fan speed F104B | Float32 | rpm | 1 | R |
| 7504 | 2 | Electronic compartment cooling fan speed F108C | Float32 | rpm | 1 | R |
| 7506 | 2 | Electrolyte flow FM106 | Float32 | L/min | 1 | R |
| 7508 | 2 | Stack current HASS | Float32 | A | 1 | R |
| 7510 | 2 | Stack voltage (PSU) | Float32 | V | 1 | R |
| 7512 | 2 | Inner hydrogen pressure PT101A | Float32 | bar | 1 | R |
| 7514 | 2 | Outer hydrogen pressure PT101C | Float32 | bar | 1 | R |
| 7516 | 2 | Water inlet pressure PT105 | Float32 | bar | 1 | R |
| 7518 | 2 | Electrolyte temperature TT102A | Float32 | °C | 1 | R |
| 7520 | 2 | Downstream temperature TT106 | Float32 | °C | 1 | R |
| 7526 | 2 | Board power 24 V | Float32 | V | 1 | R |
| 7532 | 2 | Board temperature | Float32 | °C | 1 | R |
| 7538 | 2 | Gas presence HT104 | Float32 | ppm | 1 | R |
| 7540 | 2 | Safety board temperature TE108 | Float32 | °C | 1 | R |
| 8002 | 2 | Outer hydrogen pressure PT101C, raw sensor value Raw sensor voltage, not a pressure. | Float32 | V | 1 | R |
| 8004 | 2 | Stack current HASS, raw sensor value Raw sensor voltage, not a current. | Float32 | V | 1 | R |
Read this device live with Modbus Connect, free for Windows, macOS and Linux
Related guides
Notes
Register map of the Enapter Electrolyser 4.1 as published for firmware 3.5.0; Enapter versions this document per firmware release (the handbook also holds 3.4.0, 3.4.1 and 3.4.2 for this model) and the register set does differ between the EL 4.1 and the older EL 2.1, which has its own seed. The vendor states port 502 and Modbus slave address 1 ('Enapter Electrolyser always addressed as a slave'). Addresses are the document's own register numbers, which it defines as protocol addresses (holding register 0 is 40001, addressed as 0000 in the PDU), so they are used unchanged as zero-based wire addresses. Data is big-endian, high word first; boolean fields are 16-bit registers where 0 is false and any other value is true. Configuration registers are written as a transaction: open with 4000, write, commit with 4001. This firmware also exposes the Water Tank 4.1 block (6200-6223) through the electrolyser. Left out because the format has no 64-bit or 128-bit type: holding 0 (Unix time), input 6 (control board serial, uint128), 14 (chassis serial) and 1010 (stack serial); also left out are the warning and error code arrays at input 768 and 832 (whose first register holds the count) and the reserved water-tank rows 6212-6218 and 6223. Source: Enapter Handbook, 'EL 4.1 FW 3.5.0 Modbus TCP Communication Interface'.