Chuyển đến nội dung chính
Cổng đám mây

Technical reference · Doc CP-MODBUS-RTU · Rev 1 · June 2026

CoolPro Modbus RTU Communications Protocol

Communication parameters, frame timing, RJ45 pinout and bus topology, supported function codes, the full register map, data encoding with worked CRC, and example transactions for integrating the AERL CoolPro into a Modbus RTU network over RS485.

Download PDF (REV 1)A4 · 8 pages · English (en-AU) · Audience: integrators
Protocol at a glance
ParameterValue
StandardModbus RTU
Physical layerRS485 · RJ45
Default baud rate9600 bps
Frame format8·N·1
Default device address40
CRCCRC-16 (transmitted LSB first)

1. Bus, connection & settings

The CoolPro provides access to real-time measurements and device information via the standard Modbus RTU protocol over RS485.

Communication parameters

Communication parameters
ParameterValue
Baud rate9600 (default); configurable: 9600 / 19200 / 38400 / 57600 / 115200
Data bits8
Stop bits1
ParityNone
Device address40 (default); configurable 1–247
CRCModbus CRC-16 (transmitted LSB first)

Frame timing

Modbus RTU frames are delimited by idle time on the bus: a frame is treated as complete once the bus has been silent for the inter-frame gap period. The CoolPro uses a fixed inter-frame gap of approximately 8 ms, independent of the configured baud rate. This is comfortably wider than the 3.5-character silent interval required by the Modbus specification at every supported baud rate, so a standard-compliant master will interoperate without adjustment.

Physical connection (RJ45 pinout)

The CoolPro uses an 8-pin RJ45 connector for its RS485 interface (contacts numbered 1 to 8, left to right, viewed from the front). All other pins are unused.

RJ45 pinout
PinSignal
3RS485-A (non-inverting)
6RS485-B (inverting)
8GND

Network topology

The Modbus network is a linear bus, with short stubs branching from ‘T’ connectors on the main backbone to each device. The data lines must be terminated at each end of the bus with a 120 Ω resistor between the RS485-A and RS485-B signals.

2. Supported function codes

0x03 Read Holding Registers

Read one or more configuration registers.

0x03 frame structure and examples
FrameBytesNotes
Request[Device ID] [0x03] [Start Addr Hi] [Start Addr Lo] [Qty Hi] [Qty Lo] [CRC Lo] [CRC Hi]Frame structure
Response[Device ID] [0x03] [Byte Count] [Data…] [CRC Lo] [CRC Hi]Frame structure
Request28 03 00 00 00 01 [CRC]Read 1 register starting at 0 (device address)
Response28 03 02 00 28 [CRC]Byte count = 2, value = 40 (0x0028)
Request28 03 00 00 00 03 [CRC]Read 3 registers starting at 0
Response28 03 06 00 28 00 00 00 00 [CRC]Byte count = 6, three register values

0x04 Read Input Registers

Read one or more input registers containing measurements or device information.

0x04 frame structure and examples
FrameBytesNotes
Request[Device ID] [0x04] [Start Addr Hi] [Start Addr Lo] [Qty Hi] [Qty Lo] [CRC Lo] [CRC Hi]Frame structure
Response[Device ID] [0x04] [Byte Count] [Data…] [CRC Lo] [CRC Hi]Frame structure
Request28 04 00 00 00 01 [CRC]Read 1 register starting at 0 (input voltage in mV)
Response28 04 02 5F B4 [CRC]Byte count = 2, value = 24500 (0x5FB4 = 24.5 V)
Request28 04 00 00 00 04 [CRC]Read 4 registers starting at 0 (Vin, Iin, Vout, Iout)
Response28 04 08 5F B4 0C B2 5D C0 0C 80 [CRC]Vin = 24.5 V, Iin = 3.25 A, Vout = 24.0 V, Iout = 3.20 A

0x06 Write Single Register

Write a configuration register (device address, baud rate, or reset trigger).

