Eurotherm 3216 Modbus register map
Compact PID temperature controller in the Eurotherm 3200 series with thermocouple, RTD and millivolt inputs, up to four alarms and an optional EIA232 or EIA485 Modbus RTU port. The user manual lists each parameter with its decimal Modbus address and shares the map across the 3216, 3208, 32h8 and 3204.
- Protocol
- Modbus RTU (EIA232 or EIA485)
- Defaults
- Communications address defaults to 1 (range 1 to 254), baud rate 9600 and parity none. Up to 33 instruments should be connected to a single EIA232 link.
- Addresses in the manual
- 0-based protocol addresses, as sent on the wire
- 32 and 64-bit values
- Not stated in the manual
- Registers listed
- 76
- Checked against
- HA028651 Issue 13.0, January 2014
Address base. Section 15.6 (p. 94) lists a decimal Modbus address for each parameter, for example PV at 1 and remote setpoint at 26. The retransmission parameter REG.AD (p. 100) tells the master which register address in the slaves to write and gives 26 as the remote setpoint address, which indicates the printed address is used directly in the frame. The manual does not show a sample telegram, so this reading is inferred from that entry. Address 1 in the manual is address 1 on the wire.
Word order. Values are single 16-bit signed integers (scaled integers for decimals). The manual mentions optional native 32-bit float and time formats in the 2000 series communications handbook, which is not covered here. The address list has no access column: R is used where the text says read only or the item is a measured value or status, and other items are marked RW.
Modbus Poll and the Modbus protocol itself count from 0. The "Wire address" column is the number to type into Modbus Poll.
Downloads
The register table has every column on this page. The blocks file imports into Modbus Poll. The template JSON holds the same blocks plus unit, scale and access for scripts.
Registers
| Manual | Wire | Register | Type | Regs | Unit | Scale | Access | Area |
|---|---|---|---|---|---|---|---|---|
| 1 | 1 | Process value (temperature) inputPV_IN · Scaled integer: the value times 10 to the power of the decimal resolution (for example 123.5 is sent as 1235). Resolution follows the decimal point setting (address 525). |
int16 | 1 | 1 | R | Holding (FC03) | |
| 2 | 2 | Target setpointTG_SP · Scaled integer: the value times 10 to the power of the decimal resolution (for example 123.5 is sent as 1235). Resolution follows the decimal point setting (address 525). Do not write continuously changing values here; the manual warns about the limited EEPROM write cycles. |
int16 | 1 | 1 | RW | Holding (FC03) | |
| 3 | 3 | Manual output valueMAN_OP · Scaled integer: the value times 10 to the power of the decimal resolution (for example 123.5 is sent as 1235). Resolution follows the decimal point setting (address 525). |
int16 | 1 | 1 | RW | Holding (FC03) | |
| 4 | 4 | Working outputWRK_OP · Scaled integer: the value times 10 to the power of the decimal resolution (for example 123.5 is sent as 1235). Resolution follows the decimal point setting (address 525). |
int16 | 1 | 1 | R | Holding (FC03) | |
| 5 | 5 | Working setpointWKG_SP · Scaled integer: the value times 10 to the power of the decimal resolution (for example 123.5 is sent as 1235). Resolution follows the decimal point setting (address 525). Read only. |
int16 | 1 | 1 | R | Holding (FC03) | |
| 6 | 6 | Proportional bandPB · Scaled integer: the value times 10 to the power of the decimal resolution (for example 123.5 is sent as 1235). Resolution follows the decimal point setting (address 525). |
int16 | 1 | 1 | RW | Holding (FC03) | |
| 7 | 7 | Control actionCTRL_A · 0 reverse acting, 1 direct acting. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 8 | 8 | Integral timeTi · 0 means no integral action. |
int16 | 1 | 1 | RW | Holding (FC03) | |
| 9 | 9 | Derivative timeTd · 0 means no derivative action. |
int16 | 1 | 1 | RW | Holding (FC03) | |
| 11 | 11 | Input range low limitRNG_LO · Scaled integer: the value times 10 to the power of the decimal resolution (for example 123.5 is sent as 1235). Resolution follows the decimal point setting (address 525). |
int16 | 1 | 1 | RW | Holding (FC03) | |
| 12 | 12 | Input range high limitRNG_HI · Scaled integer: the value times 10 to the power of the decimal resolution (for example 123.5 is sent as 1235). Resolution follows the decimal point setting (address 525). |
int16 | 1 | 1 | RW | Holding (FC03) | |
| 13 | 13 | Alarm 1 thresholdA1_Threshold · Scaled integer: the value times 10 to the power of the decimal resolution (for example 123.5 is sent as 1235). Resolution follows the decimal point setting (address 525). |
int16 | 1 | 1 | RW | Holding (FC03) | |
| 14 | 14 | Alarm 2 thresholdA2_Threshold · Scaled integer: the value times 10 to the power of the decimal resolution (for example 123.5 is sent as 1235). Resolution follows the decimal point setting (address 525). |
int16 | 1 | 1 | RW | Holding (FC03) | |
| 15 | 15 | Active setpoint selectSP_SEL · 0 setpoint 1, 1 setpoint 2. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 24 | 24 | Setpoint 1SP1 · Scaled integer: the value times 10 to the power of the decimal resolution (for example 123.5 is sent as 1235). Resolution follows the decimal point setting (address 525). Avoid continuous writes. |
int16 | 1 | 1 | RW | Holding (FC03) | |
| 25 | 25 | Setpoint 2SP2 · Scaled integer: the value times 10 to the power of the decimal resolution (for example 123.5 is sent as 1235). Resolution follows the decimal point setting (address 525). Avoid continuous writes. |
int16 | 1 | 1 | RW | Holding (FC03) | |
| 26 | 26 | Remote (comms) setpointRm_SP · Used as the setpoint when remote setpoint is selected and a value arrived within about 5 seconds. Not stored in non-volatile memory, so it can be written continuously. |
int16 | 1 | 1 | RW | Holding (FC03) | |
| 27 | 27 | Local trim added to remote setpointLOC_t |
int16 | 1 | 1 | RW | Holding (FC03) | |
| 30 | 30 | Output high limitOP_HI |
int16 | 1 | 1 | RW | Holding (FC03) | |
| 31 | 31 | Output low limitOP_LO |
int16 | 1 | 1 | RW | Holding (FC03) | |
| 35 | 35 | Setpoint rate limitSP_RAT · 0 means no rate limit. |
int16 | 1 | 1 | RW | Holding (FC03) | |
| 39 | 39 | Calculated error (PV minus SP)P_Err · Scaled integer: the value times 10 to the power of the decimal resolution (for example 123.5 is sent as 1235). Resolution follows the decimal point setting (address 525). |
int16 | 1 | 1 | R | Holding (FC03) | |
| 75 | 75 | Instrument status bitmapStAt · Bit 0 to 3 alarm 1 to 4 status, 4 auto/manual, 5 sensor break, 6 loop break, 7 CT low load current, 8 CT high leakage current, 9 program end, 10 PV over-range, 11 CT overcurrent, 12 new alarm, 13 timer or ramp running, 14 remote SP fail, 15 auto-tune. 1 means active. |
bitfield16 | 1 | 1 | R | Holding (FC03) | |
| 76 | 76 | Inverted instrument status bitmapStAt_Inverted · Bitwise inverse of the status word at address 75. |
bitfield16 | 1 | 1 | R | Holding (FC03) | |
| 79 | 79 | Load leakage currentLL_AMP |
int16 | 1 | 1 | R | Holding (FC03) | |
| 80 | 80 | Load ON currentLD_AMP |
int16 | 1 | 1 | R | Holding (FC03) | |
| 81 | 81 | Alarm 3 thresholdA3_Threshold · Scaled integer: the value times 10 to the power of the decimal resolution (for example 123.5 is sent as 1235). Resolution follows the decimal point setting (address 525). |
int16 | 1 | 1 | RW | Holding (FC03) | |
| 82 | 82 | Alarm 4 thresholdA4_Threshold · Scaled integer: the value times 10 to the power of the decimal resolution (for example 123.5 is sent as 1235). Resolution follows the decimal point setting (address 525). |
int16 | 1 | 1 | RW | Holding (FC03) | |
| 83 | 83 | Loop break timeLBT |
int16 | 1 | 1 | RW | Holding (FC03) | |
| 87 | 87 | Digital inputs status bitmapDi_IP · Bit 0 logic input 1A, bit 1 logic input LA, bit 2 logic input LB, bit 7 power failed since last alarm acknowledge. 1 means closed. |
bitfield16 | 1 | 1 | R | Holding (FC03) | |
| 101 | 101 | Input filter timeFILT_T |
int16 | 1 | 1 | RW | Holding (FC03) | |
| 103 | 103 | Calculated rate of change of PVRC_PV · Engineering units per minute. |
int16 | 1 | 1 | R | Holding (FC03) | |
| 106 | 106 | Home display selectionHome · 0 standard PV and SP display; other options 1 to 10 in the manual. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 107 | 107 | Instrument version numberVersionNumber · Read as hex, for example 0111 hex is version 1.11. |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 111 | 111 | Setpoint high limitSP_HI · Scaled integer: the value times 10 to the power of the decimal resolution (for example 123.5 is sent as 1235). Resolution follows the decimal point setting (address 525). |
int16 | 1 | 1 | RW | Holding (FC03) | |
| 112 | 112 | Setpoint low limitSP_LO · Scaled integer: the value times 10 to the power of the decimal resolution (for example 123.5 is sent as 1235). Resolution follows the decimal point setting (address 525). |
int16 | 1 | 1 | RW | Holding (FC03) | |
| 122 | 122 | Instrument type codeInstrumentTypeCode |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 131 | 131 | Instrument comms addressADDR · 1 to 254. Default 1. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 141 | 141 | PV offsetPV_OFS · Scaled integer: the value times 10 to the power of the decimal resolution (for example 123.5 is sent as 1235). Resolution follows the decimal point setting (address 525). |
int16 | 1 | 1 | RW | Holding (FC03) | |
| 199 | 199 | Instrument modeIM · 0 operating, 1 standby, 2 configuration mode. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 202 | 202 | Input value in millivoltsMV_IN |
int16 | 1 | 1 | R | Holding (FC03) | |
| 203 | 203 | Comms PV valuePV_CM · Writable process value used when the linearisation type is Comms. Write at least every 5 seconds if sensor break is on. |
int16 | 1 | 1 | RW | Holding (FC03) | |
| 215 | 215 | CJC temperatureCJC_IN · Scaled integer: the value times 10 to the power of the decimal resolution (for example 123.5 is sent as 1235). Resolution follows the decimal point setting (address 525). |
int16 | 1 | 1 | R | Holding (FC03) | |
| 258 | 258 | Sensor break statusSBR · 0 off, 1 active. |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 260 | 260 | New alarm statusNEW_AL · 0 off, 1 active. |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 263 | 263 | Loop break statusLBR · 0 off, 1 active. |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 270 | 270 | Auto-tune enableA_TUNE · 0 off, 1 enabled. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 273 | 273 | Loop mode auto or manualA_M · 0 auto, 1 manual. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 274 | 274 | Acknowledge all alarmsAc_All · Write 1 to acknowledge. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 276 | 276 | Local or remote (comms) setpoint selectL_R |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 294 | 294 | Alarm 1 statusA1_STS · 0 off, 1 active. |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 295 | 295 | Alarm 2 statusA2_STS · 0 off, 1 active. |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 296 | 296 | Alarm 3 statusA3_STS · 0 off, 1 active. |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 297 | 297 | Alarm 4 statusA4_STS · 0 off, 1 active. |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 313 | 313 | Recipe to recallREC_NO |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 314 | 314 | Recipe to saveStOrE |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 320 | 320 | Timer type configurationTM_CFG · 0 none, 1 dwell, 2 delay, 3 soft start, 10 programmer (programmer option only). |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 324 | 324 | Requested timer durationDWELL |
int16 | 1 | 1 | RW | Holding (FC03) | |
| 325 | 325 | Elapsed timeT_ELAP |
int16 | 1 | 1 | R | Holding (FC03) | |
| 326 | 326 | Time remainingT_REMN |
int16 | 1 | 1 | R | Holding (FC03) | |
| 331 | 331 | Event outputsEVENT |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 512 | 512 | Heat or channel 1 control typeCTRL_H · 0 off, 1 on/off, 2 PID, 3 motor valve position. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 513 | 513 | Cool or channel 2 control typeCTRL_C · 0 off, 1 on/off, 2 PID. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 516 | 516 | Display unitsUNITS_Display · 0 degC, 1 degF, 2 Kelvin, 3 none, 4 percent. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 525 | 525 | Decimal point positionDEC_P · 0 no decimals, 1 one decimal place, 2 two decimal places. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 536 | 536 | Alarm 1 typeA1_TYP · 0 off, 1 absolute high, 2 absolute low, 3 deviation high, 4 deviation low, 5 deviation band. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 537 | 537 | Alarm 2 typeA2_TYP · Same codes as alarm 1 type. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 540 | 540 | Alarm 1 latching modeA1_LAT · 0 none, 1 latch with automatic reset, 2 latch with manual reset. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 551 | 551 | Digital outputs status bitmapDi_OP · Bit 0 output 1A, bit 1 output 2A, bit 2 output 3, bit 3 output 4/AA. Only outputs set to function none are affected by writes. |
bitfield16 | 1 | 1 | RW | Holding (FC03) | |
| 578 | 578 | Sensor break typeSb_tyP · 0 none, 1 non-latching, 2 latching. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 12290 | 12290 | Input sensor typeIN_TYP · 0 J, 1 K, 2 L, 3 R, 4 B, 5 N, 6 T, 7 S thermocouples, 8 RTD, 9 millivolt, 10 comms input, 11 custom. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 12548 | 12548 | Baud rate codeBAUD · 0 is 9600, 1 is 19200, 2 is 4800, 3 is 2400, 4 is 1200. Default 9600. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 12549 | 12549 | Parity settingPRTY · 0 none, 1 even, 2 odd. Default none. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 12550 | 12550 | RX/TX delayDELAY · 0 no delay, 1 delay applied. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 12551 | 12551 | Comms retransmission variableRETRN · 0 off, 1 working setpoint, 2 PV, 3 output power, 4 error. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 12552 | 12552 | Retransmission target register addressREG_AD · Register address in the slave units that receives the retransmitted value, for example 26. |
uint16 | 1 | 1 | RW | Holding (FC03) |
Scale is the number to multiply the raw value by to get the unit.
Open in Modbus Poll
- Download the Modbus Poll blocks file.
- Open Modbus Poll, connect to the device and set its unit ID. The manual does not state the word order for 32-bit values. Check one known value (a voltage or a counter) and switch the setting if it reads wrong.
- In the blocks panel on the right, click Import CSV and pick the file. CSV import is a Pro feature. Without Pro, Modbus Poll polls the first 20 values of your blocks.
- The wire addresses are already in the file, so there is no 0-based or 1-based conversion to do.
Once the values look right, export the tag list to Ignition, Kepware, Node-RED, Home Assistant or Voltrus SCADA.
Source and accuracy
Manufacturer document: 3216, 3208, 3204 User Manual, 3200 Range Process Controller (d3dmuhgh3oppig.cloudfront.net)
HA028651 Issue 13.0, January 2014, p. 89-100. Read on 2026-10-24.
Addresses, types, units and scale are taken from the document above. Names and descriptions are written by Voltrus. Firmware versions can differ, so confirm a value on your own device before you rely on it.
Found a mistake? Report it by email with the register address and the manual page.