Communication protocol:
function code
0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE,
One function code 01
Read coil status from remote devices (Switching data, Each represents a switch quantity, 0=Close 1=open, Address is represented by a bit address, Data is represented in bytes, Less than one byte, Fill the high position with 0)
Regarding the address 01 Read the current device switch status
| Host request: Sending data as 010100000018 | |||||||
| 01 | 01 | 00 | 00 | 00 | 18 | ||
| address | function code | starting address | coil (discrete signal) quantity | CRCL | CRCH | ||
| Slave response: The returned data is 010101 | |||||||
| 01 | 01 | 03 | 00 | 00 00 | 7A | 37 | |
| address | Can code | byte count | Coil status1 | Coil status2 Coil status3 | CRCL | CRCH | |
This communication setting24An online reading coil (discrete signal) , Coil address=0x0000~0x0017
Return to coil status1, address0~7 (One byte of data)
D7=Press on/off D6=High wind on/off D5=Stroke on/off D4=Low wind on/off
D3=Alarm on/off D2=reserve D1=reserve D0=reserve
Return to coil status2, address8~F (One byte of data)
D7=Power on D6=defrost D5=Reserve D4=Dehumidification/ventilation(0=Dehumidification 1=improve air circulation)
D3=Reserve D2=Moisture control D1=Reserve D0=Reserve
Return to coil status3, address10~17 (One byte of data) Reserved protection status
D7=Reserve D6=Reserve D5=Reserve D4=Reserve
D3=Reserve D2=Reserve D1=Reserve D0=Reserve
For example, the host sends: 01 01 00 00 00 18 3c 00
Read the current device status for address 1 device
two function code 04
Use this function code to read device information for remote devices (Each information parameter is mapped to a register) , 16Bit data format, HEXcode, High byte first
Regarding the address01 Read the current device parameters
| Host request: Sending data as 01040000000271CB | ||||||||||||||
| 01 | 04 | 00 | 00 | 00 | 02 | 71 | CB | |||||||
| address | function code | Starting register address | Input the number of registers | CRCL | CRCH | |||||||||
| Slave response: The returned data is 01040400C8012C7A37 (temperature: 20.0℃ Humidity30.0%RH) | ||||||||||||||
| 01 | 04 | 04 | 00 | C8 | 01 | 2C | 7A | 37 | ||||||
| address | function code | byte count | Set humidity (HEX) | Current humidity (HEX) | CRCL | CRCH | ||||||||
This communication sets up 4 registers (data volume) , address 0x0000~0x0003 Read 2 pieces of data at once, So the number of input registers is always equal to 0x0002, address=0x0000 or 0x0002
Address allocation:
0x0000: Set humidity 0x0001: Current humidity
0x0002: coil temperature 0x0003: reserve
note1: Temperature and humidity dataH (High-order byte) And dataL (low-order byte) For each corresponding current temperature and humidity value:
The uploaded data needs to be divided by10, Like humidity upload16Base system0311, Corresponding to decimal system00785, express78.5%.
note2: The temperature below zero is represented by a negative number as uploaded -11.5℃. then 11.5℃Corresponding to decimal positive numbers=115 16numeral system=0x73
Supplement for negative numbers, then= 0xFFFF-0x0073= 0Xff8C
note3: Temperature and humidity data failure data=0xFFFF
For example, the host sends: 01 04 00 00 00 02 71 CB
Read from device at address 100 00 Starting from the address 2Byte data (That is, the device is set to humidity and the current humidity)
three function code 05
Use this function code to write a single coil for remote devices (Write to a single registerON/OFFStatus, Each switch value is mapped to a register16Bit data format, HEXcode, High byte first , FF00=open, 0000=Close)
Write power on command to device at address 1
| Host request: Sending data as01050000FF00 | |||||||
| 01 | 05 | 00 | 00 | FF | 00 | ||
| address | function code | Pre register
Address high bit | Pre register
Low order address | Insert the high bit of register data | Insert the low bit of the register data | CRCL | CRCH |
| Return from machine: The returned data is01050000FF00 | |||||||
| 01 | 05 | 00 | 00 | FF | 00 | ||
| address | function code | Pre register
Address high bit | Pre register
Low order address | Insert high data bits | Place data in low position | CRCL | CRCH |
This communication sets up one online writing coil (discrete signal) , Coil address=0x0000
For example, the host sends: 01 05 00 00 ff 00 8c 3a
Set up power on device for address 1
For example, the host sends: 01 05 00 00 00 00 cd ca
Set shutdown for device at address 1
four function code 06
Use this function code to write data information to a single register for remote devices (Each information parameter is mapped to a register) , 16Bit data format, HEXcode, High byte first
This agreement defines and stipulates11Write parameter quantity, The corresponding addresses are as follows:
Preset register address: 0x0000 Write operation mode 0x0000=Dehumidification 0x0001=improve air circulation
0x0001 Write the set humidity HEXcode, With one decimal place
0x0002 Write the current time HEXcode, High byte hours, Low byte fraction
0x0003 Write settings for timed startup HEXcode, High byte hours, Low byte fraction
0x0004 Write settings for timed shutdown HEXcode, High byte hours, Low byte fraction
0x0005~0x0008 Reserved control
0x0009 Write device address correction valueHEXcode, high byte=0, low-order byte0~254
0x000a Write communication baud rate correction valueHEXcode,
Send an example:
for example: Write ventilation mode to address 1
Host sends: 01 06 00 00 00 01 48 0a
for example: Write the set humidity to address 1 48 %
Host sends: 01 06 00 01 01 e0 d8 12
for example: Write the current time to address 1 8:30
Host sends: 01 06 00 02 08 1e af c2
for example: Write timed boot time to address 1 10:40
Host sends: 01 06 00 03 0a 28 7f 74
for example: Write scheduled shutdown time to address 1 13:12
Host sends: 01 06 00 04 0d 0c cc 9e
for example: Write to address 1 to convert it into an address2
note: Address Register=0x0009 The valid data for the machine address is a single byte, Address value high bit=0; low position0~254
Host sends: 01 06 00 09 00 02 d8 09
| Host request: Sending data as01060009000209D8 (Address 1 changed to2) | |||||||
| 01 | 06 | 00 | 09 | 00 | 02 | 09 | D8 |
| address | function code | Pre register
Address high bit | Pre register
Low order address | Insert the high bit of register data | Insert the low bit of the register data | CRCL | CRCH |
| Return from machine: The returned data is01060009000209D8 | |||||||
| 01 | 06 | 00 | 09 | 00 | 02 | 09 | D8 |
| address | function code | Pre register
Address high bit | Pre register
Low order address | Insert high data bits | Place data in low position | CRCL | CRCH |
for example: Regarding the address1 Change the current baud rate to4800 (4800of16The base is12C0)
Host sends: 01 06 00 0a 12 c0 a5 38
| Host request: Sending data as0106000A12C0A538 (Baud rate9600change to4800) | |||||||
| 01 | 06 | 00 | 0A | 12 | C0 | A5 | 38 |
| address | function code | Pre register
Address high bit | Pre register
Low order address | Insert high data bits | Place data in low position | CRCL | CRCH |
| Return from machine: The returned data is0106000A12C0A538 | |||||||
| 01 | 06 | 00 | 0A | 12 | C0 | A5 | 38 |
| address | function code | Pre register
Address high bit | Pre register
Low order address | Insert high data bits | Place data in low position | CRCL | CRCH |
note3: Error code frame format
Address error code exception code CRCL CRCH
Error code=Function code+0x80
Exception Code=01 or02 or03 or 04
01=Invalid opcode
02=Invalid data address
03=Data anomaly
04=MB Error
note4: CRC Verification method
CRC Generate function
unsigned short CRC16 ( puchMsg, usDataLen ) /* Function to unsigned short Type return CRC */
unsigned char *puchMsg ; /* Used for calculation CRC The message */
unsigned short usDataLen ; /* The number of bytes in the message */
{
unsigned char uchCRCHi = 0xFF ; /* CRC High byte initialization */
unsigned char uchCRCLo = 0xFF ; /* CRC Low byte initialization */
unsigned uIndex ; /* CRC Query table index */
while (usDataLen--) /* Complete the entire message buffer */
{
uIndex = uchCRCLo ^ *puchMsgg++ ; /* Calculation CRC */
uchCRCLo = uchCRCHi ^ auchCRCHi[uIndex} ;
uchCRCHi = auchCRCLo[uIndex] ;
}
return (uchCRCHi << 8 | uchCRCLo) ;
}
High byte table
/* The high-order byteCRC Value */
static unsigned char auchCRCHi[] = {
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81,
0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81,
0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1,
0x81, 0x40, 0x01,
0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01,
0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81,
0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80,
0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01,
0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00,
0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81,
0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1,
0x81, 0x40, 0x01,
0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01,
0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81,
0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
0x40, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01,
0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01,
0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81,
0x40
} ;
Low byte table
/* Low order bytesCRC Value */
static char auchCRCLo[] = {
0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7,
0x05, 0xC5, 0xC4,
0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB,
0x0B, 0xC9, 0x09,
0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE,
0xDF, 0x1F, 0xDD,
0x1D, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2,
0x12, 0x13, 0xD3,
0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32,
0x36, 0xF6, 0xF7,
0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E,
0xFE, 0xFA, 0x3A,
0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B,
0x2A, 0xEA, 0xEE,
0x2E, 0x2F, 0xEF, 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27,
0xE7, 0xE6, 0x26,
0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1,
0x63, 0xA3, 0xA2,
0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD,
0x6D, 0xAF, 0x6F,
0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8,
0xB9, 0x79, 0xBB,
0x7B, 0x7A, 0xBA, 0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4,
0x74, 0x75, 0xB5,
0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0,
0x50, 0x90, 0x91,
0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94,
0x54, 0x9C, 0x5C,
0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59,
0x58, 0x98, 0x88,
0x48, 0x49, 0x89, 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D,
0x4D, 0x4C, 0x8C,
0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83,
0x41, 0x81, 0x80,
0x40
};
Manufacturer information:

400-0858-758
www.hzsongdao.com
Hangzhou Songdao Industrial Co., Ltd
telephone: 0571-85367531 / fax: 0571-85367531
address: Shunfeng Road, Qianjiang Economic Development Zone, Yuhang District, Hangzhou City528number

Leave a Reply