Skip to main content

DAM-24RO communication protocol

This product is an 24-channel relay output module supporting standard Modbus RTU commands. For detailed command construction and parsing, use the register tables in this document together with the Modbus specification.

Modbus register reference

Device (slave) address

Default slave address is 0x01; configurable range 0x01–0xF7. Supported ranges:

Address rangeStatusDescription
0x00❌ DisabledNon-response broadcast: master only; slaves must not use this address and do not reply.
0x01~0xF7✅ AvailableStandard slave address; assignable to any device.
0xFE❌ DisabledResponse broadcast: master only; slaves must not use this address.
Note

When using broadcast address 0xFE, connect only one device on the bus; multiple devices responding will collide.

Function codes

This module is coil-oriented; the following function codes are supported.

FCFunctionNotes
01Read coilsRead relay state
03Read holding registersRead device parameters
05Write single coilSingle relay write
06Write single registerWrite device parameters
0FWrite multiple coilsMultiple relays
10Write multiple registersMultiple device parameters

Register map

Address (HEX)ContentDescriptionTypeModbus FC
0x0000~0x0017CH1–CH24 relay outputs0xFF00:relay ON; 0x0000: relay OFF;R/W0x01,0x05,0x0F
0x00FFAll relay outputs0xFF00:All relays ON; 0x0000: all OFF;W0x05
0x1000~0x1017CH1–CH24 relay toggle0xFF00:toggle; 0x0000: no change;W0x05,0x0F
0x10FFAll relays toggle0xFF00:toggle all; 0x0000: no change;W0x05
0xA000~0xA017CH1–CH24 power-on relay output0xFF00:relay ON; 0x0000: relay OFF;power-on relay output.R/W/S0x01,0x05,0x0F
4x2000~4x2023CH1–CH24 relay control modeTwo modes: 0x0000 command, 0x0001 cycleR/W0x03,0x06,0x10
4x3000~4x3023CH1–CH24 pulse ONDelay = value × 100 ms (e.g. 0x0007 → 700 ms)W0x06,0x10
4x4000~4x4023CH1–CH24 pulse OFFDelay = value × 100 ms (e.g. 0x0007 → 700 ms)W0x06,0x10
4x5000~4x5023CH1–CH24 relay delayDelay = value × 100 ms (e.g. 0x0007 → 700 ms)W/S0x03,0x06,0x10
4x8000SUKModel numberR/S0x03
4x8001Firmware versionDecimal value with implied decimal → version (e.g. 0x0064 = 100 → V1.00)R/W/S0x03,0x06
4x8002Slave addressStores Modbus address; default 0x0001R/W/S0x03,0x06
4x8003UART parametersUpper byte: stop/parity; lower byte: baud rateR/W/S0x03,0x06
4x8004WatchdogIf no valid Modbus within timeout, outputs off / resetR/W/S0x03,0x06
4x9000~4x900FUser string areaString formatR/W/S0x03,0x06,0x10
Note

Registers marked S retain values across power cycles.

Modbus RTU command reference

Control a single relay

Request: 01 05 00 00 FF 00 8C 3A

FieldMeaningNotes
01Slave address0x00: broadcast; 0x01–0xF7: slave address
05FC 0x05Relay control
00 00AddressTarget relay register address
FF 00Command0xFF00:relay ON; 0x0000: relay OFF;
8C 3ACRC16CRC16 over preceding bytes

Response: 01 05 00 00 FF 00 8C 3A

FieldMeaningNotes
01Slave address0x00: broadcast; 0x01–0xF7: slave address
05FC 0x05Relay control
00 00AddressTarget relay register address
FF 00Command0xFF00:relay ON; 0x0000: relay OFF;
8C 3ACRC16CRC16 over preceding bytes

Examples (slave 0x01):

1 relay ON : 01 05 00 00 FF 00 8C 3A
1 relay OFF : 01 05 00 00 00 00 CD CA
2 relay ON : 01 05 00 01 FF 00 DD FA
2 relay OFF : 01 05 00 01 00 00 9C 0A
3 relay ON : 01 05 00 02 FF 00 2D FA
3 relay OFF : 01 05 00 02 00 00 6C 0A
4 relay ON : 01 05 00 03 FF 00 7C 3A
4 relay OFF : 01 05 00 03 00 00 3D CA
1 relay toggle : 01 05 10 00 FF 00 88 FA
2 relay toggle : 01 05 10 01 FF 00 D9 3A
3 relay toggle : 01 05 10 02 FF 00 29 3A
4 relay toggle : 01 05 10 03 FF 00 78 FA

