Nilan · HVAC controller
CTS 602 controller with HMI350T control panel Modbus register map
Default configuration
- Protocol
- RS485
- Port
- 502
- Unit ID
- 30
- Addressing
- 0-based
- Byte order
- Big endian
- Word order
- High word first
- Baud rate
- 19200
- Parity
- Even
- Data bits
- 8
- Stop bits
- 1
This device has an RS-485 interface. Reach it through a Modbus RTU-to-TCP gateway, configured with the factory serial settings above.
Register map
| Address | Count | Name | Type | Unit | Scale | Access |
|---|---|---|---|---|---|---|
| 0 | 1 | Bus protocol version (Bus.Version) Version of the bus protocol spoken by the CTS 602 board. | UInt16 | - | 1 | R |
| 1 | 1 | Application version, major (App.VersionMajor) Major number of the controller software version. | UInt16 | - | 1 | R |
| 2 | 1 | Application version, minor (App.VersionMinor) Minor number of the controller software version. | UInt16 | - | 1 | R |
| 100 | 1 | Digital input: user function 1 (Input.UserFunc) 0 = inactive, 1 = active. | UInt16 | - | 1 | R |
| 101 | 1 | Digital input: air filter alarm (Input.AirFilter) 0 = no alarm, 1 = filter alarm active. | UInt16 | - | 1 | R |
| 102 | 1 | Digital input: door contact (Input.DoorOpen) 0 = closed, 1 = door open. | UInt16 | - | 1 | R |
| 103 | 1 | Digital input: smoke alarm (Input.Smoke) 0 = no alarm, 1 = smoke alarm active. | UInt16 | - | 1 | R |
| 104 | 1 | Digital input: motor thermo fuse (Input.MotorThermo) 0 = no alarm, 1 = motor thermo fuse tripped. | UInt16 | - | 1 | R |
| 105 | 1 | Digital input: heating surface frost or overheat (Input.Frost_Overht) 0 = no alarm, 1 = frost or overheat alarm active. | UInt16 | - | 1 | R |
| 106 | 1 | Digital input: airflow monitor (Input.AirFlow) 0 = no alarm, 1 = airflow alarm active. | UInt16 | - | 1 | R |
| 107 | 1 | Digital input: high pressure switch (Input.P_HI) 0 = no alarm, 1 = high pressure switch tripped. | UInt16 | - | 1 | R |
| 108 | 1 | Digital input: low pressure switch (Input.P_LO) 0 = no alarm, 1 = low pressure switch tripped. | UInt16 | - | 1 | R |
| 109 | 1 | Digital input: hot water boiling (Input.Boil) 0 = inactive, 1 = hot water boiling active. | UInt16 | - | 1 | R |
| 110 | 1 | Digital input: hot water 3-way valve position (Input.3WayPos) 0 = inactive, 1 = valve in the hot water position. | UInt16 | - | 1 | R |
| 111 | 1 | Digital input: hotgas defrost type selection (Input.DefrostHG) 0 = inactive, 1 = hotgas defrost selected. | UInt16 | - | 1 | R |
| 112 | 1 | Digital input: defrost thermostat (Input.Defrost) 0 = inactive, 1 = defrost thermostat active. | UInt16 | - | 1 | R |
| 113 | 1 | Digital input: user function 2 (Input.UserFunc_2) 0 = inactive, 1 = active. | UInt16 | - | 1 | R |
| 114 | 1 | Digital input: air damper closed position switch (Input.DamperClosed) 0 = inactive, 1 = damper reported closed. | UInt16 | - | 1 | R |
| 115 | 1 | Digital input: air damper opened position switch (Input.DamperOpened) 0 = inactive, 1 = damper reported open. | UInt16 | - | 1 | R |
| 116 | 1 | Digital input: combined fan-coil and thermo alarm (Input.FCorThermoAl) 0 = no alarm, 1 = combined FC/thermo alarm active. | UInt16 | - | 1 | R |
| 117 | 1 | Digital input: brine pressostat (Input.BrinePress) 0 = no alarm, 1 = brine pressostat tripped. | UInt16 | - | 1 | R |
| 200 | 1 | Temperature T0 – controller board (Input.T0_Controller) Temperature of the CTS 602 controller board. | Int16 | °C | 0.01 | R |
| 201 | 1 | Temperature T1 – fresh air intake (Input.T1_Intake) Outdoor/fresh air intake temperature. | Int16 | °C | 0.01 | R |
| 202 | 1 | Temperature T2 – inlet before heater (Input.T2_Inlet) Supply air temperature before the heater. | Int16 | °C | 0.01 | R |
| 203 | 1 | Temperature T3 – room exhaust (Input.T3_Exhaust) Extract air temperature from the room. | Int16 | °C | 0.01 | R |
| 204 | 1 | Temperature T4 – outlet (Input.T4_Outlet) Exhaust air outlet temperature. | Int16 | °C | 0.01 | R |
| 205 | 1 | Temperature T5 – condenser (Input.T5_Cond) Condenser temperature of the heat pump circuit. | Int16 | °C | 0.01 | R |
| 206 | 1 | Temperature T6 – evaporator (Input.T6_Evap) Evaporator temperature of the heat pump circuit. | Int16 | °C | 0.01 | R |
| 207 | 1 | Temperature T7 – inlet after heater (Input.T7_Inlet) Supply air temperature after the heater. | Int16 | °C | 0.01 | R |
| 208 | 1 | Temperature T8 – outdoor (Input.T8_Outdoor) Outdoor temperature. | Int16 | °C | 0.01 | R |
| 209 | 1 | Temperature T9 – heating surface (Input.T9_Heater) Heating surface / electric heater temperature. | Int16 | °C | 0.01 | R |
| 210 | 1 | Temperature T10 – external room (Input.T10_Extern) External room temperature sensor. | Int16 | °C | 0.01 | R |
| 211 | 1 | Temperature T11 – hot water top (Input.T11_Top) Hot water cylinder, top sensor. | Int16 | °C | 0.01 | R |
| 212 | 1 | Temperature T12 – hot water bottom (Input.T12_Bottom) Hot water cylinder, bottom sensor. | Int16 | °C | 0.01 | R |
| 213 | 1 | Temperature T13 – central heating return (Input.T13_Return) Return temperature of the central heating circuit. | Int16 | °C | 0.01 | R |
| 214 | 1 | Temperature T14 – central heating supply (Input.T14_Supply) Supply temperature of the central heating circuit. | Int16 | °C | 0.01 | R |
| 215 | 1 | Temperature T15 – user panel room (Input.T15_Room) Room temperature measured by the HMI350T panel. | Int16 | °C | 0.01 | R |
| 216 | 1 | Temperature T16 – auxiliary (Input.T16) Auxiliary temperature sensor (hot water anode). | Int16 | °C | 0.01 | R |
| 217 | 1 | Temperature T17 – preheater or earth tube intake (Input.T17_PreHeat) Air intake temperature of the preheater or earth tube. | Int16 | °C | 0.01 | R |
| 218 | 1 | Temperature T18 – pressure pipe (Input.T18_PresPibe) Temperature of the pressure pipe. | Int16 | °C | 0.01 | R |
| 400 | 1 | Alarm status (Alarm.Status) Bit mask: 0x80 = active alarm(s) present, 0x0F = number of alarms. | UInt16 | - | 1 | R |
| 401 | 1 | Alarm list 1 – alarm code (Alarm.List_1_ID) Alarm code 1..99, 0x80 reserved, 0x7F = display code. | UInt16 | - | 1 | R |
| 402 | 1 | Alarm list 1 – date (Alarm.List_1_Date) Packed DOS date: year since 1980 in the high byte, month and day in the low byte. | UInt16 | - | 1 | R |
| 403 | 1 | Alarm list 1 – time (Alarm.List_1_Time) Packed DOS time: hours in the high byte, minutes and seconds/2 in the low byte. | UInt16 | - | 1 | R |
| 404 | 1 | Alarm list 2 – alarm code (Alarm.List_2_ID) Alarm code 1..99, 0x80 reserved, 0x7F = display code. | UInt16 | - | 1 | R |
| 405 | 1 | Alarm list 2 – date (Alarm.List_2_Date) Packed DOS date: year since 1980 in the high byte, month and day in the low byte. | UInt16 | - | 1 | R |
| 406 | 1 | Alarm list 2 – time (Alarm.List_2_Time) Packed DOS time: hours in the high byte, minutes and seconds/2 in the low byte. | UInt16 | - | 1 | R |
Read this device live with Modbus Connect, free for Windows, macOS and Linux
Related guides
Notes
Source: Nilan 'Protocol description – CTS602 with HMI350T, Modbus version 23', document 52173104, revision 22.11.2023: section 3 'Setup' (node address default 30, 19200 bps, 8 data bits, 1 stop bit, even parity, communication speed and framing cannot be changed) and section 5 'Register layout' (5.1 input registers, 5.2 holding registers). The CTS 602 is an RS-485 Modbus RTU slave, so it is reached through a Modbus RTU-to-TCP gateway using the factory serial settings above. The manual's own note states that its tables list 'the register addresses as used in Modbus messages without the global offset' (reading input register 100 with function code 04 gives global address 30101), so the numbers here are wire addresses and the seed declares zero-based addressing. Only input registers are listed: the manual publishes name, address, scale and unit but no per-register write access for the holding-register block, and the app has to know whether a row may be written, so the holding registers are left out rather than guessed. Temperature rows are signed 16-bit: the same document documents temperature ranges such as '-40.00 °C - 99.00 °C'. The registers with a 100 scale are entered with 0.01. Three groups are left out for the same reason: the version/ID text registers 003-005 and 100 (the 'text' flag in the scale column cannot be tied to a single row because the description column is a stacked block), the pressure rows 219/220 (bar, no scale published) and the humidity/CO2 rows 221/222 (the scale column shows '100 %' against the CO2 row).