plc學(xué)者
級(jí)別: 略有小成
精華主題: 0
發(fā)帖數(shù)量: 190 個(gè)
工控威望: 362 點(diǎn)
下載積分: 3391 分
在線時(shí)間: 377(小時(shí))
注冊(cè)時(shí)間: 2011-07-18
最后登錄: 2024-12-18
查看plc學(xué)者的 主題 / 回貼
樓主  發(fā)表于: 2012-02-14 21:47
MODBUS通訊協(xié)議RTU模式中的CRC效驗(yàn)是怎么算的,哪位大哥能給解析一下,不勝感激。
xcgksp
級(jí)別: 略有小成
精華主題: 0
發(fā)帖數(shù)量: 131 個(gè)
工控威望: 257 點(diǎn)
下載積分: 696 分
在線時(shí)間: 49(小時(shí))
注冊(cè)時(shí)間: 2011-11-12
最后登錄: 2024-08-07
查看xcgksp的 主題 / 回貼
1樓  發(fā)表于: 2012-02-15 16:51
       MODBUS協(xié)議CR-16碼的算法傳輸格式的最后兩字節(jié)為CRC碼,高位在后,低位在前其余為信息,高位在前,低位在后。例子,傳輸信息為0x0106000503E89975,(0x表示為十六進(jìn)制)則CRC = 0x7599.,初始信息為:0x0106000503E8 傳輸信息中的CRC碼(0x7599)是如何算出來的?
一般算法:
1. 將CRC賦值0xFFFF。
2. 取初始信息的第一個(gè)字節(jié)(8位)與CRC(0xFFFF)進(jìn)行異或運(yùn)算,將結(jié)果賦給CRC。
3. 將CRC數(shù)據(jù)右移一位,最前位(左邊)補(bǔ)0。
4. 如果右移前,CRC最低位(最右端)為1,則將右移后的CRC與0xA001進(jìn)行異或運(yùn)算,且將結(jié)果賦給CRC。否則,跳過此步。
5. 重復(fù)3,4步8次(即右邊8位)。
6. 對(duì)初始信息的下一個(gè)字節(jié),同樣執(zhí)行2,3,4,5步,直到信息中所有字節(jié)都執(zhí)行了同樣的步驟。
7. 將此時(shí)得到的CRC值的高8位和低8位交換,加在初始信息末尾即得到完整的傳輸信息。  
例子初始信息為:0x0106000503E8 初始CRC:0xFFFF
本帖最近評(píng)分記錄:
  • 下載積分:+3(plc學(xué)者) 非常感謝