Control all relays

Request: 01 05 00 FF FF 00 BC 0A

FieldMeaningNotes
01Slave address0x00: broadcast; 0x01–0xF7: slave address
05FC 0x05Relay control
00 FFAddressFixed 0x00FF
FF 00Command0xFF00:relay ON; 0x0000: relay OFF;
BC 0ACRC16CRC16 over preceding bytes

Response: 01 05 00 FF FF 00 BC 0A

FieldMeaningNotes
01Slave address0x00: broadcast; 0x01–0xF7: slave address
05FC 0x05Relay control
00 FFAddressFixed 0x00FF
FF 00Command0xFF00:relay ON; 0x0000: relay OFF;
BC 0ACRC16CRC16 over preceding bytes

Examples (slave 0x01):

All relays ON : 01 05 00 FF FF 00 BC 0A
All relays OFF : 01 05 00 FF 00 00 FD FA
All relays toggle : 01 05 10 FF FF 00 B8 CA

Read relay states

Request: 01 01 00 00 00 18 3C 00

FieldMeaningNotes
01Slave address0x00: broadcast; 0x01–0xF7: slave address
01FC 0x01Read coils (FC 01)
00 00Start addressFirst coil register address
00 18Coil countNumber of coils; must not exceed max address
3C 00CRC16CRC16 over preceding bytes

Response: 01 01 03 00 00 00 3C 4E

FieldMeaningNotes
01Slave address0x00: broadcast; 0x01–0xF7: slave address
01FC 0x01Read coils (FC 01)
03Byte countTotal data bytes returned.
00Returned statesPacked coil bits: Bit0 = first coil, Bit1 = next, …; unused high bits are zero.
3C 4ECRC16CRC16 over preceding bytes

Examples (slave 0x01)

TX: 01 01 00 00 00 18 3C 00 //Read first 24 relays
RX: 01 01 03 00 00 00 3C 4E // First 24 relays all OFF
TX: 01 01 00 01 00 03 2D CB // Query relays 2–4
RX: 01 01 01 05 91 8B //CH2、CH4 ON; CH3 OFF
TX: 01 01 00 03 00 05 0C 09 // Query relays 4–8
RX: 01 01 01 0F 11 8C //CH4–7 ON; CH8 OFF

Write multiple relay states

Request: 01 0F 00 00 00 18 03 FF FF FF 71 F4

FieldMeaningNotes
01Slave address0x00: broadcast; 0x01–0xF7: slave address
0FFC 0x0FWrite multiple coils (FC 0x0F)
00 00Start addressFirst coil register address
00 18Coil countCoil count; must not exceed maximum
03Byte countData byte count
FF FF FFCoil dataBit0: first coil, Bit1: next, …; unused high bits zero
71 F4CRC16CRC16 over preceding bytes

Response: 01 0F 00 00 00 18 55 C1

FieldMeaningNotes
01Slave address0x00: broadcast; 0x01–0xF7: slave address
0FFC 0x0FWrite multiple coils (FC 0x0F)
00 00Start addressFirst coil register address
00 18Coil countCoil count; must not exceed maximum
55 C1CRC16CRC16 over preceding bytes

Examples (slave 0x01)

All relays ON : 01 0F 00 00 00 18 03 FF FF FF 71 F4
All relays OFF : 01 0F 00 00 00 18 03 00 00 00 40 74
CH1–2 ON; CH3–24 OFF : 01 0F 00 00 00 18 03 03 00 00 B0 74

Single-relay pulse ON/OFF

Request: 01 06 30 00 00 07 C7 08

FieldMeaningNotes
01Slave address0x00: broadcast; 0x01–0xF7: slave address
06FC 0x06Write single holding register (FC 06)
30 00Pulse addrPulse register address for target relay
00 07IntervalDelay = value × 100 ms (e.g. 0x0007 → 700 ms). Max 0x7FFF.
C7 08CRC16CRC16 over preceding bytes

Response: 01 06 30 00 00 07 C7 08

