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 |
注意:传感器编号n从1开始
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
}