Skip to main content

DAM-8RO-8DI-E development protocol

This product is an 8-channel relay output + 8-channel digital input 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 product is primarily coil-oriented; the following function codes are supported.

FCFunctionNotes
01Read coilsRead relay state
02Read discrete inputsRead digital input state
03Read holding registersRead device parameters
05Write single coilSingle relay write
06Write single registerWrite device parameters
0FWrite multiple coilsMultiple relays

Register map

Address (HEX)ContentDescriptionTypeModbus FC
0x0000~0x0008CH1–CH8 relay outputs0xFF00:relay ON; 0x0000: relay OFF;R/W0x01,0x05,0x0F
0x00FFAll relay outputs0xFF00:All relays ON; 0x0000: all OFF;W0x05
0x1000~0x1008CH1–CH8 relay toggle0xFF00:toggle; 0x0000: no change;W0x05,0x0F
0x10FFAll relays toggle0xFF00:toggle all; 0x0000: no change;W0x05
0xA000~0xA00FCH1–CH8 power-on relay output0xFF00:relay ON; 0x0000: relay OFF;power-on relay output.R/W/S0x01,0x05,0x0F
1x0000~1x0007CH1–CH8 digital inputsState of digital inputs CH1–CH8W0x02
4x2000~4x2007CH1–CH8 relay control modeSeven control modes 0x0000–0x0006R/W0x03,0x06,0x10
4x3000~4x3007CH1–CH8 pulse ONDelay = value × 100 ms (e.g. 0x0007 → 700 ms)W0x06,0x10
4x4000~4x4007CH1–CH8 pulse OFFDelay = value × 100 ms (e.g. 0x0007 → 700 ms)W0x06,0x10
4x5000~4x500FCH1–CH8 relay delayDelay = value × 100 ms (e.g. 0x0007 → 700 ms)W/S0x03,0x06,0x10
4x8000SUKModel numberR/W/S0x03
4x8001Firmware versionDecimal value with implied decimal → version (e.g. 0x0064 = 100 → V1.00)R/W/S0x03
4x8002Slave addressStores Modbus address; default 0x0001R/W/S0x03,0x06
4x8003UART parametersUpper byte: parity/stop; lower byte: baud rateR/W/S0x03,0x06
4x8004WatchdogIf no valid Modbus within timeout, outputs off / resetR/W/S0x03,0x06
4x8005Auto-report DIDigital input change auto-uploadR/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 08 3D CC

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

Response: 01 01 01 00 51 88

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

Examples (slave 0x01)

TX: 01 01 00 00 00 08 3D CC //Read first 8 relays
RX: 01 01 01 00 51 88 // First 8 relays all OFF
TX: 01 01 00 01 00 03 2D CB // Query relays 2–4
RX: 01 01 01 05 91 8B //2、4 relay ON,3 relay OFF
TX: 01 01 00 03 00 05 0C 09 // Query relays 4–8
RX: 01 01 01 0F 11 8C //4-7 relay ON,8 relay OFF

Write multiple relay states

Request: 01 0F 00 00 00 08 01 FF BE D5

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

Response: 01 0F 00 00 00 08 54 0D

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

Examples (slave 0x01)

All relays ON : 01 0F 00 00 00 08 01 FF BE D5
All relays OFF : 01 0F 00 00 00 08 01 00 FE 95
CH1–2 ON; CH3–7 OFF : 01 0F 00 00 00 08 01 03 BE 94

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)

1 relays pulse ON 1 s  : 01 10 30 00 00 04 08 00 0A 00 0A 00 0A 00 0A 65 8E //700MS = 7*100MS = 700MS
2/CH3 pulse ON 800 ms : 01 10 30 01 00 02 04 00 08 00 08 E6 66 //800MS
5 relays 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 ON 600 ms : 01 10 40 00 00 03 06 00 07 00 07 00 07 F6 82 //700MS

Read digital input states

Request: 01 02 00 00 00 08 79 CC

FieldMeaningNotes
01Slave address0x00: broadcast; 0x01–0xF7: slave address
02FC 0x02Read discrete inputs (FC 02)
00 00Start addressFirst discrete input address
00 08Coil countInput count; must not exceed max channels
79 CCCRC16CRC16 over preceding bytes

Response: 01 01 01 00 51 88

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

Examples (slave 0x01)

TX: 01 02 00 00 00 08 79 CC
RX: 01 01 01 00 51 88 //No inputs active
TX: 01 02 00 00 00 08 79 CC
RX: 01 02 01 01 60 48 //CH1 active, others idle
TX: 01 02 00 00 00 08 79 CC
RX: 01 02 01 41 61 B8 //CH1 and CH7 active

Read relay control modes

Request: 01 03 20 00 00 08 4F CC

FieldMeaningNotes
01Slave address0x00: broadcast; 0x01–0xF7: slave address
03FC 0x03Read holding registers (FC 03)
20 00Mode block start addressFirst mode register address
00 08Coil countNumber of mode registers
4F CCCRC16CRC16 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)
10Byte 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;
0x0002: Follow-input mode — Relay tracks matching input;
0x0003: Toggle on pulse — Each input pulse toggles relay;
0x0004: Toggle on edge — Each input edge toggles relay;
0x0005: ON-delay mode — Input pulse: ON then OFF after delay;
0x0006: OFF-delay mode — Input pulse: OFF then ON after delay;
51 88CRC16CRC16 over preceding bytes
Note

In cycle, ON-delay, and OFF-delay modes, adjust timing via the delay registers.

Examples (slave 0x01)