FieldMeaningNotes
01Slave address0x00: broadcast; 0x01–0xF7: slave address
06FC 0x06Write single holding register (FC 06)
30 00Pulse addrPulse register address for target relay
00 07IntervalDelay = value × 100 ms (e.g. 0x0007 → 700 ms). Max 0x7FFF.
C7 08CRC16CRC16 over preceding bytes

Examples (slave 0x01)

CH1 pulse ON : 01 06 30 00 00 07 C7 08 //700MS = 7*100MS = 700MS
CH2 pulse ON : 01 06 30 01 00 08 D6 CC //800MS
CH1 pulse OFF : 01 06 40 00 00 05 5C 09 //500MS
CH2 pulse OFF : 01 06 40 01 00 06 4D C8 //600MS

Multiple-relay pulse ON/OFF

Request: 01 10 30 00 00 04 08 00 0A 00 0A 00 0A 00 0A 65 8E

FieldMeaningNotes
01Slave address0x00: broadcast; 0x01–0xF7: slave address
10FC 0x10Write multiple holding registers (FC 10)
30 00Pulse addrFirst relay pulse register address
00 04Coil countCoil count; must not exceed maximum
08Byte countFollowing data byte count
00 0A
……
00 0A
Timeout / intervalDelay = value × 100 ms (e.g. 0x0007 → 700 ms). Max 0x7FFF.
65 8ECRC16CRC16 over preceding bytes

Response: 01 10 30 00 00 04 CE CA

FieldMeaningNotes
01Slave address0x00: broadcast; 0x01–0xF7: slave address
10FC 0x10Write multiple holding registers (FC 10)
30 00Pulse addrFirst relay pulse register address
00 04Coil countCoil count; must not exceed maximum
CE CACRC16CRC16 over preceding bytes

Examples (slave 0x01)

CH1–4 pulse ON 1 s  : 01 10 30 00 00 04 08 00 0A 00 0A 00 0A 00 0A 65 8E //1S = 10*100MS = 1000MS
2/CH3 pulse ON 800 ms : 01 10 30 01 00 02 04 00 08 00 08 E6 66 //800MS
CH5–8 pulse OFF 500 ms : 01 10 40 04 00 04 08 00 05 00 05 00 05 00 05 F0 77 //500MS
1/CH3 pulse OFF 700 ms : 01 10 40 00 00 03 06 00 07 00 07 00 07 F6 82 //700MS

Read relay control modes

Request: 01 03 20 00 00 18 4E 00

FieldMeaningNotes
01Slave address0x00: broadcast; 0x01–0xF7: slave address
03FC 0x03Read holding registers (FC 03)
20 00Mode block start addressFirst mode register address
00 18Coil countNumber of mode registers
4E 00CRC16CRC16 over preceding bytes

Response: 01 03 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 E4 59

FieldMeaningNotes
01Slave address0x00: broadcast; 0x01–0xF7: slave address
03FC 0x03Read holding registers (FC 03)
30Byte countTotal data bytes returned.
00 00
……
00 00
Relay modeSupported relay control modes:
0x0000: Command mode — Direct command control;
0x0001: Cycle mode — State toggles on a timer;
E4 59CRC16CRC16 over preceding bytes
Note

In cycle mode, adjust timing via the delay registers.

Examples (slave 0x01)

Read CH1–24 modes: 01 03 20 00 00 18 4E 00
Read CH1 mode: 01 03 20 00 00 01 8F CA
Read CH2 mode: 01 03 20 01 00 01 DE 0A
Read CH3–5 modes: 01 03 20 02 00 03 AF CB

Set single relay control mode

Request: 01 06 20 00 00 01 43 CA

FieldMeaningNotes
01Slave address0x00: broadcast; 0x01–0xF7: slave address
06FC 0x06Write holding register (FC 06)
20 00Mode register addressTarget mode register address
00 01ModeSupported relay control modes:
0x0000: Command mode — Direct command control;
0x0001: Cycle mode — State toggles on a timer;
43 CACRC16CRC16 over preceding bytes
Note

In cycle mode, adjust timing via the delay registers.

Response: 01 06 20 00 00 01 43 CA

FieldMeaningNotes
01Slave address0x00: broadcast; 0x01–0xF7: slave address
06FC 0x06Write holding register (FC 06)
20 00Mode register addressTarget mode register address
00 01ModeRelay control mode value
43 CACRC16CRC16 over preceding bytes

