Skip to main content

Development Protocol

Function Code Introduction​

Function CodeDescription
01Read Coil StatusRead output channel status
02Read Discrete Input StatusRead input status
03Read Holding RegistersRead address and version
05Write Single CoilWrite a single output channel
06Write Single RegisterSet baud rate and address
0FWrite Multiple CoilsWrite output channel status
10Write Multiple RegistersSet multiple registers

Modbus Data Types​

The Modbus protocol defines 4 types of data areas, usually represented by 0x, 1x, 3x, and 4x for different address types.

Address TypeAddress RangeBasic Storage UnitRead/Write AttributeFunction Code
Coils0x0000-0xFFFF1 bitRead/Write01H, 05H, 0FH
Discrete Inputs1x0000-1xFFFF1 bitRead-only02H
Input Registers3x0000-3xFFFF16 bit / RegisterRead-only04H
Holding Registers4x0000-4xFFFF16 bit / RegisterRead/Write03H, 06H, 10H

The above is the standard Modbus data type classification. A device does not necessarily implement all 4 data areas at the same time, nor does it necessarily support all the function codes listed in the table.

Register Address Description​

Address (HEX)Address Storage ContentRegister ValueAccessModbus Function Code
0x0000 - 0x0007Output channel 1-8 address0xFF00: output channel on;
0x0000: output channel off;
0x5500: output channel toggle;
Read/Write0x01, 0x05, 0x0F
0x00FFOperate all output channels0xFF00: all output channels on;
0x0000: all output channels off;
0x5500: all output channels toggle;
Write0x05
0x0100 - 0x0107Output channel 1-8 toggle address0xFF00: output channel toggle;
0x0000: output channel unchanged;
Write0x05, 0x0F
0x01FFOperate all output channel toggle0xFF00: all output channels toggle;
0x0000: all output channels unchanged;
Write0x05
0x0200 - 0x0207Output channel 1-8 flash-onDelay time = data * 100 ms
Value: 0x0007, delay: 7 * 100 ms = 700 ms
Write0x05
0x0400 - 0x0407Output channel 1-8 flash-offDelay time = data * 100 ms
Value: 0x0007, delay: 7 * 100 ms = 700 ms
Write0x05
1x0000 - 1x0007Channel 1-8 input addressIndicates input channel 1-8 statusRead0x02
4x1000 - 4x1007Output channel 1-8 control mode00 - 03, four control modesRead/Write0x03, 0x06, 0x10
4x4000Device addressStores the Modbus address directly
Device address: 0x0001
Read0x03
4x8000Software versionConvert to decimal and move the decimal point two places to the left to indicate the software version
0x0064 = 100 = V1.00
Read0x03

Command Operation Introduction​

Control a Single Output Channel​

Send Code: 01 05 00 00 FF 00 8C 3A

FieldDescriptionNotes
01Device addressFixed 0x01
0505 CommandControl output channel command
00 00AddressRegister address of output channel to control, 0x0000-0x0007
FF 00Command0xFF00: output channel on;
0x0000: output channel off;
0x5500: output channel toggle;
8C 3ACRC16CRC16 checksum of the first 6 bytes of data

Return Code: 01 05 00 00 FF 00 8C 3A

FieldDescriptionNotes
01Device addressFixed 0x01
0505 CommandControl output channel command
00 00AddressRegister address of output channel to control, 0x0000-0x0007
FF 00Command0xFF00: output channel on;
0x0000: output channel off;
0x5500: output channel toggle;
8C 3ACRC16CRC16 checksum of the first 6 bytes of data

Example: Device with address 1:

Output channel 1 on: 01 05 00 00 FF 00 8C 3A
Output channel 1 off: 01 05 00 00 00 00 CD CA
Output channel 2 on: 01 05 00 01 FF 00 DD FA
Output channel 2 off: 01 05 00 01 00 00 9C 0A
Output channel 3 on: 01 05 00 02 FF 00 2D FA
Output channel 3 off: 01 05 00 02 00 00 6C 0A
Output channel 4 on: 01 05 00 03 FF 00 7C 3A
Output channel 4 off: 01 05 00 03 00 00 3D CA
Output channel 1 toggle: 01 05 00 00 55 00 F2 9A
Output channel 2 toggle: 01 05 00 01 55 00 A3 5A
Output channel 3 toggle: 01 05 00 02 55 00 53 5A
Output channel 4 toggle: 01 05 00 03 55 00 02 9A

Control All Output Channels​

Send code: 01 05 00 FF FF 00 BC 0A

FieldDescriptionNotes
01Device addressFixed 0x01
0505 CommandControl output channel command
00 FFAddressFixed 0x00FF
FF 00Command0xFF00: all output channels on;
0x0000: all output channels off;
0x5500: all output channels toggle;
BC 0ACRC16CRC16 checksum of the first 6 bytes of data

