ModbusRtu3-16號通信協(xié)議解釋_第1頁
ModbusRtu3-16號通信協(xié)議解釋_第2頁
ModbusRtu3-16號通信協(xié)議解釋_第3頁
ModbusRtu3-16號通信協(xié)議解釋_第4頁
ModbusRtu3-16號通信協(xié)議解釋_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、modbus rtu通信協(xié)議(3,16號命令)1、讀取保持寄存器(單個和多個,以字為最小單位) 發(fā)送命令幀:設(shè)備地址功能碼地址h地址l數(shù)據(jù)量h數(shù)據(jù)量lcrchcrcladdro3 hholdstartdatanumcrc高位crc低位幀長度:8個字節(jié)設(shè)備地址:1247功能碼:3h數(shù)據(jù)地址:065535 具體范圍與相關(guān)設(shè)備有關(guān) 數(shù) 量:165535 具體范圍與相關(guān)設(shè)備有關(guān) 校驗碼:crc16校驗返回命令幀:設(shè)備地址功能碼數(shù)據(jù)量數(shù)據(jù)1數(shù)據(jù)ncrchcrcladdrl3h返回數(shù)據(jù)的字節(jié)數(shù)ndata (1 n)crc高位crc低位幀長度:5+n個字節(jié)設(shè)備地址:1247功能碼:3h數(shù)據(jù)量:實際的讀取數(shù)據(jù)

2、數(shù)量數(shù) 據(jù):返回數(shù)據(jù)的意義a=holdstart n= datanum 1vwa (vba)vwa (vb a+1) vw a+n (vb a+n)vwa+n (vb a+n+1)data (1)data(2) data(n-l)data(n)校驗碼:crc16校驗命令有謀:1)沒有任何返冋2)返回異議幀設(shè)備地址功能碼錯誤信息crchcrcladdrl83 h一個字節(jié)的錯謀信息crc高位crc低位2、設(shè)置保持寄存器(多個,以字為最小單位) 發(fā)送命令幀:設(shè)備地址功能碼地址h地址l數(shù)據(jù)量h數(shù)據(jù)量l數(shù)據(jù)字節(jié)數(shù)具體數(shù)據(jù)crchcrcladdro10hholdstartdatanumbytnlbytnc

3、rc高位crc低位幀長度:9+by in個字節(jié)設(shè)備地址:1247功能碼:10h數(shù)據(jù)地址:()65535 具體范i韋i與相關(guān)設(shè)備有關(guān) 數(shù)1122具體范圍與相關(guān)設(shè)備冇關(guān)字節(jié)數(shù):設(shè)置的字節(jié)個數(shù)bytn= datanumx 2 數(shù) 據(jù):具體的字節(jié)數(shù)據(jù)校驗碼:crc16校驗返回命令幀:設(shè)備地址功能碼地址h地址l數(shù)據(jù)量h數(shù)據(jù)量lcrchcrcladdrl1() hholdstartdatanumcrc髙位crc低位幀長度:8個字節(jié) 設(shè)備地址:1247 功能碼:10h數(shù)據(jù)地址:065535 具體范圍與相關(guān)設(shè)備有關(guān) 數(shù) 量:1122具體范圍與相關(guān)設(shè)備有關(guān)校驗碼:crc16校驗命令有謀:1) 沒有任何返冋2)

4、返回異議幀地址功能碼錯誤信息crchcrcladdrl90 h一個字節(jié)的錯i吳信息crc高位crc低位設(shè)置單個寄存器(06h) 發(fā)送命令幀:設(shè)備地址功能碼地址h地址l數(shù)據(jù)h數(shù)據(jù)lcrchcrcladdro06hholdstartdatacrc高位crc低位返冋命令幀:設(shè)備地址功能碼地址h地址l數(shù)據(jù)h數(shù)據(jù)lcrchcrcladdrl06hholdstartdatacrc高位crc低位crc-16 (循環(huán)冗余錯誤校驗)crc-16錯誤校驗程序如f:報文(此處只涉及數(shù)據(jù)位,不指起始位、停止位和任選的奇徜校驗位)被看 作是一個連續(xù)的二進制,其最高有效位(msb)首選發(fā)送。報文先與xn6相乘(左移16位

5、),然后看 xa16+xa15+xa2+1 除,xa16+xa15+xa2+1 可以表示為二進制數(shù) 1 1000 0000 0000 0101 o 整數(shù)商位忽略不記,16 位余數(shù)加入該報文(msb先發(fā)送),成為2個crc校驗字節(jié)。余數(shù)中的1全部初始化,以免所有的零成為一條 報文被接收。經(jīng)上述處理而含冇crc字節(jié)的報文,若無錯誤,到接收設(shè)備后再被同一多項式(xt6+xa15+xa2+1) 除,會得到一個零余數(shù)(接收設(shè)備核驗這個crc字節(jié),并將其與被傳送的crc比較)。全部運算以2為模(無 進位)。習(xí)慣于成串發(fā)送數(shù)據(jù)的設(shè)備會首選送出字符的最右位(lsb-最低冇效位)。而在生成crc情況下,發(fā)送首

