版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、CRC的生成循環(huán)冗余校驗(yàn)口域?yàn)閮蓚€(gè)字節(jié),包含一個(gè)二進(jìn)制16位值。附加在報(bào)文后面 的CRC的值由發(fā)送設(shè)備計(jì)算。接收設(shè)備在接收報(bào)文時(shí)重新計(jì)算CRC的值,并將計(jì)算 結(jié)果于實(shí)際接收到的CRC值相比較。如果兩個(gè)值不相等,則為錯(cuò)誤。CRC的計(jì)算,開始對一個(gè)16位寄存器預(yù)裝全1.然后將報(bào)文中的連續(xù)的8位子節(jié) 對其進(jìn)行后續(xù)的計(jì)算。只有字符中的8個(gè)數(shù)據(jù)位參與生成CRC的運(yùn)算,起始位,停 止位和校驗(yàn)位不參與口計(jì)算。CRC的生成過程中,每個(gè)8 -位字符與寄存器中的值異或。然后結(jié)果向最低有 效位化58)方向移動(dòng)6川代)1位,而最高有效位W58)位置充零。然后提取并檢查 LSB:如果LSB為1,則寄存器中的值與一個(gè)固定
2、的預(yù)置值異或;如果LSB為0,則 不進(jìn)行異或操作。這個(gè)過程將重復(fù)直到執(zhí)行完8次移位。完成最后一次(第8次)移位及相關(guān)操 作后,下一個(gè)8位字節(jié)與寄存器的當(dāng)前值異或,然后又同上面描述過的一樣重復(fù)8次。 當(dāng)所有報(bào)文中子節(jié)都運(yùn)算之后得到的寄存器中的最終值,就是口.生成CRC的過程為:.將一個(gè)16位寄存器裝入十六進(jìn)制FFFF (全1).將之稱作口寄存器.將報(bào)文的第一個(gè)8位字節(jié)與16 (點(diǎn)CRC寄存器的低字節(jié)異或,結(jié)果置于CRC寄存 器.將CRC寄存器右移1位(向LSB方向),MSB充零.提取并檢測LSB.(如果LSB為0):重復(fù)步驟3 (另一次移位).(如果LSB為1):對CRC寄存器異或多項(xiàng) 式值 0
3、XA001 (1010 0000 0000 0001).可修編.重復(fù)步驟3和4,直到完成8次移位。當(dāng)做完此操作后,將完成對8位字節(jié)的完 整操作。.對報(bào)文中的下一個(gè)字節(jié)重復(fù)步驟2到5,繼續(xù)此操作直至所有報(bào)文被處理完畢。. CRC寄存器中的最終容為制值.當(dāng)放置CRC值于報(bào)文時(shí),如下面描述的那樣,高低字節(jié)必須交換。MODBUS協(xié)議的口校驗(yàn)子程序代碼為方便讀者使用乂0口8兆協(xié)議,將VC、VB、ASM51環(huán)境下MODBUS協(xié)議的口校 驗(yàn)子程序代碼一并給出,供讀者參考。/*CRC Calculation for MODBUS Protocol for VC *數(shù)組5代為地址等傳輸字節(jié),num為字節(jié)數(shù),發(fā)為
4、6收為5unsigned int mb_crc(BYTE *snd,int num)(int i,j;unsigned int c,crc=0 xFFFFfor (i=0;inum;i )(c=sndi & 0 x00FF;crcFfor(j=0,j=1;crd=0 xA001;)elsecrc=1)return(crc);)unsigned short int CrcCheck(const unsigned char * buffer, const int buffLen)(unsigned short int crcValue = 0;if (!buffer | buffLen 0)(re
5、turn crcValue;)int CRCHi = 0 x0, 0 xC1,0 x81,0 x40, 0 x1,0 xC0, 0 x80, 0 x41,0 x1,0 xC0, 0 x80, 0 x41,0 x0,可修編0 xC1,0 x81,0 x40, 0 x1,0 xC0, 0 x80, 0 x41,0 x0, 0 xC1,0 x81,0 x40, 0 x0, 0 xC1, 0 x81,0 x40, 0 x1,0 xC0, 0 x80, 0 x41,0 x1,0 xC0, 0 x80, 0 x41,0 x0, 0 xC1,0 x81, 0 x40, 0 x0, 0 xC1,0 x81,0
6、 x40, 0 x1,0 xC0, 0 x80, 0 x41,0 x0, 0 xC1,0 x81,0 x40, 0 x1,0 xC0, 0 x80, 0 x41,0 x1,0 xC0, 0 x80, 0 x41,0 x0, 0 xC1,0 x81,0 x40, 0 x1, 0 xC0, 0 x80, 0 x41,0 x0, 0 xC1,0 x81,0 x40, 0 x0, 0 xC1,0 x81,0 x40, 0 x1,0 xC0, 0 x80, 0 x41,0 x0, 0 xC1,0 x81,0 x40, 0 x1,0 xC0, 0 x80, 0 x41,0 x1,0 xC0, 0 x80,
7、 0 x41,0 x0, 0 xC1,0 x81,0 x40, 0 x0, 0 xC1,0 x81,0 x40, 0 x1,0 xC0, 0 x80, 0 x41, 0 x1,0 xC0, 0 x80, 0 x41,0 x0, 0 xC1,0 x81,0 x40, 0 x1,0 xC0, 0 x80, 0 x41,0 x0, 0 xC1,0 x81,0 x40, 0 x0, 0 xC1,0 x81,0 x40, 0 x1,0 xC0, 0 x80, 0 x41,0 x1,0 xC0, 0 x80, 0 x41,0 x0, 0 xC1,0 x81,0 x40, 0 x0, 0 xC1,0 x81
8、,0 x40, 0 x1,0 xC0, 0 x80, 0 x41,0 x0, 0 xC1,0 x81,0 x40, 0 x1,0 xC0, 0 x80, 0 x41,0 x1,0 xC0, 0 x80, 0 x41, 0 x0, 0 xC1,0 x81,0 x40, 0 x0, 0 xC1,0 x81,0 x40, 0 x1,0 xC0, 0 x80, 0 x41,0 x1, 0 xC0, 0 x80, 0 x41,0 x0, 0 xC1,0 x81,0 x40, 0 x1,0 xC0, 0 x80, 0 x41,0 x0, 0 xC1, 0 x81,0 x40, 0 x0, 0 xC1,0
9、x81,0 x40, 0 x1,0 xC0, 0 x80, 0 x41,0 x0, 0 xC1,0 x81, 0 x40, 0 x1,0 xC0, 0 x80, 0 x41,0 x1,0 xC0, 0 x80, 0 x41,0 x0, 0 xC1,0 x81,0 x40, 0 x1,0 xC0, 0 x80, 0 x41,0 x0, 0 xC1,0 x81,0 x40, 0 x0, 0 xC1,0 x81,0 x40, 0 x1, 0 xC0, 0 x80, 0 x41,0 x1,0 xC0, 0 x80, 0 x41,0 x0, 0 xC1,0 x81,0 x40, 0 x0, 0 xC1,
10、 0 x81,0 x40, 0 x1,0 xC0, 0 x80, 0 x41,0 x0, 0 xC1,0 x81,0 x40, 0 x1,0 xC0, 0 x80, 0 x41,0 x1,0 xC0, 0 x80, 0 x41,0 x0, 0 xC1,0 x81,0 x40);int CRCLo = 可修編0 x0, 0 xC0, 0 xC1,0 x1,0 xC3, 0 x3, 0 x2, 0 xC2, 0 xC6, 0 x6, 0 x7, 0 xC7, 0 x5, 0 xC5, 0 xC4, 0 x4, 0 xCC, 0 xC, 0 xD, 0 xCD, 0 xF, 0 xCF, 0 xCE
11、, 0 xE, 0 xA, 0 xCA, 0 xCB, 0 xB, 0 xC9, 0 x9, 0 x8, 0 xC8, 0 xD8, 0 x18, 0 x19, 0 xD9, 0 x1B, 0 xDB, 0 xDA, 0 x1A, 0 x1E, 0 xDE, 0 xDF, 0 x1F, 0 xDD, 0 x1D, 0 x1C, 0 xDC, 0 x14, 0 xD4, 0 xD5, 0 x15, 0 xD7, 0 x17, 0 x16, 0 xD6, 0 xD2, 0 x12, 0 x13, 0 xD3, 0 x11, 0 xD1,0 xD0, 0 x10, 0 xF0, 0 x30, 0 x
12、31,0 xF1,0 x33, 0 xF3, 0 xF2, 0 x32, 0 x36, 0 xF6, 0 xF7, 0 x37, 0 xF5, 0 x35, 0 x34, 0 xF4, 0 x3C, 0 xFC, 0 xFD, 0 x3D, 0 xFF, 0 x3F, 0 x3E, 0 xFE, 0 xFA, 0 x3A, 0 x3B, 0 xFB, 0 x39, 0 xF9, 0 xF8, 0 x38, 0 x28, 0 xE8, 0 xE9, 0 x29, 0 xEB, 0 x2B, 0 x2A, 0 xEA, 0 xEE, 0 x2E, 0 x2F, 0 xEF, 0 x2D, 0 xE
13、D, 0 xEC, 0 x2C, 0 xE4, 0 x24, 0 x25, 0 xE5, 0 x27, 0 xE7, 0 xE6, 0 x26, 0 x22, 0 xE2, 0 xE3, 0 x23, 0 xE1,0 x21,0 x20, 0 xE0, 0 xA0, 0 x60, 0 x61,0 xA1,0 x63, 0 xA3, 0 xA2, 0 x62, 0 x66, 0 xA6, 0 xA7, 0 x67, 0 xA5, 0 x65, 0 x64, 0 xA4, 0 x6C, 0 xAC, 0 xAD, 0 x6D, 0 xAF, 0 x6F, 0 x6E, 0 xAE, 0 xAA,
14、0 x6A, 0 x6B, 0 xAB, 0 x69, 0 xA9, 0 xA8, 0 x68, 0 x78, 0 xB8, 0 xB9, 0 x79, 0 xBB, 0 x7B, 0 x7A, 0 xBA, 0 xBE, 0 x7E, 0 x7F, 0 xBF, 0 x7D, 0 xBD, 0 xBC, 0 x7C, 0 xB4, 0 x74, 0 x75, 0 xB5, 0 x77, 0 xB7, 0 xB6, 0 x76, 0 x72, 0 xB2, 0 xB3, 0 x73, 0 xB1,0 x71,0 x70, 0 xB0, 0 x50, 0 x90, 0 x91,0 x51,0 x
15、93, 0 x53, 0 x52, 0 x92, 0 x96, 0 x56, 0 x57, 0 x97, 0 x55, 0 x95, 0 x94, 0 x54, 0 x9C, 0 x5C, 0 x5D, 0 x9D, 0 x5F, 0 x9F, 0 x9E, 0 x5E, 0 x5A, 0 x9A, 0 x9B, 0 x5B, 0 x99, 0 x59, 0 x58, 0 x98, 0 x88, 0 x48, 0 x49, 0 x89, 0 x4B, 0 x8B, 0 x8A, 0 x4A, 0 x4E, 0 x8E, 0 x8F, 0 x4F, 0 x8D, 0 x4D, 0 x4C, 0
16、x8C, 0 x44, 0 x84, 0 x85, 0 x45, 0 x87, 0 x47, 0 x46, 0 x86, 0 x82, 0 x42, 0 x43, 0 x83, 0 x41,0 x81,0 x80, 0 x40可修編);int i, m;int dCRCHi = 0 xFF;int dCRCLo = 0 xFF;for (i = 0; i buffLen; i+)(m = dCRCLo 八 bufferi;dCRCLo = dCRCHi 八 CRCHim;dCRCHi = CRCLom;)crcValue = dCRCLo + (dCRCHi 8);return crcValu
17、e;)|/*CRC Calculation for MODBUS Protocol for VB*Function mb_crc(ByRef snd() as BYTE,num as integer) as Longcrc_l=crc_h=&HFF可修編for i=1 to num crc_l=crc_l XOR snd(i) forj=1 to 8 if crc_l AND 1 then crc_l=(crc_l -1)/2 if crc_h and 1 then crc_l=crc_l 128 crc_h=(crc_h -1)/2 end ifcrc_l=crc_l XOR &HA0 cr
18、c_h=crc_h XOR &H01 else: crc_l=crc_l/2 if crc_h and 1 then crcl_l=crc_l 128 crc_h=(crc_h -1)/2 else: crc_h=crc_h/2 end if end if next j next imb_crc=crc_l crc_h*256 End Function可修編;CRC Calculation for MODBUS Protocol for ASM51;R1為發(fā)送(接收)字節(jié)的緩存首地址;R2為發(fā)送(接收)字節(jié)的字節(jié)數(shù)(不含制字節(jié)),;R3為制校驗(yàn)低位字節(jié),;R4為制校驗(yàn)高位字節(jié),CRC: MOV
19、 A,#0FFHMOV R4,AMOV R3,ACRC1: MOV A,R1XRL A,R3MOV R3,AMOV R2,#08HCRC8: CLR CMOV A,R4RRC AMOV R4,AMOV A,R3RRC AMOV R3,AJNC CRC10MOV A,R3可修編XRL A,#01HMOV R3,AMOV A,R4XRL A,#0A0HMOV R4,ACRC10: DJNZ R2,CRC8INC R1DJNZ CRC1RETLRC的生成縱向冗余校驗(yàn)(LRC)為一個(gè)字節(jié),含有8位二進(jìn)制值。LRC由發(fā)送設(shè)備計(jì)算,并附加LRC到報(bào)文。接收設(shè)備在接收文時(shí)計(jì)算LRC,并將計(jì)算的結(jié)果與在1口接收到的實(shí) 際值相比較,如果兩個(gè)值不相等,則結(jié)果為錯(cuò)。LRC的計(jì)算,對報(bào)文中的所有的連續(xù)8位字節(jié)相加,忽略任何進(jìn)位,然后求出其二 進(jìn)制補(bǔ)碼。LRC為一個(gè)8位域,那么每個(gè)會(huì)導(dǎo)致值大于255新的相加只是簡單的將域的值在零” 回繞”。因?yàn)闆]有第9位,進(jìn)位被自動(dòng)放棄。生成一個(gè)LRC的過程為:.不包括起始“冒號(hào)”和結(jié)束CRLF的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026浙江臺(tái)州椒江區(qū)第三中心幼兒園總園及分園教師招聘參考考試試題及答案解析
- 2026年黔西南民族職業(yè)技術(shù)學(xué)院單招綜合素質(zhì)考試備考題庫含詳細(xì)答案解析
- 2026中國鐵塔股份有限公司浙江省分公司招聘4人參考考試題庫及答案解析
- 2026年石家莊城市經(jīng)濟(jì)職業(yè)學(xué)院單招綜合素質(zhì)筆試備考題庫含詳細(xì)答案解析
- 2026年長江職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測試模擬試題及答案詳細(xì)解析
- 2026年江西服裝學(xué)院單招職業(yè)技能考試參考題庫含詳細(xì)答案解析
- 2026貴州銅仁市石阡縣事業(yè)單位招聘118人參考考試試題及答案解析
- 2026貴州省市場監(jiān)督管理局所屬事業(yè)單位招聘23人考試參考試題及答案解析
- 2026年湖南交通職業(yè)技術(shù)學(xué)院單招綜合素質(zhì)考試模擬試題含詳細(xì)答案解析
- 2026年廣東水利電力職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試模擬試題及答案詳細(xì)解析
- 2025北京西城區(qū)初一(下)期末英語試題及答案
- 2026.01.01施行的《招標(biāo)人主體責(zé)任履行指引》
- DB11∕T 689-2025 既有建筑抗震加固技術(shù)規(guī)程
- 2025年湖南公務(wù)員《行政職業(yè)能力測驗(yàn)》試題及答案
- 2026屆高考化學(xué)沖刺復(fù)習(xí)化學(xué)綜合實(shí)驗(yàn)熱點(diǎn)題型
- 電纜接駁施工方案(3篇)
- 提前招生面試制勝技巧
- 普通外科患者靜脈血栓栓塞癥風(fēng)險(xiǎn)評估與預(yù)防護(hù)理
- PVC地膠施工合同
- 聲樂教學(xué)與藝術(shù)指導(dǎo)的有效結(jié)合淺析
- 對標(biāo)學(xué)習(xí)華為EMT機(jī)制
評論
0/150
提交評論