Return Code: 01 05 00 FF FF 00 BC 0A

FieldDescriptionNotes
01Device addressFixed 0x01
0505 CommandControl output channel command
00 FFAddressFixed 0x00FF
FF 00Command0xFF00: all output channels on;
0x0000: all output channels off;
0x5500: all output channels toggle;
BC 0ACRC16CRC16 checksum of the first 6 bytes of data

Example: Device with address 1:

All output channels ON : 01 05 00 FF FF 00 BC 0A
All output channels OFF : 01 05 00 FF 00 00 FD FA
All output channels TOGGLE: 01 05 00 FF 55 00 C2 AA

Read Output Channel Status​

Send Code: 01 01 00 00 00 08 3D CC

FieldDescriptionNotes
01Device addressFixed 0x01
01Command 01Query output channel status
00 00Start AddressOutput channel start address, 0x0000 - 0x0007
00 08Output Channel CountCannot exceed the maximum number of output channels
3D CCCRC16CRC16 checksum of the first 6 bytes of data

Return Code: 01 01 01 00 51 88

FieldDescriptionNotes
01Device addressFixed 0x01
01Command 01Query output channel status
01Byte countTotal number of bytes in the status information
00Queried StatusReturned output channel status
Bit0: start output channel status;
Bit1: next output channel status,
and so on; unused high bits are zero
51 88CRC16CRC16 checksum of the first 4 bytes of data

Example: Device with address 1

Send: 01 01 00 00 00 08 3D CC //Query all output channels
Return: 01 01 01 00 51 88 //All output channels off
Send: 01 01 00 02 00 01 5C 0A //Query output channel 2
Return: 01 01 01 01 90 48 //Output channel 2 on
Send: 01 01 00 01 00 03 2D CB //Query output channels 1, 2, and 3 status
Return: 01 01 01 05 91 8B //Output channels 1 and 3 on, output channel 2 off

Write Output Channel Status​

Send code: 01 0F 00 00 00 08 01 FF BE D5

FieldDescriptionNotes
01Device addressFixed 0x01
0FCommand 0FWrite output channel status
00 00Output start addressRegister address of output channel to control, 0x0000-0x0007
00 08Number of output channelsNumber of output channels to operate, cannot exceed max
01Byte countNumber of status bytes
FFOutput channel statusBit0: start output channel status;
Bit1: next output channel status,
and so on; unused high bits are zero
BE D5CRC16CRC16 checksum of the first 6 bytes of data

Return Code: 01 0F 00 00 00 08 54 0D

FieldDescriptionNotes
01Device addressFixed 0x01
0FCommand 0FWrite relay status command
00 00AddressOutput channel start address
00 08Output channel countNumber of output channels written
54 0DCRC16CRC16 checksum of the first 6 bytes of data

Example: Device with address 1

All output channels on: 01 0F 00 00 00 08 01 FF BE D5
All output channels off: 01 0F 00 00 00 08 01 00 FE 95
0-1 on; 3-7 off: 01 0F 00 00 00 08 01 03 BE 94
output channels 1, 2, and 3 on: 01 0F 00 01 00 03 01 07 F3 55

Output Channel Flash ON/OFF Command​

Send Code: 01 05 02 00 00 07 8D B0

FieldDescriptionNotes
01Device addressFixed 0x01
05Command 05Single control command
02Start Address (big-endian)02 is the start address of the flash-on function, 04 is the start address of the flash-off function
00Output Channel AddressAddress of the output channel to control, 0x00 - 0x07
00 07Interval timeDelay time = data * 100 ms
Value: 0x0007, Delay: 7 * 100 ms = 700 ms
Maximum time for momentary ON/OFF is 0x7FFF
8D B0CRC16CRC16 checksum of the first 6 bytes of data

Return Code: 01 05 02 00 00 07 8D B0

FieldDescriptionNotes
01Device addressFixed 0x01
05Command 05Single control command
02Start Address (big-endian)02 is the start address of the flash-on function, 04 is the start address of the flash-off function
00Output Channel AddressAddress of the output channel to control, 0x00 - 0x07
00 07Interval timeDelay time = data * 100 ms
Value: 0x0007, Delay: 7 * 100 ms = 700 ms
Maximum time for momentary ON/OFF is 0x7FFF
8D B0CRC16CRC16 checksum of the first 6 bytes of data

Example: Device with address 1

Output channel 0 flash ON: 01 05 02 00 00 07 8D B0 //700MS = 7*100MS = 700MS
Output channel 1 flash ON: 01 05 02 01 00 08 9C 74 //800MS
Output channel 0 flash OFF: 01 05 04 00 00 05 0C F9 //500MS
Output channel 1 flash OFF: 01 05 04 01 00 06 1D 38 //600MS