6、位應(yīng)是被除數(shù)的最高有效位msb。由于在運算中不用進位,為便于操作起見,計算crc時設(shè)msb在最右位。 生成多項式的位序也必須反過來,以保持一致。多項式的msb略去不記,因其只對商有影響而不影響余數(shù)。 生成crc-16校驗字節(jié)的步驟如下:%1 裝如一個16位寄存器,所有數(shù)位均為lo%1 該16位寄存器的高位字節(jié)與開始8位字節(jié)進行“異或”運算。運算結(jié)果放入這個16位寄存器。%1 把這個16寄存器向右移一位。%1 若向右(標(biāo)記位)移出的數(shù)位是1,則牛成多項式1010000000000001和這個寄存器進行“界或”運算;若向右 移出的數(shù)位是0,則返回。%1 重復(fù)和,宜至移出8位。%1 另外8位與該十六

7、位寄存器進行“異或”運算。%1 重復(fù),直至該報文所有字節(jié)均少16位寄存器進行“界或”運算,并移位8次。%1 這個16位奇存器的內(nèi)容即2字節(jié)crc錯誤校驗,被加到報文的最高有效位。另外,在某些非modbus通信協(xié)議中也經(jīng)常使用crc16作為校驗手段,而且產(chǎn)生了一些crc16的變種, 他們是使用crc16多項式x t 16+x t 15+x t 2+1,單首次裝入的16位寄存器為0000;使用crc16的反序x t 16+x t 14+x t 1+1,首次裝入寄存器值為0000或ffffholrc (縱向兀余錯課校驗)lrc錯誤校驗用于ascii模式。這個錯誤校驗是一個8位二進制數(shù),可作為2個as

8、cii十六進制字節(jié) 傳送。把十六進制字符轉(zhuǎn)換成二進制,加上無循環(huán)進位的二進制字符和二進制補碼結(jié)果生成lrc錯誤校驗(參 見圖)。這個lrc在接收設(shè)備進行核驗,并與被傳送的lrc進行比較,冒號(:)、回車符號(cr)、換行字符(lf) 和置入的其他任何非ascii十六進制字符在運算時忽略不計。十六進制二進制地址 0 2 0000 0010功能碼 0 1 0000 0001起始地址高位0 0 0000 0000 起始地址低位0 0 0(x)() 0(x)() 單元數(shù)量0 0 0000 0000 0 8 + 0000 10000000 1011變成補碼1111 0101錯課校驗f5f5接受pc把所冇

9、收到的數(shù)據(jù)字節(jié)(包括最后的lrc)加在一起,8位應(yīng)全部為0 (注意:和可能超過8位, 應(yīng)略去最低位)0000 00100000 00010000 00000000 0000()00() 000()0000 1000錯誤校驗 1111 0101 和 0000 00003、crc檢測使用rtu模式,消息包括了一基于crc方法的錯謀檢測域。crc域檢測了整個消息的內(nèi)容。crc域是兩個字節(jié),包含一 16位的二進制值。它由傳輸設(shè)備計算后加入到消息中。接收設(shè)備重新計算收到消息 的crc,并與接收到的crc域屮的值比較,如果兩值不同,則有誤。crc是先調(diào)入一值是全“1”的16位寄存器,然后調(diào)用-過程將消息中

