称重仪表modbus协议

D2008仪表Modbus协议说明:

仪表通信方式TF =1 Modbus通信方式

 

读传感器内码

0

1

2

3

4

5

6

7

地址

功能码


传感器号n



CRC16L

CRC16H

0x01

0x03

0x00

0x10+1

0x00

0x04

0x14

0x0C

注意:传感器编号n1开始

CRC校验参与的字节是0~5之间的数节,返回值也是亦同。

 

返回值:

0

1

2

3

4

5

6

7

8

地址

0x03

0x08

符号+/-

Data5

Data4

Data3

Data2

Data1

1

0x03

0x08

0x30

0x30

0x30

0x30

0x30

0x30

9

10

11

12

Data0

小数点(从右往左)

CRC16L

CRC16H

0x38

0x30

0xff

0xff

 

 

读取实时重量

0

1

2

3

4

5

6

7

地址

功能码

起始地址



CRC16L

CRC16H

0x01

0x03

0x00

0x01

0x00

0x04

0x15

0xC9


返回值:

0

1

2

3

4

5

6

7

8

地址

0x03

0x08

符号+/-

Data5

Data4

Data3

Data2

Data1

1

0x03

0x08

0x2D

0x30

0x30

0x30

0x30

0x37

9

10

11

12

Data0

小数点(从右往左)

CRC16L

CRC16H

0x30

0x30

0x89

0x7B

 

读当前仪表总内码

0

1

2

3

4

5

6

7

仪表地址

功能码

寄存器开始地址

数据量

CRC16L

CRC16H

0x01

0x03

0x00

0x07

0x00

0x02

0x75

0xCA

 

0

1

2

3

4

5

6

7

8

仪表地址

功能码

数据长度

返回数据

CRC16L

CRC16H

0x01

0x03

0x04

0x30

0x30

0x30

0x30

0xE1

0x28

返回值:

Modbus浮点数转换

float get_float_from_byte(byte *p)

{

byte  pTemp[4] = { 0 };

 

pTemp[0] = p[1];

pTemp[1] = p[0];

pTemp[2] = p[3];

pTemp[3] = p[2];

 

return *(float*)&pTemp;

}

void CMFCApplication1Dlg::OnBnClickedButton3()

{//调用转换函数

byte pp[4] = { 0 };

pp[0] = 0xb2;

pp[1] = 0x2d;

pp[2] = 0x3f;

pp[3] = 0x5d;

float mf1 = get_float_from_byte(pp);    // mf1 = 220.0          

}


猜你喜欢

转载自blog.51cto.com/9233403/2121339