看看寫的modbus CRC校驗子程序
劉玉蓉
發(fā)布于2014-12-02 17:26
611
0
標簽:
誰能理解這段子程序啊,解釋一下。
CRC校驗算法是什么
圖片說明: 1,1
佳答案
我找了一段話希望對你有幫助如下:
在RTU 模式包含一個對全部報文內(nèi)容執(zhí)行的,基于循環(huán)冗余校驗 (CRC - Cyclical Redundancy Checking) 算法的錯誤檢驗域。CRC 域檢驗整個報文的內(nèi)容。不管報文有無奇偶校驗,均執(zhí)行此檢驗。
CRC 包含由兩個8位字節(jié)組成的一個16位值。
CRC 域作為報文的后的域附加在報文之后。計算后,首先附加低字節(jié),然后是高字節(jié)。CRC 高字節(jié)為報文發(fā)送的后一個字節(jié)。
附加在報文后面的CRC 的值由發(fā)送設備計算。接收設備在接收報文時重新計算 CRC 的值,并將計算結(jié)果于實際接收到的CRC 值相比較。如果兩個值不相等,則為錯誤。
CRC 的計算, 開始對一個16位寄存器預裝全1。 然后將報文中的連續(xù)的8位字節(jié)對其進行后續(xù)的計算。只有字符中的8個數(shù)據(jù)位參與生成CRC 的運算,起始位,停止位和校驗位不參與 CRC 計算。
CRC 的生成過程中, 每個 8–位字符與寄存器中的值異或。然后結(jié)果向低有效位(LSB)方向移動(Shift) 1位,而高有效位(MSB)位置充零。 然后提取并檢查 LSB:如果LSB 為1, 則寄存器中的值與一個固定的預置值異或;如果LSB 為 0, 則不進行異或操作。
這個過程將重復直到執(zhí)行完8次移位。完成后一次(第8次)移位及相關操作后,下一個8位字節(jié)與寄存器的當前值異或,然后又同上面描述過的一樣重復8次。當所有報文中字節(jié)都運算之后得到的寄存器中的終值,就是CRC。
上面這段話就是對你貼圖的程序的解釋,好好研究下。