Reference

This article delves into the intricacies of the Modbus-RTU communication protocol used with RS485 interfaces, detailing data formats, register addresses, and practical examples for sensor reading and calibration. It includes comprehensive instructions on modifying device addresses and baud rates, making it an essential guide for efficient communication setup.

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 PLC Address Content Supported Function Codes Definition Description
0000H 40001 pH value 0x03/0x04 16-bit unsigned integer, 100 times the actual value
0001H 40002 Temperature 0x03/0x04 °C; 16-bit signed integer, 10 times the actual value
0050H 40081 pH deviation value 0x03/0x04/0x06 16-bit signed integer, 100 times the actual value
0051H 40082 Temperature deviation value 0x03/0x04/0x06 16-bit signed integer, 10 times the actual value
0060H 40097 Manual temperature compensation 0x03/0x04/0x06 Manual compensation (1: Yes, 0: No); 16-bit signed integer, 10 times the actual value
0061H 40098 Manual temperature compensation 0x03/0x04/0x06 Manual temperature compensation; 16-bit unsigned integer, 10 times the actual value
0120H, 0121H 40289, 40290 Electrode calibration 0x10 Calibration is performed by writing parameters to registers 0x0120 and 0x0121 via function code 0x10
07D0H 42001 Device address 0x03/0x04/0x06/0x10 1~254 (16-bit unsigned integer, factory default 1)
07D1H 42002 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 Current pH Value 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 0x03 0x16 0x01 0x09 0xB8 0xBE

PH Calculation: 0316H=790 =>PH=7.90
Temperature Calculation: 0109H=265=>Temperature=26.5℃

3.2, Set Deviation Value for Current PH Value and Perform Numerical Correction

Query Frame: If the current device outputs PH of 7.90, and the value needs to be corrected to 8.00, the difference is 8.00-7.90=0.10, multiplied by 100 to 10=>0x0A), register content is written as 00 0A)

Address Code Function Code Registry Address Registry Content Check Digit Low Bit Check Digit High Bit
0x01 0x06 0x00 0x50 0x00 0x0A 0x09 0xDC

Response Frame:

Address Code Function Code Register Address Register Content Checksum Low Byte Checksum High Byte
0x01 0x06 0x00 0x50 0x00 0x0A 0x09 0xDC

3.3 Register Calibration of Electrodes

If electrode calibration is required, parameters can be written to registers 0x0120 and 0x0121 using function code 0x10. This device uses two-point calibration and requires two known pH standard solutions. During the first calibration, write 0x0001 to register 0x0120 and 100 times the standard pH value of the first point to register 0x0121. During the second calibration, write 0x0002 to register 0x0120 and 100 times the standard pH value of the second point to register 0x0121. Calibration complete.

Query frame:
Select a pH standard solution of 4.01 to calibrate the first point. 4.01 * 100 = 401 = 0191H

Address Code Function Code Register Address Register Length Byte Length Register Content Checksum Low Byte Checksum High Byte
0x01 0x10 0x01 0x20 0x00 0x02 0x04 0x00 0x01 0x01 0x91 0x6D 0xDB

Response Frame:

Address Code Function Code Register Address Register Length Checksum Low Byte Checksum High Byte
0x01 0x10 0x01 0x20 0x00 0x02 0x41 0xFE

Query frame:
Select a pH standard solution of 9.18 to calibrate the second point. 9.18 * 100 = 918 = 0396H

Address Code Function Code Register Address Register Length Byte Length Register Content Checksum Low Byte Checksum High Byte
0x01 0x10 0x01 0x20 0x00 0x02 0x04 0x00 0x02 0x03 0x96 0xDD 0x79

Response Frame:

Address Code Function Code Register Address Register Length Checksum Low Byte Checksum High Byte
0x01 0x10 0x01 0x20 0x00 0x02 0x41 0xFE

3.4, Modify the current address to 0x02

Query Frame:

Address Code Function Code Register Address Register Content Checksum Low Byte Checksum High Byte
0x01 0x06 0x07 0xD0 0x00 0x02 0x08 0x86

Response Frame:

Address Code Function Code Register Address Register 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