HART-IP — 4-20mA + Digital Communication
HART (Highway Addressable Remote Transducer) is an industrial instrumentation standard that carries digital information on top of a 4-20mA analog signal. This gateway communicates over HART-IP (TCP/UDP), which wraps HART in Ethernet.
It is most commonly used for pressure, flow, temperature, and level transmitters in process industries such as chemicals, refining, power generation, and water/wastewater.
Registration Form Inputs
| Field | What to enter | Example |
|---|---|---|
| IP address | HART-IP gateway / multiplexer IP | 192.168.0.110 |
| Port | HART-IP port | 5094 (standard) |
| Response timeout (request-timeout) | Response wait (ms) | 5000 |
| Polling address (polling-address) | HART device address (0–63) | 0 (point-to-point) / 1–15 (multidrop) |
If several transmitters are multidropped behind a single HART-IP gateway, the cleanest approach is to assign a different polling address to each device and register each as a separate connection.
PLC Address Notation for Tags
HART retrieves values via commands. Commonly used commands:
| HART command | Meaning |
|---|---|
| Cmd 0 | Device identification (manufacturer/model/tag — metadata) |
| Cmd 1 | Primary Variable (PV) — most frequently used |
| Cmd 2 | mA value of the PV |
| Cmd 3 | All four dynamic variables at once (PV, SV, TV, QV) |
| Cmd 13 | Device tag / unit / upper and lower limits |
In the gateway, enter them in the cmd:<number>:<field> format.
| Notation | Meaning |
|---|---|
cmd:1:PV | Primary Variable (pressure, flow, etc.) |
cmd:3:PV | PV only, from the Cmd 3 response |
cmd:3:SV | Secondary Variable |
cmd:3:TV | Tertiary Variable |
cmd:3:QV | Quaternary Variable |
cmd:2:CURRENT | Actual mA of the 4-20mA loop |
cmd:13:TAG | Device tag (string) |
cmd:13:UNIT | Unit code |
In HART, the variable itself (what the 4-20mA signal represents) is determined by the device configuration. The gateway simply retrieves "PV", so identify the physical quantity either from the transmitter's format helper (Cmd 13 unit) or by stating it explicitly in the tag name.
Data Format Matching
| HART value | Data format | Format helper |
|---|---|---|
| PV / SV / TV / QV (Float) | Float | REAL |
| mA (Cmd 2) | Float | REAL |
| Device tag / unit name | String | STR[8], etc. |
| Status code / Field Device Status | Integer | (leave empty) |
HART transmits floating-point values as IEEE 754 32-bit big-endian. The gateway decodes them automatically, so you only need to specify REAL.
Write Support
HART write commands are risky (they change the transmitter's range, unit, damping, or zero point), so use them with care.
| Command | Meaning |
|---|---|
| Cmd 6 | Change polling address |
| Cmd 17 | Device message (32 characters) |
| Cmd 18 | Device tag / descriptor / date |
| Cmd 35 | Change PV upper / lower limits (range) |
Write notation example: cmd:18:TAG — values are sent as strings.
Common Problems and Solutions
| Symptom | Possible cause | Solution |
|---|---|---|
| "No response from device" | Only the HART gateway responds; the device does not | Check the multidrop polling address (0 vs 1–15) |
| Cmd 1 value stuck at 0 | Transmitter is in fail-safe mode | Inspect the 4-20mA loop for an open circuit or short |
| "Cmd 3 not supported" | Older HART device (below rev 5) | Use Cmd 1 only. SV/TV/QV are unavailable |
| Unit code appears as a number | HART units are an enum (1=°C, 32=Pa, …) | Convert to human-readable units with a formula or mapping table |
Real-World Mapping Examples by Device
Rosemount 3051 (Pressure Transmitter)
The most widely used differential/gauge pressure transmitter. Maps the 4-20mA PV to pressure (kPa, bar, psi, etc.).
| Tag name | Address | Format | Notes |
|---|---|---|---|
| Pressure (PV) | cmd:1:PV | Float | REAL |
| mA | cmd:2:CURRENT | Float | REAL — for loop inspection |
| Device tag | cmd:13:TAG | String | e.g., TT-201 |
| Unit code | cmd:13:UNIT | Integer | 1=in H2O, 7=kPa, 13=bar |
| Device status | cmd:48:STATUS | Integer | Self-test result |
Endress+Hauser Promass 80 (Coriolis Flowmeter)
| Tag name | Address | Format | Notes |
|---|---|---|---|
| Flow (PV) | cmd:3:PV | Float | kg/h |
| Density (SV) | cmd:3:SV | Float | kg/m³ |
| Temperature (TV) | cmd:3:TV | Float | °C |
| Totalized flow (QV) | cmd:3:QV | Float | kg |
Yokogawa EJX910A (Multivariable Transmitter)
| Tag name | Address | Format | Notes |
|---|---|---|---|
| Differential pressure | cmd:3:PV | Float | kPa |
| Static pressure | cmd:3:SV | Float | kPa abs |
| Process temperature | cmd:3:TV | Float | °C |
| Compensated flow | cmd:3:QV | Float | (calculated inside the device) |
Common Operating Patterns
Pattern 1. Large multidrop segment (8 transmitters on one gateway)
| Tag name | Address | Notes |
|---|---|---|
| TT-101 PV | cmd:1:PV | (register as a separate connection with polling address 1) |
| TT-102 PV | cmd:1:PV | (register as a separate connection with polling address 2) |
Register a separate OPC entry in PlantPulse for each polling address 1–15 (same host:port, only the polling-address differs).
Pattern 2. Automatic unit display
Also collect cmd:13:UNIT (unit enum) and convert it to mapTable(unit) = "kPa" / "bar" / ... at the display layer. When the transmitter's unit changes, the displayed unit follows automatically without editing the PlantPulse registration.
Pattern 3. Loop break detection
If cmd:2:CURRENT (mA) falls below 4 or exceeds 20, suspect fail-safe mode or an open loop. Add this to your alarm rules.
Next Steps
- The [Data format] / [Format helper] matching tables in Tag Registration
- The HART-IP automation examples in Advanced — REST API