Enapter · Electrolyser
Electrolyser EL 2.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 0x454C3231 for the EL 2.1. | UInt32 | - | 1 | R |
| 2 | 1 | Firmware major and minor version e.g. 267 means major 267 // 256 = 1 and minor 267 % 256 = 11, i.e. 1.11. | 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 |
| 26 | 2 | Free memory Memory that can be used. | UInt32 | - | 1 | R |
| 28 | 2 | Available memory Memory that has not been allocated yet. | UInt32 | - | 1 | R |
| 30 | 2 | Free space on flash card Space on the flash card that holds the configuration. | UInt32 | - | 1 | R |
| 1000 | 2 | Product code Enumeration of the ELE21 product variants (e.g. 0x00 = ELE210535A2AXV01_03). | 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 |
| 1200 | 1 | Electrolyser state 0 = halted, 1 = maintenance mode, 2 = idle, 3 = steady, 4 = stand-by (max pressure), 5 = curve, 6 = blowdown. | 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 i is the i-th entry of the document's dryer error/warning list (e.g. bit 0 = TT00 invalid, bit 9 = pressure switch PS01 triggered, bit 13 = PT00 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 |
| 6104 | 1 | Dryer control network connection status 1 = online, 0 = offline. | 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 |
| 7005 | 1 | Very high hydrogen pressure switch PSHH101B 1 = pressure too high, 0 = normal. | UInt16 | - | 1 | R |
| 7006 | 1 | Downstream high temperature switch TSH106 1 = temperature too high, 0 = normal. | UInt16 | - | 1 | R |
| 7007 | 1 | Electronic compartment high temperature switch TSH108 1 = temperature too high, 0 = normal. | UInt16 | - | 1 | R |
| 7008 | 1 | Very low electrolyte temperature switch TSLL102B 1 = temperature too low, 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 |
| 8000 | 2 | Inner hydrogen pressure PT101A, raw sensor value Raw sensor voltage, not a pressure. | Float32 | V | 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 EL 2.1 as published for firmware 1.9.3; Enapter versions this document per firmware release, so check the handbook for the firmware the unit runs. The vendor states port 502 and Modbus slave address 1 ('Enapter Electrolyser always addressed as a slave'), and all of its worked examples use unit ID 01. The addresses are the document's own register numbers, which it explicitly defines as protocol addresses: 'Holding register 0 in this document would be referred to as 40001 and would be addressed as register 0000 in the data address field', 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 in a transaction: open with 4000, write the settings, commit with 4001. Left out because the format has no 64-bit or 128-bit type: holding 0 (Unix time, uint64) and 4026 (chassis serial, uint64), input 6 (control board serial, uint128), 14 (chassis serial, uint64), 1010 (stack serial, uint64) and the two Wi-Fi MAC address words at 6100 and 6102; also left out are the warning and error event arrays at input 768 and 832 (32 registers each, whose first register holds the count) and the setting block 4916-4928, whose unit column drifts by one row in the published table (a 'period' printed in bar). Source: Enapter Handbook, 'EL 2.1 FW 1.9.3 Modbus TCP Communication Interface'.