Read CH1–8 modes: 01 03 20 00 00 08 4F CC
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 02 03 CB

FieldMeaningNotes
01Slave address0x00: broadcast; 0x01–0xF7: slave address
06FC 0x06Write holding register (FC 06)
20 00Mode register addressTarget mode register address
00 02ModeSupported relay control modes:
0x0000: Command mode — Direct command control;
0x0001: Cycle mode — State toggles on a timer;
0x0002: Follow-input mode — Relay tracks matching input;
0x0003: Toggle on pulse — Each input pulse toggles relay;
0x0004: Toggle on edge — Each input edge toggles relay;
0x0005: ON-delay mode — Input pulse: ON then OFF after delay;
0x0006: OFF-delay mode — Input pulse: OFF then ON after delay;
03 CBCRC16CRC16 over preceding bytes
Note

Cycle, ON-delay, and OFF-delay timing is adjusted via delay registers.

Response: 01 06 20 00 00 02 03 CB

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

Examples (slave 0x01)

Set CH1 follow mode: 01 06 20 00 00 02 03 CB
Set CH2 toggle mode: 01 06 20 01 00 03 93 CB

Set multiple relay control modes

Request: 01 10 20 00 00 08 10 00 02 00 02 00 02 00 02 00 02 00 02 00 02 00 02 D3 35

FieldMeaningNotes
01Slave address0x00: broadcast; 0x01–0xF7: slave address
10FC 0x10Write multiple holding registers (FC 10)
20 00Mode block start addressFirst mode register address
00 08Coil countCoil count; must not exceed maximum
10Byte countFollowing data byte count
00 02
……
00 02
ModeSupported relay control modes:
0x0000: Command mode — Direct command control;
0x0001: Cycle mode — State toggles on a timer;
0x0002: Follow-input mode — Relay tracks matching input;
0x0003: Toggle on pulse — Each input pulse toggles relay;
0x0004: Toggle on edge — Each input edge toggles relay;
0x0005: ON-delay mode — Input pulse: ON then OFF after delay;
0x0006: OFF-delay mode — Input pulse: OFF then ON after delay;
D3 35CRC16CRC16 over preceding bytes
Note

Cycle, ON-delay, and OFF-delay timing is adjusted via delay registers.

Response: 01 10 20 00 00 08 CA 0F

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

Examples (slave 0x01)

Set CH1–8 follow mode: 01 10 20 00 00 08 10 00 02 00 02 00 02 00 02 00 02 00 02 00 02 00 02 D3 35
Set CH3–5 toggle mode: 01 10 20 02 00 03 06 00 03 00 03 00 03 18 8B

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 register addressDelay register address
00 0ADelayDelay = value × 100 ms (e.g. 0x0007 → 700 ms). Max 0x7FFF.
03 CBCRC16CRC16 over preceding bytes
Note

Delay registers apply only in cycle, ON-delay, and OFF-delay modes.

Response: 01 06 30 00 00 02 03 CB

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

Examples (slave 0x01)

Set CH1 follow mode: 01 06 20 00 00 02 03 CB
Set CH2 toggle mode: 01 06 20 01 00 03 93 CB

Read firmware version

Request: 01 03 80 01 00 01 FC 0A

FieldMeaningNotes
01Slave address0x00: broadcast; 0x01–0xF7: slave address
03FC 0x03Read firmware / device info (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 / device info (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 01New addressSlave address to set, range 0x0001–0x00F7
D4 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)

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 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 (label follows Chinese doc)
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 20 00 00 91 43 CA
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

Set DI auto-upload

Request: 01 06 80 05 FF 00 61 CC

FieldMeaningNotes
01Slave address0x00: broadcast; 0x01–0xF7: slave address
06FC 0x06Write single holding register (FC 06)
80 05Auto-upload registerFixed 4x8005
FF 00On/offDigital inputs can auto-report on change. 0 disables; any non-zero value enables reporting when DI state changes.
61 CCCRC16CRC16 over preceding bytes

Response: 01 06 80 05 FF 00 61 CC

FieldMeaningNotes
01Slave address0x00: broadcast; 0x01–0xF7: slave address
06FC 0x06Write single holding register (FC 06)
80 05Auto-upload registerFixed 4x8005
FF 00On/offDigital inputs can auto-report on change. 0 disables; any non-zero value enables reporting when DI state changes.
61 CCCRC16CRC16 over preceding bytes

Examples (slave 0x01)

Enable auto-upload :01 06 80 05 FF 00 61 CC
Disable auto-upload :01 06 80 05 00 00 B0 0B

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.

Modbus TCP framing

Below, turning on relay 1 illustrates how an RTU frame maps to Modbus TCP.

  • Modbus RTU PDU: 01 05 00 00 FF 00 8C 3A
FieldMeaningNotes
01Slave addressFixed 0x01
05FC 0x05Relay control
00 00AddressCoil 0x0000 (first relay)
FF 00Command0xFF00 = relay ON
8C 3ACRC16CRC16 over preceding bytes
  • Modbus TCP ADU: 00 00 00 00 00 06 01 05 00 00 FF 00
FieldMeaningNotes
00 00Transaction IDTypically 0x0000
00 00Protocol IDMust be 0 for Modbus
00 06Length (bytes following)Byte count of PDU that follows
01Slave addressFixed 0x01
05FC 0x05Relay control
00 00AddressCoil 0x0000 (first relay)
FF 00Command0xFF00 = relay ON

Compared above: take the RTU PDU (drop CRC), prepend 5×0x00 plus length to form Modbus TCP.