Examples (slave 0x01)

Set CH1 cycle mode: 01 06 20 00 00 01 43 CA
Set CH2 command mode: 01 06 20 01 00 00 D3 CA

Set multiple relay control modes

Request: 01 10 20 00 00 18 30 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 42 64

FieldMeaningNotes
01Slave address0x00: broadcast; 0x01–0xF7: slave address
10FC 0x10Write multiple holding registers (FC 10)
20 00Mode block start addressFirst mode register address
00 18Coil countCoil count; must not exceed maximum
30Byte countFollowing data byte count
00 01
……
00 01
ModeSupported relay control modes:
0x0000: Command mode — Direct command control;
0x0001: Cycle mode — State toggles on a timer;
42 64CRC16CRC16 over preceding bytes
Note

In cycle mode, adjust timing via the delay registers.

Response: 01 10 20 00 00 18 CB C3

FieldMeaningNotes
01Slave address0x00: broadcast; 0x01–0xF7: slave address
10FC 0x10Write multiple holding registers (FC 10)
20 00Mode block start addressFirst mode register address
00 18Coil countCoil count; must not exceed maximum
CB C3CRC16CRC16 over preceding bytes

Examples (slave 0x01)

Set CH1–24 cycle mode: 01 10 20 00 00 18 30 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 42 64
Set CH3–5 command mode: 01 10 20 02 00 03 06 00 00 00 00 00 00 EC 8A

Set single relay delay time

Request: 01 06 50 00 00 0A 18 CD

FieldMeaningNotes
01Slave address0x00: broadcast; 0x01–0xF7: slave address
06FC 0x06Write holding register (FC 06)
50 00Mode delay addressDelay register address
00 0ADelayDelay = value × 100 ms (e.g. 0x0007 → 700 ms). Cycle-mode switching interval; max 0x7FFF.
18 CDCRC16CRC16 over preceding bytes
Note

Delay registers apply only in cycle mode.

Response: 01 06 50 00 00 0A 18 CD

FieldMeaningNotes
01Slave address0x00: broadcast; 0x01–0xF7: slave address
06FC 0x06Write holding register (FC 06)
50 00Mode delay addressDelay register address
00 0ADelayDelay = value × 100 ms (e.g. 0x0007 → 700 ms). Cycle-mode switching interval; max 0x7FFF.
18 CDCRC16CRC16 over preceding bytes

Examples (slave 0x01)

Set CH1 delay 500ms: 01 06 50 00 00 05 58 C9
Set CH2 delay 1s: 01 06 50 01 00 0A 49 0D

Read firmware version

Request: 01 03 80 01 00 01 FC 0A

FieldMeaningNotes
01Slave address0x00: broadcast; 0x01–0xF7: slave address
03FC 0x03Read firmware version (FC 03)
80 01Firmware registerFixed 4x8001
00 01Word countFixed 0x0001
FC 0ACRC16CRC16 over preceding bytes

Response: 01 03 02 00 64 B9 AF

FieldMeaningNotes
01Slave address0x00: broadcast; 0x01–0xF7: slave address
03FC 0x03Read firmware version (FC 03)
02Byte countReturned byte count
00 64VersionDecimal ÷100 → version string (0x0064 = 100 → V1.00)
B9 AFCRC16CRC16 over preceding bytes

Examples (slave 0x01)

TX:01 03 80 01 00 01 FC 0A
RX:01 03 02 01 2C B8 09 //0x012C = 300 =V3.00

Read slave address

Request: FE 03 80 02 00 01 18 05

FieldMeaningNotes
FESlave address0xFE: responding broadcast; applies to all slaves
03FC 0x03Read holding registers (FC 03)
80 02Address registerFixed 4x8002
00 01Word countFixed 0x0001
18 05CRC16CRC16 over preceding bytes

Response: FE 03 02 00 01 6D 90

FieldMeaningNotes
FESlave address0xFE: responding broadcast; applies to all slaves
03FC 0x03Read holding registers (FC 03)
02Byte countReturned byte count
00 01Slave addrCurrent 0x0001–0x00F7
6D 90CRC16CRC16 over preceding bytes
Note

With 0xFE broadcast read, connect only one device to avoid bus collisions.