10、連續(xù)的8位字節(jié)各當(dāng)前寄存器屮 的值進行處理。僅每個字符屮的xbit數(shù)據(jù)對crc有效,起始位和停止位以及奇偶校驗位均無效。crc產(chǎn)生過程中,每個8位字符都單獨和寄存器內(nèi)容相或(or),結(jié)果向最低有效位方向移動,最高有 效位以0填充°lsb被提取出來檢測,如果lsb為1,寄存器單獨和預(yù)置的值或一下,如果lsb為0,則不進行。 整個過程耍重復(fù)8次。在最后一位(第8位)完成后,下一個8位字節(jié)乂單獨和寄存器的當(dāng)前值相或。最終寄存 器中的值,是消息中所有的字節(jié)都執(zhí)行之后的crc值。crc添加到消息中時,低字節(jié)先加入,然后高字節(jié)。crc簡單函數(shù)如下:unsigned short crc16(puc

11、hmsg, usdatalen)unsigned char *puchmsg ; /* 耍進彳亍 crc 校驗的消息 */unsigned short usdatalen ; /* 消息中字節(jié)數(shù) */unsigned char uchcrchi = oxff ; /* 高 crc 字節(jié)初始化 */ unsigned char uchcrclo = oxff ; /* 低 crc 字節(jié)初始化 */ unsigned ulndex ; /* crc 循環(huán)中的索引 */ while (usdatalen) /*傳輸消息緩沖區(qū)*/ulndex = uchcrchi a *puchmsgg+ ; /*

12、計算 crc */ uchcrchi = uchcrclo a auchcrchiuindex);uchcrclo = auchcrcloulndexj ;return (uchcrchi « 8 i uchcrclo);/* crc高位字節(jié)值表*/static unsigned char auchcrchij = 0x00, oxc 1,0x81,0x40, 0x01, oxco, 0x80, 0x41,0x01, oxco,0x80, 0x41,0x0(), oxcl, 0x81,0x40, 0x01, oxco, 0x80, 0x41,0x00, oxcl, 0x81,0x40

13、, 0x00, oxcl, 0x81,0x40, 0x01, oxco,0x80, 0x41,0x01, oxco, 0x80, 0x41, 0x00, oxcl, 0x81, 0x40,0x00, oxcl, 0x81,0x40, 0x01, oxco, 0x80, 0x41,0x00, oxcl,0x81, 0x40, 0x01, oxco, 0x80, 0x41, 0x01, oxco, 0x80, 0x41,0x0(), oxc 1,0x81, 0x40, 0x01, oxco, 0x80, 0x41,0x00, oxc 1,0x81,0x40, 0x00, oxcl, 0x81,0x

14、40, 0x01, oxco, 0x80, 0x41,0x00, oxcl, 0x81, 0x40, 0x01, oxco, 0x80, 0x41,0x01, oxco,0x80, 0x41,0x00, oxcl, 0x81,0x40, 0x00, oxc 1,0x81,0x40,0x01, oxco, 0x80, 0x41, 0x01, oxco, 0x80, 0x41,0x00, oxcl,0x81, 0x40, 0x01, oxco, 0x80, 0x41, ()x(x), oxc 1,0x81,0x40,0x00, oxcl, 0x81,0x40, 0x01, oxco, 0x80,

15、0x41,0x01, oxco,0x80, 0x41,0x00, oxcl, 0x81, 0x40, 0x00, oxcl, 0x81, 0x40,0x01, oxco, 0x80, 0x41,0x00, oxcl, 0x81,0x40, 0x01, oxco,0x80, 0x41,0x01, oxco, 0x80, 0x41, 0x00, 0x0,0x81, 0x40,0x0(), oxcl, 0x81, 0x40, 0x() 1, oxco, 0x80, 0x41,0x01, oxco,0x80, 0x41,0x00, oxcl, 0x81,0x40, 0x01, oxco, 0x80,

16、0x41,0x00, oxcl, 0x81,0x40, 0x00, oxc 1,0x81,0x40, 0x01, oxco,0x80, 0x41,0x00, oxc 1, 0x81,0x40, 0x01, oxco, 0x80, 0x41,0x01, oxco, 0x80, 0x41, 0x00, oxcl, 0x81, 0x40, 0x01, oxco,0x80, 0x41,0x0(), oxc 1, 0x81,0x40, 0x00, oxc 1,0x81,0x40,0x01, oxco, 0x80, 0x41,0x01, oxco, 0x80, 0x41,0x00, oxcl,0x81,

