稱重儀表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
}
稱重儀表modbus協議