MODBUS RTU Integration: DGA-500 to a PLC or SCADA

The DGA-500 hydrogen sensor communicates natively over MODBUS RTU on RS-485 — the protocol most traditional substations and industrial control rooms already speak. This application note maps the DGA-500 serial parameters and register map, then shows a minimal Siemens S7-1200 integration pattern for continuously polling dissolved hydrogen, oil temperature, and rate-of-change values. For a protocol-selection overview (MODBUS vs IEC 61850 vs IEC 104 vs DNP3), see DGA Monitor Communication Protocols.

Physical Layer and Serial Parameters

The DGA-500 is a MODBUS RTU slave on an RS-485 half-duplex bus. Connect A/B to the M12 pins in the electrical table below, apply 24 VDC, and let the host (master) poll the sensor — the sensor only answers when addressed.

Parameter DGA-500 value
Default baud rate 19200 bps
Frame format 8 data bits, no parity, 1 stop bit (8N1)
Slave address Default 1 (range 1–247; set via MI command or register 150)
Function codes 0x03 read holding registers · 0x06 write single register
Maximum response time 10 s — master timeout must be ≥ 10 s
Data storage 74,604 records at default 30 s interval (FIFO)
M12 pin Signal Core color
1 +24 VDC Yellow/white
6 RS-485 A Blue/white
7 RS-485 B Blue
8 GND Yellow
Timeout trap: many PLC and SCADA masters default to a 100 ms–1 s response timeout. The DGA-500 can take up to 10 s to answer, so a short master timeout produces intermittent “no response” faults. Set the master timeout to ≥ 10 s before commissioning.

Register Map (Holding Registers)

The most useful registers for a PLC or SCADA integration are listed below. 32-bit values span two consecutive registers; read them in a single 0x03 request. The temperature encoding is T(°C) = raw ÷ 100 − 100.

Address (hex) Decimal Content Type Unit
0x00–0x01 0–1 Instantaneous dissolved H₂ 32-bit int ppm
0x02–0x03 2–3 Average dissolved H₂ (10-min) 32-bit int ppm
0x06 6 Sensor temperature 16-bit int °C
0x08 8 Oil temperature 16-bit int °C
0x0B–0x0C 11–12 1-hour average H₂ 32-bit int ppm
0x0D–0x0E 13–14 Daily change (rate of rise) 32-bit signed int ppm
0x0F–0x10 15–16 Weekly change 32-bit signed int ppm
0x11–0x12 17–18 Monthly change 32-bit signed int ppm
0x6F 111 Device status word (bit field) 16-bit —
0x98–0x99 152–153 H₂ concentration alarm setpoint R/W ppm
0x9A–0x9B 154–155 Daily rate-of-rise alarm setpoint R/W ppm
0x9C 156 Oil-temperature high alarm setpoint R/W °C
0x96 150 MODBUS slave address R/W 1–247
0x63–0x64 / 0x65 99–100 / 101 Historical read: record count / start flag (write 1001) R/W records

Example temperature scaling: if register 8 returns raw 13967, oil temperature = 139.67 − 100 = 39.67 °C.

Reading 32-Bit Values

A 32-bit value is stored high word first across the two registers shown. Issue one 0x03 request starting at the first register with a length of 2, then combine the two 16-bit words (high word << 16 | low word). Confirm the word order once against the monitor’s own command-line value (H2DG.ppm) during commissioning — if the combined value is implausibly large or small, swap the two words.

Siemens S7-1200 Worked Pattern

On an S7-1200 with a CM 1241 RS-422/485 communications module (or a CB 1241 board), the standard TIA Portal library blocks are MB_COMM_LOAD to configure the port and MB_MASTER to run each request. A minimal cyclic pattern:

  1. MB_COMM_LOAD once at startup (or on first scan): assign the module hardware ID, set baud 19200, parity None, and the port as RS-485 half-duplex.
  2. MB_MASTER with MODE = 0 (read holding registers): set DATA_ADDR = 40001 to read from DGA-500 register 0x00, and DATA_LEN = 2 for the 32-bit instantaneous H₂. For the oil temperature at register 0x08, use DATA_ADDR = 40009 with DATA_LEN = 1.
  3. Copy the received data words into a data block, then apply the temperature scaling and (for H₂) combine the two words as described above.

The same pattern works for any MODBUS master: the DGA-500 is a standard slave, so the only device-specific work is the register map above and the ≥ 10 s timeout.

General RS-485 practice (not device-specific): use shielded twisted-pair cable, keep the bus free of parallel power runs, ground at one point, and fit termination resistors at the two physical ends of a long or stub-free bus. RS-485 supports up to 32 unit loads on one segment; keep the total bus length within the standard limit for the baud rate used.

Advanced: Alarms, Status, and Calibration over MODBUS

  • Alarm setpoints (registers 152–156) can be read and written remotely — the same thresholds the internal relays use. Treat writes as safety-relevant and restrict them to authorized maintenance windows.
  • Status word (register 111) reports device readiness (bit 15) and the measurement state in bits 1–0 (0 unavailable, 1 normal measuring, 2 measuring ambient temperature, 3 calibration mode), plus fault flags. The full bit map is in the product manual.
  • Field calibration is possible over MODBUS using the calibration register block (record current value → write reference → execute), mirroring the DA/DB RS-232 commands. The complete sequence and the guard value that indicates a failed calibration are documented in the manual §12.5 — confirm against the manual before automating calibration.
Need the full register table (256 registers) or a tested integration example for your PLC? Request it from our application engineers →