Read Input Status​

Send Code: 01 02 00 00 00 08 79 CC

FieldDescriptionNotes
01Device addressFixed 0x01
02Command 02Read input status command
00 00Input start addressInput start address, 0x0000 - 0x0007
00 08Number of registersNumber of input channels to read, cannot exceed the maximum number of input channels
79 CCCRC16CRC16 checksum of the first 6 bytes of data

Return Code: 01 02 01 00 A1 88

FieldDescriptionNotes
01Device addressFixed 0x01
02Command 02Read input status command
01Byte countTotal number of bytes in the status information
00Queried statusReturned input status
Bit0: Starting input channel status;
Bit1: Next input channel status,
and so on. High unused bits are zero
A1 88CRC16CRC16 checksum of the first 4 bytes of data

Example: Device with address 1

Send: 01 02 00 00 00 08 79 CC //Query all input channels
Return: 01 02 01 00 A1 88 //Inputs are all untriggered
Send: 01 02 00 00 00 08 79 CC //Query all input channels
Return: 01 02 01 41 61 B8 //Channels 1 and 7 input is triggered, and the rest of channels are not triggered
Send: 01 02 00 01 00 03 69 CB //Query input channels 2, 3, and 4
Return: 01 02 01 03 E1 89 //Channels 2 and 3 input is triggered, and channel 4 is not triggered

Read Output Channel Control Mode​

Transmission Code: 01 03 10 00 00 08 40 CC

FieldDescriptionNotes
01Device addressFixed 0x01
03Command 03Read holding registers
10 00Register Start Address0x1000 - 0x1007 correspond to output channel 1-8 control modes
00 08Number of registersNumber of registers to read, maximum 8 channels
40 CCCRC16CRC16 checksum of the first 6 bytes of data

Return Code: 01 03 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 E4 59

FieldDescriptionNotes
01Device addressFixed 0x01
03Command 03Read holding registers
10Data Byte LengthTotal number of bytes of returned status information
00 00 - 00 00Control ModeIndicates output channel 1 - 8 control modes. 0x0000 ~ 0x0003 represent four control modes:
0x0000: Normal mode, output channels are directly controlled by commands;
0x0001: Linkage mode, output channel status matches the corresponding input channel status;
0x0002: Toggle mode, each pulse input on the input channel toggles the corresponding output channel state once
0x0003: Edge trigger mode, each level transition on the input channel toggles the corresponding output channel state once
⚠️ Note: Except for linkage mode, the other modes also support controlling output channels via commands.
E4 59CRC16CRC16 checksum of the first 6 bytes of data

Example: Device with address 1

Read output channels 1-8 control mode: 01 03 10 00 00 08 40 CC
Read output channel 1 control mode : 01 03 10 00 00 01 80 CA
Read output channel 2 control mode : 01 03 10 01 00 01 D1 0A
Read output channels 3-5 control mode: 01 03 10 02 00 03 A0 CB

Set Single Output Channel Control Mode​

Transmission Code: 01 06 10 00 00 01 4C CA

FieldDescriptionNotes
01Device addressFixed 0x01
06Command 06Write single register command
10 00Register start address0x1000-0x1007 corresponds to output channels 1-8 control mode
00 01Control ModeIndicates output channel 1 - 8 control modes. 0x0000 - 0x0003 represent four control modes:
0x0000: Normal mode, output channels are directly controlled by commands;
0x0001: Linkage mode, output channel status matches the corresponding input channel status;
0x0002: Toggle mode, each pulse input on the input channel toggles the corresponding output channel state once
0x0003: Edge trigger mode, each level transition on the input channel toggles the corresponding output channel state once
⚠️ Note: Except for linkage mode, the other modes also support controlling output channels via commands.
4C CACRC16CRC16 checksum of the first 6 bytes of data

Return Code: 01 06 10 00 00 01 4C CA

FieldDescriptionNotes
01Device addressFixed 0x01
06Command 06Write single register command
10 00Register start address0x1000-0x1007 corresponds to output channels 1-8 control mode
00 01Control modeOutput channel control modes, 0x0000~0x0003 indicate four control modes
4C CACRC16CRC16 checksum of the first 6 bytes of data

Example: Device with address 1:

Set output channel 1 to Linkage mode: 01 06 10 00 00 01 4C CA
Set output channel 2 to Toggle mode: 01 06 10 01 00 02 5D 0B

Set Multiple Output Channel Control Modes​

Send Code: 01 10 10 00 00 08 10 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 7C B1

