Reference
The article breaks down communication protocols, highlighting RS485 and Modbus-RTU, and offers examples for reading and setting sensor values, aiding in practical understanding of sensor networking.
Communication Protocol Description
1. Basic communication parameters
| Interface | Encoding | Data bits | Parity bits | Stop bits | Error checking | Baud rate |
|---|---|---|---|---|---|---|
| RS485 | 8-bit binary | 8 | None | 1 | CRC | 1200bit/s,2400bit/s, 4800bit/s, 9600bit/s, 19200bit/s, 38400bit/s, 57600bit/s, 115200bit/s configurable, default 4800bit/s |
2. Data frame format definition
Using Modbus-RTU communication protocol, the format is as follows:
Initial structure ≥4 bytes of time
Address code = 1 byte
Function code = 1 byte
Data area = N bytes
Error check = 16-bit CRC code
End structure ≥4 bytes of time
Address code: The address of the sensor, which is unique in the communication network (factory default 0x01).
Function code: The function indication of the command sent by the host. This sensor reads the register function code 0x03/0x04 and writes the register function code 0x06/0x10
Data area: The data area is the specific communication data. Note that the high byte of 16-bit data is in front!
CRC code: A two-byte check code.
Register address
| Register Address | Content | Supported Function Codes | Definition Description |
|---|---|---|---|
| 0000H | Chlorophyll Value | 0x03/0x04 | μg/L; 16-bit unsigned integer, 10 times the actual value |
| 0001H | Temperature | 0x03/0x04 | °C; 16-bit signed integer, 10 times the actual value |
| 0003H | Fluorescence Intensity Value | 0x03/0x04 | RFU; 16-bit unsigned integer, 10 times the actual value |
| 0050H | Chlorophyll Deviation Value | 0x03/0x04/0x06/0x10 | 16-bit signed integer, 10 times the actual value |
| 0051H | Temperature Deviation Value | 0x03/0x04/0x06/0x10 | 16-bit signed integer, 10 times the actual value |
| 0060H | Chlorophyll Slope | 0x03/0x04/0x06/0x10 | 16-bit signed integer, 100 times the actual value |
| 07D0H | Device Address | 0x03/0x04/0x06/0x10 | 1~254 (16-bit unsigned integer, factory default 1) |
| 07D1H | Device Baud Rate | 0x03/0x04/0x06/0x10 | 0 represents 2400, 1 represents 4800, 2 represents 9600, 3 represents 19200, 4 represents 38400, 5 represents 57600, 6 represents 115200, 7 represents 1200 |
3. Communication Protocol Examples and Explanation
3.1 Reading Chlorophyll Values and Temperature
Query Frame:
| Address Code | Function Code | Register Address | Register Length | Checksum Low Byte | Checksum High Byte |
|---|---|---|---|---|---|
| 0x01 | 0x03 | 0x00 0x00 | 0x00 0x02 | 0xC4 | 0x0B |
Response Frame:
| Address Code | Function Code | Number of Valid Bytes | Register Content | Checksum Low Byte | Checksum High Byte |
|---|---|---|---|---|---|
| 0x01 | 0x03 | 0x04 | 0x0D 0x2E 0x00 0xDB | 0xD8 | 0xCD |
Chlorophyll Calculation: 0D2EH=3374 => Chlorophyll content is 3374/10=337.4μg/L
Temperature Calculation: 00DBH=219=>Temperature is 219/10=21.9℃
3.2, Setting Deviation Value for Current Chlorophyll Value for Numerical Correction
Query Frame: If the current sensor output chlorophyll value is 1010, to correct the value to 1000, the difference is 1000-1010=-10, multiplied by 10 to -100=>FF9C. Calculation method: FFFF-0064+1=FF9C, register content is written as FF 9C
| Address Code | Function Code | Registry Address | Registry Content | Check Digit Low Bit | Check Digit High Bit |
|---|---|---|---|---|---|
| 0x01 | 0x06 | 0x00 0x50 | 0xFF 0x9C | 0xC8 | 0x42 |
Response Frame:
| Address Code | Function Code | Register Address | Register Content | Checksum Low Byte | Checksum High Byte |
|---|---|---|---|---|---|
| 0x01 | 0x06 | 0x00 0x50 | 0xFF 0x9C | 0xC8 | 0x42 |
3.3 Setting the Chlorophyll Concentration Slope
Output Data Value = (Actual Data - Deviation Value) * Slope
If measuring a 100μg/L standard solution, and the measured value after setting the deviation value is 125.0μg/L, then write the value into register 0x0060. 100/125 = 0.80. Multiplying this by 100, the written value is 80, which is 0x0050 in hexadecimal.
Query Frame:
| Address Code | Function Code | Registry Address | Registry Content | Checksum Low Byte | Checksum High Byte |
|---|---|---|---|---|---|
| 0x01 | 0x06 | 0x00 0x60 | 0x00 0x50 | 0x89 | 0xE8 |
Response Frame:
| Address Code | Function Code | Registry Address | Registry Content | Checksum Low Byte | Checksum High Byte |
|---|---|---|---|---|---|
| 0x01 | 0x06 | 0x00 0x60 | 0x00 0x50 | 0x89 | 0xE8 |
3.4, Change the current address to 0x02
Query Frame:
| Address Code | Function Code | Registry Address | Registry Content | Checksum Low Byte | Checksum High Byte |
|---|---|---|---|---|---|
| 0x01 | 0x06 | 0x07 0xD0 | 0x00 0x02 | 0x08 | 0x86 |
Response Frame:
| Address Code | Function Code | Registry Address | Registry Content | Checksum Low Byte | Checksum High Byte |
|---|---|---|---|---|---|
| 0x01 | 0x06 | 0x07 0xD0 | 0x00 0x02 | 0x08 | 0x86 |
3.5, Modify the current baud rate to 9600
Query Frame:
| Address Code | Function Code | Registry Address | Registry Content | Checksum Low Byte | Checksum High Byte |
|---|---|---|---|---|---|
| 0x01 | 0x06 | 0x07 0xD1 | 0x00 0x02 | 0x59 | 0x46 |
Response Frame:
| Address Code | Function Code | Registry Address | Registry Content | Checksum Low Byte | Checksum High Byte |
|---|---|---|---|---|---|
| 0x01 | 0x06 | 0x07 0xD1 | 0x00 0x02 | 0x59 | 0x46 |
Was this article helpful?