0x06 frame structure and examples
FrameBytesNotes
Request[Device ID] [0x06] [Register Hi] [Register Lo] [Value Hi] [Value Lo] [CRC Lo] [CRC Hi]Frame structure
Response[Device ID] [0x06] [Register Hi] [Register Lo] [Value Hi] [Value Lo] [CRC Lo] [CRC Hi]Echo of request
Request28 06 00 00 00 2A [CRC]Write device address = 42
Response28 06 00 00 00 2A [CRC]Echo confirms write

3. Modbus register map

Addressing

Register reference numbers (4xxxx for holding registers, 3xxxx for input registers) are a documentation convention only. The value placed on the wire is the zero-based PDU address, shown in the Offset column — that is, on-wire address = reference number − 40001 (holding) or − 30001 (input) = the offset. Holding register 40001 is addressed on the wire as 0x0000 (function 0x03 / 0x06); input register 30001 is addressed on the wire as 0x0000 (function 0x04). The function code — not the reference range — selects the address space, so the same on-wire address 0x0000 reads the device address under 0x03 and the input voltage under 0x04.

Holding registers (FC 0x03, 0x06)

Configuration registers (read / write). All values are uint16.

Holding registers
AddressOffsetDescriptionRangeNotes
400010Device Address1–247Takes effect after reset
400021Baud Rate Index0–40 = 9600, 1 = 19200, 2 = 38400, 3 = 57600, 4 = 115200; takes effect after reset
400032Reset CommandWrite 0xAA55 to trigger a reset; always reads 0

Reset register read-back: register 40003 is a write-only command trigger. A read always returns 0 regardless of the value last written — this is expected behaviour, not a fault. The written value initiates the reset and is never stored.

Input registers (FC 0x04) — live telemetry (offsets 0–7)

All values are uint16 with milliunit scaling.

Input registers — telemetry
AddressOffsetDescriptionUnitConversion
300010Input VoltagemVvoltage_v = value / 1000
300021Input CurrentmAcurrent_a = value / 1000
300032Output VoltagemVvoltage_v = value / 1000
300043Output CurrentmAcurrent_a = value / 1000
300054Temperaturem°Ctemp_c = value / 1000
300065Uptime (Low Word)sLow 16 bits of uptime
300076Uptime (High Word)sHigh 16 bits of uptime
300087Status FlagsBit field (see below)

Status Flags bit field (register 30008)

A 16-bit bit field. Each bit reports a specific system condition and can be set or cleared independently.

Status flags
BitHexNameDescription
00x0001System StartupDevice is initialising (cleared once startup completes)
10x0002Daily ResetDaily reset has occurred (uptime counter reset)
20x0004Input Measurement FaultFault communicating with the input measurement sensor
30x0008Output Measurement FaultFault communicating with the output measurement sensor
40x0010Calibration InvalidStored calibration data failed validation
50x0020Calibration MissingNo calibration data stored
60x0040Temperature Sensor FaultFault communicating with the temperature sensor
7–15ReservedReserved for future use (currently 0)

Device information registers (offsets 100–107)

Device information registers
AddressOffsetDescriptionTypeNotes
30101100Serial Number Lowuint16Low 16 bits
30102101Serial Number Highuint16High 16 bits
30103102Hardware Revisionuint16e.g. 1, 2, 3
30104103Firmware Major Versionuint16e.g. 1
30105104Firmware Minor Versionuint16e.g. 0
30106105Firmware Patch Versionuint16e.g. 0
30107106Manufacture Date Lowuint16Unix timestamp low word
30108107Manufacture Date Highuint16Unix timestamp high word

4. Data encoding

16-bit registers

Byte order is big-endian (MSB first). Example: value 24500 (0x5FB4) is transmitted as [0x5F, 0xB4].

Milliunit scaling

All measurements use milliunits so values carry as integers without floating point: voltage in millivolts (mV), current in milliamps (mA), temperature in millidegrees Celsius (m°C) — divide by 1000 for volts, amps or °C. For example, an input-voltage reading of 24500 is 24.5 V, and a temperature reading of 25800 is 25.8 °C.