17、0x40, 0x00, oxcl, 0x81, 0x40, 0x01, oxco, 0x80, 0x41,0x00, oxcl, 0x81,0x40, 0x01, oxco, 0x80, 0x41,0x01, oxco,0x80, 0x41,0x00, oxc 1,0x81,0x40;/* crc低位字節(jié)值表勺static char auchcrclo = 0x00, oxco, oxcl, 0x01, oxc3, 0x03, 0x02, 0xc2, 0xc6, 0x06,0x07, 0xc7, 0x05, oxc5, 0xc4, 0x04, oxcc, oxoc, oxod, oxcd,ox

18、of, oxcf, oxce, oxoe, oxoa, oxca, oxcb, oxob, 0xc9, 0x09,0x08, oxc& oxd& oxl& 0x19, 0xd9, ox ib, oxdb, oxda, 0x1 a,ox ie, oxde, oxdf, ox if, oxdd, ox id, oxlc, oxdc, 0x14, 0xd4,0xd5, ox 15, 0xd7, ox 17, 0x16, 0xd6, 0xd2,0x12, 0x13,0xd3,oxll, oxdl, oxdo, ox 10, oxfo, 0x30, 0x31, oxfl, 0x3

19、3, oxf3,oxf2,0x32,0x36, 0xf6, oxf7, 0x37, oxf5, 0x35, 0x34, 0xf4,ox3c, oxfc, oxfd, 0x3d, oxff, ox3f, ox3e, oxfe, oxfa, 0x3a,ox3b, oxfb, 0x39, 0xf9, oxf8, 0x38, 0x28, oxe& 0xe9, 0x29,oxeb, 0x2b, 0x2a, oxea, oxee, 0x2e, 0x2f, oxef, 0x2d, oxed,oxec, 0x2c, 0xe4, 0x24, 0x25, oxe5, 0x27, 0xe7, 0xe6, 0

20、x26,0x22, 0xe2, 0xe3, 0x23, oxel, 0x21,0x20, oxeo, oxao, 0x60,0x61, oxal, 0x63, 0xa3, 0xa2, 0x62, 0x66, 0xa6, 0xa7, 0x67,0xa5, 0x65, 0x64, 0xa4, 0x6c, oxac, oxad, 0x6d, oxae 0x6f,0x6e, oxae, oxaa, 0x6a, 0x6b, oxab, 0x69, 0xa9, oxa& 0x68,ox7& oxb& 0xb9, 0x79, oxbb, 0x7b, 0x7a, oxba, oxbe,

21、 0x7e,ox7f, oxbf, 0x7d, oxbd, oxbc, 0x7c, 0xb4, 0x74, 0x75, oxb5,0x77, 0xb7, 0xb6, 0x76, 0x72, 0xb2, oxb3, 0x73, oxbl, 0x71,0x70, oxbo, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92,0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9c, ox5c,0x5d, 0x9d, ox5f, 0x9f, 0x9e, ox5e, 0x5a, 0x9a, 0x9b, ox5b

22、,0x99, 0x59, 0x58, 0x9& ()x8& 0x4& 0x49, 0x89, 0x4b, ()x8b,0x8a, 0x4a, 0x4e, ox8e, ox8f, 0x4f, 0x8d, 0x4d, 0x4c, 0x8c,0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42,0x43, 0x83, 0x41, 0x81, 0x80, 0x40;轉(zhuǎn)門:牛活安全網(wǎng)(httd:/)表1 modbus功能碼功能碼名稱作用01讀取線圈狀態(tài) 取得一組邏輯線圈的當(dāng)前狀態(tài)(on/off)02讀取輸入狀態(tài)取得一

23、組開關(guān)輸入的當(dāng)前狀態(tài)(on/off)03讀取保持寄存器在一個或多個保持寄存器中取得當(dāng)前的二進制值04讀取輸入寄存器在一個或多個輸入寄存器屮取得當(dāng)前的二進制值05強置單線圈強置一個邏輯線圈的通斷狀態(tài)06預(yù)置單寄存器把具體二進值裝入一個保持寄存器07讀取異常狀態(tài)取得8個內(nèi)部線圈的通斷狀態(tài),這8個線圈的地址由控制器決定,用戶邏輯可以將這些線圈定 義,以說明從機狀態(tài),短報文適宜于迅速讀取狀態(tài)08回送診斷校驗把診斷校驗報文送從機,以對通信處理進行評鑒09編程(只用于484)使主機模擬編程器作用,修改pc從機邏輯10控詢(只用于484)可使主機與一臺正在執(zhí)行長程序任務(wù)從機通信,探詢該從機是否已完成其操作任務(wù),僅 在含有功能碼9的報文發(fā)送后,本功能碼才發(fā)送11讀取事件計數(shù)可使主機發(fā)出單詢問,并隨即判定操作是否成功,尤其是該命令或其他應(yīng)答產(chǎn)生通信錯誤時12讀取通信事件記錄可是主機檢索每臺從機的modbus事務(wù)處理通信事件記錄。如果某項事務(wù)處理完成,記錄 會給出有關(guān)錯謀1

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論