CRC-16/MODBUS 算法:
在CRC計算時只用8個數(shù)據(jù)位,起始位及停止位,如有奇偶校驗位也包括奇偶校驗位,都不參與CRC計算。
CRC計算方法是:
1、 加載一值為0XFFFF的16位寄存器,此寄存器為CRC寄存器。
2、 把第一個8位二進制數(shù)據(jù)(即通訊信息幀的第一個字節(jié))與16位的CRC寄存器的相異或,異或的結(jié)果仍存放于該CRC寄存器中。
3、 把CRC寄存器的內(nèi)容右移一位,用0填補最高位,并檢測移出位是0還是1。
4、 如果移出位為零,則重復第三步(再次右移一位);如果移出位為1,CRC寄存器與0XA001進行異或。
5、 重復步驟3和4,直到右移8次,這樣整個8位數(shù)據(jù)全部進行了處理。
6、 重復步驟2和5,進行通訊信息幀下一個字節(jié)的處理。
7、 將該通訊信息幀所有字節(jié)按上述步驟計算完成后,得到的16位CRC寄存器的高、低字節(jié)進行交換
8、 最后得到的CRC寄存器內(nèi)容即為:CRC校驗碼。
C#代碼:
void ModBusCRC16(ref byte[] cmd, int len)
{
ushort i, j, tmp, CRC16;
CRC16 = 0xFFFF; //CRC寄存器初始值
for (i = 0; i < len; i++)
{
CRC16 ^= cmd[i];
for (j = 0; j < 8; j++)
{
tmp = (ushort)(CRC16 & 0x0001);
CRC16 >>= 1;
if (tmp == 1)
{
CRC16 ^= 0xA001; //異或多項式
}
}
}
cmd[i++] = (byte) (CRC16 & 0x00FF);
cmd[i++] = (byte) ((CRC16 & 0xFF00)>>8);
}
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡助力業(yè)務部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統(tǒng)配攻擊溯源,準確進行流量調(diào)度,確保服務器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務器買多久送多久。
分享題目:CRC-16/MODBUS算法-創(chuàng)新互聯(lián)
URL網(wǎng)址:http://jinyejixie.com/article0/dipiio.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護、電子商務、自適應網(wǎng)站、網(wǎng)站營銷、用戶體驗、網(wǎng)站設計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容