Examples (slave 0x01)

TX : FE 03 80 02 00 01 18 05
RX : FE 03 02 00 02 2D 91 //address:0x02

Set slave address

Request: FE 06 80 02 00 01 D4 05

FieldMeaningNotes
FESlave address0xFE: responding broadcast; applies to all slaves
06FC 0x06Write single holding register (FC 06)
80 02Address registerFixed 4x8002
00 01New addressSlave address to set, range 0x0001–0x00F7
D4 05CRC16CRC16 over preceding bytes

Response: FE 06 80 02 00 01 D4 05

FieldMeaningNotes
FESlave address0xFE: responding broadcast; applies to all slaves
06FC 0x06Write single holding register (FC 06)
80 02Address registerFixed 4x8002
00 01New addressSlave address to set, range 0x0001–0x00F7
D4 05CRC16CRC16 over preceding bytes
Note

With 0xFE broadcast write, connect only one device or all devices will receive the same address.

Examples (slave 0x01)

Set address 0x01 :FE 06 80 02 00 01 D4 05
Set address 0x02 :FE 06 80 02 00 02 94 04
Set address 0x03 :FE 06 80 02 00 03 55 C4

Set UART parameters

Request: 01 06 80 03 00 05 90 09

FieldMeaningNotes
01Slave address0x00: broadcast; 0x01–0xF7: slave address
06FC 0x06Write single holding register (FC 06)
80 03UART registerFixed 4x8003
00 05UARTBits 0–7: baud rate
0 : 4800
1 : 9600
2 : 19200
3 : 38400
4 : 57600
5 : 115200
6 : 128000
7 : 256000
Bits 8–12: parity
0 : None,
1: Even parity,
2: Odd parity
Bits 13–16: stop bits
0 : 1 stop bit,
1: 1.5 stop bits,
2: 2 stop bits
90 09CRC16CRC16 over preceding bytes

Response: 01 06 80 03 00 05 90 09

FieldMeaningNotes
01Slave address0x00: broadcast; 0x01–0xF7: slave address
06FC 0x06Write single holding register (FC 06)
80 03UART registerFixed 4x8003
00 05UARTUART value
90 09CRC16CRC16 over preceding bytes

Examples (slave 0x01)

9600 baud, none, 1 stop :01 06 80 03 00 01 91 CA
9600 baud, even, 2 stop :01 06 80 03 00 D1 90 56
115200 baud, none, 1 stop :01 06 80 03 00 05 90 09

Set watchdog

Request: 01 06 80 04 00 0A 61 CC

FieldMeaningNotes
01Slave address0x00: broadcast; 0x01–0xF7: slave address
06FC 0x06Write single holding register (FC 06)
80 04Watchdog registerFixed 4x8004
00 0ATimeout / interval0 disables watchdog. Non-zero enables: each valid Modbus frame feeds the dog; if the interval expires without a valid frame, firmware resets and relays return to power-on defaults.
Timeout = value × 100 ms (e.g. 0x000A → 1 s).
61 CCCRC16CRC16 over preceding bytes

Response: 01 06 80 04 00 0A 61 CC

FieldMeaningNotes
01Slave address0x00: broadcast; 0x01–0xF7: slave address
06FC 0x06Write single holding register (FC 06)
80 04Watchdog registerFixed 4x8004
00 0ATimeout / intervalWatchdog timeout value
61 CCCRC16CRC16 over preceding bytes

Examples (slave 0x01)

Watchdog 10 s :01 06 80 04 00 64 E0 20
Disable watchdog :01 06 80 04 00 00 E1 CB

Exception codes

On protocol or device errors, the slave returns an exception response:

Response: 01 85 03 02 91

FieldMeaningNotes
01Slave address0x00: broadcast; 0x01–0xF7: slave address
85Exception FCException FC = request FC + 0x80
03Ex. codeException code
02 91CRC16CRC16 over preceding bytes

Exception codes (single byte) indicate error type. Common Modbus exceptions:

CodeNameDescription
0x01Illegal functionRequested function not supported.
0x02Illegal data addressRequested data address invalid.
0x03Illegal data valueData value or operation not allowed.
0x04Server device failureServer device failure.
0x05AcknowledgeRequest accepted and being processed.
0x06Device busyDevice busy; cannot execute now.