FieldDescriptionNotes
01Device addressFixed 0x01
10Write multiple registers-
10 00Register start address0x1000-0x1007 corresponds to output channels 1-8 control mode
00 08Number of registersNumber of registers to set, up to 8 channels
10Byte count-
00 01 - 00 01Control ModeIndicates output channel 1 - 8 control modes. 0x0000 - 0x0003 represent four control modes:
0x0000: Normal mode, output channels are directly controlled by commands;
0x0001: Linkage mode, output channel status matches the corresponding input channel status;
0x0002: Toggle mode, each pulse input on the input channel toggles the corresponding output channel state once
0x0003: Edge trigger mode, each level transition on the input channel toggles the corresponding output channel state once
⚠️ Note: Except for linkage mode, the other modes also support controlling output channels via commands.
7C B1CRC16CRC16 checksum of the first 6 bytes of data

Return Code: 01 10 10 00 00 08 C5 0F

FieldDescriptionNotes
01Device addressFixed 0x01
10Write multiple registers-
10 00Register start address0x1000-0x1007 corresponds to output channels 1-8 control mode
00 08Number of registersNumber of registers to set, up to 8 channels
C5 0FCRC16CRC16 checksum of the first 6 bytes of data

Example: Device with address 1:

Set output channels 1-8 to normal mode: 01 10 10 00 00 08 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0B 5C
Set output channels 1-8 to linkage mode: 01 10 10 00 00 08 10 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 7C B1
Set output channels 3-5 to toggle mode: 01 10 10 02 00 03 06 00 02 00 02 00 02 4A 4B

Read Software Version Command​

Transmission Code: 01 03 80 00 00 01 AD CA

FieldDescriptionNotes
01Device addressFixed 0x01
03Command 03Read holding registers
80 00Command register0x8000 for reading software version
00 01Byte CountFixed 0x0001
AD CACRC16CRC16 checksum of the first 6 bytes of data

Return Code: 01 03 02 00 64 B9 AF

FieldDescriptionNotes
01Device addressFixed 0x01
03Command 03Read holding registers
02Byte countReturned byte count
00 64Software VersionConvert to decimal, then shift decimal point two places left for version
0x0064 = 100 = V1.00
B9 AFCRC16CRC16 checksum of the first 5 bytes of data

Example: Device with address 1:

Transmission Code: 01 03 80 00 00 01 AD CA
Return Code: 01 03 02 00 C8 B9 D2 //0x00C8 = 200 =V2.00

Exception Function Codes​

If the received command is incorrect or an exception occurs, the device will return an exception response. The exception response format is as follows:

Return Code: 01 85 03 02 91

FieldDescriptionNotes
01Device Address0x00 indicates broadcast address; 0x01-0xFF indicate device address
85Exception Function CodeException function code = Request function code + 0x80
03Exception CodeIllegal data value
02 91CRC16CRC16 checksum of the first 3 bytes of data

The exception code is a single-byte value indicating the type of error. Several common exception codes defined by the Modbus protocol:

Exception CodeNameDescription
0x01Illegal FunctionThe requested function code is not supported
0x02Illegal Data AddressThe requested data address is incorrect
0x03Illegal Data ValueThe requested data value or operation cannot be performed
0x04Server FailureServer device failure
0x05AcknowledgeRequest received and processing
0x06Device BusyDevice is busy and cannot execute the requested operation

Modbus TCP Command Overview​

Here, we will briefly introduce the conversion between Modbus TCP and Modbus RTU protocols using the command to turn on the first output channel above as an example.

Modbus RTU command: 01 05 00 00 FF 00 8C 3A

FieldDescriptionNotes
01Device addressFixed 0x01
0505 CommandControl output channel command
00 00AddressRegister address of the output channel to control, 0x00, i.e., the first output channel
FF 00Command0xFF00: output channel on
8C 3ACRC16CRC16 checksum of the first 6 bytes of data

Modbus TCP command: 00 00 00 00 00 06 01 05 00 00 FF 00

FieldDescriptionNotes
00 00Message identifierCan be 0x00
00 00Modbus identifierMust be 0, indicating Modbus communication
00 06Byte lengthIndicates the total number of subsequent bytes; 6 bytes follow
01Device addressFixed 0x01
0505 CommandControl output channel command
00 00AddressRegister address of the output channel to control, 0x00, i.e., the first output channel
FF 00Command0xFF00: output channel on

By comparing the commands above, it can be seen that removing the CRC checksum from the Modbus RTU command and prefixing it with five 0x00 and one byte length converts it to the Modbus TCP protocol.

For example, if the server's Ethernet port receives the Modbus TCP command 00 00 00 00 00 06 01 05 00 00 FF 00 (turn on the first output channel), the main controller receives the Modbus RTU command 01 05 00 00 FF 00 8C 3A.