32-bit values

Uptime, serial number and manufacture date span two uint16 registers: low word first, high word second, big-endian within each register. Reconstruct with (high << 16) | low. Example — value 70000 (0x00011170) is stored as register N (low) = 0x1170 (4464), register N+1 (high) = 0x0001 (1). All values are transmitted as integers; no floating-point encoding is used.

Conversion examples
QuantityRegister valueMeaning
24.5 V2450024500 mV
3.25 A32503250 mA
25.8 °C2580025800 m°C
Uptime 70000 soffset 5 = 4464, offset 6 = 1Combined: 0x0001_1170

CRC-16

Every frame ends with a 16-bit CRC computed over all preceding bytes using polynomial 0xA001 with an initial value of 0xFFFF, and transmitted low byte first.

Worked CRC examples
Frame (without CRC)CRC-16On the wire (CRC appended, low byte first)
28 04 00 00 00 010x333628 04 00 00 00 01 36 33
28 04 02 5F B40x71DD28 04 02 5F B4 DD 71 (response)

5. Exception codes

Standard Modbus exception responses. Exception response frame: [Device ID] [Function Code + 0x80] [Exception Code] [CRC Lo] [CRC Hi]

Exception codes
CodeNameDescription
0x01Illegal FunctionFunction code not supported
0x02Illegal Data AddressRegister address invalid
0x03Illegal Data ValueValue out of range
0x04Slave Device FailureDevice cannot process the request

6. Example transactions

All requests are addressed to device ID 0x28 (40). CRC bytes are shown as [CRC]; worked CRC values are given in §4 Data encoding.

Telemetry & identity

Example transactions — telemetry and identity
FrameBytesNotes
Read input voltage — FC 0x04, offset 0
Request28 04 00 00 00 01 [CRC]8 bytes total
Response28 04 02 5F B4 [CRC]7 bytes; value 0x5FB4 = 24500 mV = 24.5 V
Read input current — FC 0x04, offset 1
Request28 04 00 01 00 01 [CRC]Read 1 register at offset 1
Response28 04 02 0C B2 [CRC]Value 0x0CB2 = 3250 mA = 3.25 A
Read temperature — FC 0x04, offset 4
Request28 04 00 04 00 01 [CRC]Read 1 register at offset 4
Response28 04 02 64 C8 [CRC]Value 0x64C8 = 25800 m°C = 25.8 °C
Read serial number — FC 0x04, offsets 100–101 (split low / high word)
Request28 04 00 64 00 02 [CRC]Option 1 — read both registers at offset 100
Response28 04 04 30 39 00 00 [CRC]Byte count = 4; Low = 0x3039, High = 0x0000
Request28 04 00 64 00 01 [CRC]Option 2 — read offset 100 individually
Response28 04 02 30 39 [CRC]Low word = 0x3039 = 12345
Request28 04 00 65 00 01 [CRC]Read offset 101 individually
Response28 04 02 00 00 [CRC]High word = 0x0000. Reconstruct: serial = 12345

Configuration writes

Example transactions — configuration writes
FrameBytesNotes
Read device address — FC 0x03, holding register 0
Request28 03 00 00 00 01 [CRC]Read 1 register at offset 0
Response28 03 02 00 28 [CRC]Value 0x0028 = 40 (device address)
Write device address — FC 0x06, holding register 0
Request28 06 00 00 00 2A [CRC]New device address = 42 (0x002A)
Response28 06 00 00 00 2A [CRC]Echo. Changes take effect after a device reset
Trigger device reset — FC 0x06, holding register 2
Request28 06 00 02 AA 55 [CRC]Reset trigger value 0xAA55
Response28 06 00 02 AA 55 [CRC]Echo. Device resets immediately after sending the response

7. Revision history

Revision history
Rev.DateChangeApproving officer
12026-06-08Initial customer releaseMatthew Wynne

Integrating the CoolPro into a SCADA or monitoring system? Talk to our engineering team or see the CoolPro product page for datasheets and manuals.