Reference

This article delves into the Modbus-RTU communication protocol, offering insights into basic parameters, data frame formats, and register addresses, along with practical examples for reading sensor data, setting deviation values, calibrating turbidity, and modifying communication settings.

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 Turbidity Value 0x03/0x04 NTU; 16-bit unsigned integer, 10 times the actual value
0001H Temperature 0x03/0x04 °C; 16-bit signed integer, 10 times the actual value
0050H Turbidity Deviation Value 0x03/0x04/0x06/0x10 16-bit unsigned integer, 10 times the actual value
0051H Temperature Deviation Value 0x03/0x04/0x06/0x10 16-bit signed integer, 10 times the actual value
1010H, 1011H Turbidity Calibration 0x10 Uses 2-point calibration. Write 0x0001 to 0x1010 and 0x0000 to 0x1011 to calibrate the zero point; write 0x0002 to 0x1010 and 0x0001 to 0x1011 to calibrate the full-scale point.
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 Turbidity and Temperature

Query Frame:

Address Code Function Code Registry Address Registry 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 Registry Content Checksum Low Byte Checksum High Byte
0x01 0x03 0x04 0x0D 0x2E 0x00 0xDB 0xD8 0xCD

Turbidity Calculation: 0D2EH=3374 => Turbidity=337.4NTU
Temperature Calculation: 00DBH=219=>Temperature=21.9℃

3.2, Set Deviation Value for Current Turbidity Value for Numerical Correction

Query Frame: If the current sensor output turbidity value is 1010, to correct the value to 1000, the difference is 1000-1010=-10, multiplied by 10 to -100=>FF9CH, calculation method: FFFF-0064+1=FF9C, register content is written as 0xFF9C.

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 Registry Address Registry Content Checksum Low Byte Checksum High Byte
0x01 0x06 0x00 0x50 0xFF 0x9C 0xC8 0x42

3.3 Turbidity Calibration

Query Frame: After the sensor stabilizes in a 0 turbidity environment, write 0x0001 to register 0x1010 and 0x0000 to register 0x1011.

Address Code Function Code Registry Address Registry Length Byte Length Registry Content Checksum Low Byte Checksum High Byte
0x01 0x10 0x10 0x10 0x00 0x02 0x04 0x00 0x01 0x00 0x00 0x6E 0xA3

Response Frame:

Address Code Function Code Registry Address Registry Length Checksum Low Byte Checksum High Byte
0x01 0x10 0x10 0x10 0x00 0x02 0x44 0xCD

Query Frame: When calibrating the full-scale point, a standard turbidity solution of 1000 NTU should be selected. Write 0x0002 to 0x1010 and 0x0001 to 0x1011.

Address Code Function Code Register Address Register Length Byte Length Register Content Checksum Low Byte Checksum High Byte
0x01 0x10 0x10 0x10 0x00 0x02 0x04 0x00 0x02 0x00 0x01 0x5F 0x63

Response Frame:

Address Code Function Code Register Address Register Length Checksum Low Byte Checksum High Byte
0x01 0x10 0x10 0x10 0x00 0x02 0x44 0xCD

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?

TOP