資源描述:
《MODBUS 通信協(xié)議》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、MODBUS通信協(xié)議一.MODBUS通信協(xié)議概述1.1.MODBUS通信協(xié)議概述MODBUS通信協(xié)議是由美國Modicon公司研發(fā)和提出的,目前已經(jīng)成為國際通用標(biāo)準(zhǔn)。MODBUS通信協(xié)議工作在ISO/OSI模型的數(shù)據(jù)鏈路層,其工作條件是物理層通信接口已經(jīng)建立并且工作正常。MODBUS通信協(xié)議主要包括如下內(nèi)容:●MODBUS通信接口MODBUS通信接口符合RS232C/RS485以及兼容的串行接口,該接口定義了針腳、電纜、信號位、波特率、奇偶校驗(yàn)。各種智能設(shè)備能夠直接利用MODBUS接口規(guī)約進(jìn)行組網(wǎng)?!馦ODBUS通信符合主從的通信模式通信只
2、能由主站主動發(fā)起并傳送給從站。若主站發(fā)出的是廣播命令,則從站不給予任何回應(yīng);若主站發(fā)出的是行動命令,則從站必須給予回應(yīng)。從站的回應(yīng)中包括描述命令執(zhí)行域信息、數(shù)據(jù)表以及錯誤檢驗(yàn)域信息;若從站不能執(zhí)行該命令,則從站將建立錯誤消息并作為回應(yīng)發(fā)送回去。自主站發(fā)至從站的信息報文稱為命令或下行通信幀,而自從站發(fā)至主站的信息報文則稱為響應(yīng)或上行通信幀。●MODBUS通信的兩種數(shù)據(jù)傳輸方式:ASCII和RTU模式當(dāng)數(shù)據(jù)代碼采用ASCII數(shù)據(jù)傳輸方式時被稱為MODBUS-ASCII。當(dāng)數(shù)據(jù)代碼采用RTU(遠(yuǎn)程終端單元)數(shù)據(jù)傳輸方式時被稱為MODBUS-RTU
3、。在以RTU數(shù)據(jù)傳輸方式下,1個8Bits的字節(jié)由2個4Bits的16進(jìn)制字符構(gòu)成。十進(jìn)制/16進(jìn)制/二進(jìn)制數(shù)代碼表如下:MODBUS-RTU在發(fā)送1個字節(jié)時其中的位分布如下:數(shù)值(十進(jìn)制代碼)十六進(jìn)制代碼(H表示十六進(jìn)制數(shù))二進(jìn)制代碼(B表示二進(jìn)制數(shù))000H0000B101H0001B202H0010B303H0011B404H0100B505H0101B606H0110B707H0111B808H1000B909H1001B100AH1010B110BH1011B120CH1100B130DH1101B140EH1110B150FH1
4、111B█1位起始位█8位數(shù)據(jù)位█1位奇偶校驗(yàn)位,若選擇無校驗(yàn)則無本位█1位停止位,若無奇偶校驗(yàn)則為2位停止位(多數(shù)情況下仍然采用1位停止位)在MODBUS-RTU模式下,錯誤校驗(yàn)碼采用CRC16模式。若無特別說明,在本文中所描述的通信協(xié)議均為MODBUS-RTU?!馦ODBUS-RTU的消息幀結(jié)構(gòu)MODBUS-RTU的消息幀結(jié)構(gòu)如下:█地址:指從站的ID地址當(dāng)主站向某從站發(fā)送消息時將該從站的地址放入消息幀的地址域中;當(dāng)從站發(fā)送回應(yīng)消息時,將自己的地址放入消息幀的地址域中以便主站知道哪個從站作了回應(yīng)。地址0為廣播命令。當(dāng)MODBUS網(wǎng)絡(luò)為更
5、復(fù)雜的網(wǎng)絡(luò)時,廣播命令可能會取消或以其它形式取代。從站地址的范圍為1-247(十進(jìn)制),但為了與RS232C/RS485接口配合一般選擇為1-32。█功能域:指主站發(fā)布的功能命令雖然Modicon公司發(fā)布了多條MODBUS功能命令,但常用的命令只有9條,列表如下:起始位地址域功能域或命令代碼域數(shù)據(jù)域CRC校驗(yàn)域停止位T1-T2-T3-T48Bit8BitN個8Bit16BitT1-T2-T3-T4命令代碼(十六進(jìn)制)定義說明01H讀繼電器輸出狀態(tài)02H讀開關(guān)量DI輸入狀態(tài)03H讀寄存器組04H讀輸入模擬量寄存器組05H單路繼電器輸出06H寫
6、單個寄存器07H讀異常狀態(tài)0FH寫多個寄存器10H寫寄存器組若從站對主站發(fā)布的命令有異議,則從站將功能域的最高位置1作為回應(yīng)消息的功能域。例如若主站發(fā)布的命令代碼是03H即二進(jìn)制00000011B,則從站回應(yīng)的異議功能代碼是83H即二進(jìn)制10000011B。█數(shù)據(jù)域:數(shù)據(jù)區(qū)數(shù)據(jù)域的集合是由若干組2位16進(jìn)制數(shù)構(gòu)成的,其中包括寄存器地址、要處理項(xiàng)的數(shù)目和域中實(shí)際數(shù)據(jù)字節(jié)數(shù)。對應(yīng)于03H,數(shù)據(jù)域的結(jié)構(gòu)是:寄存器地址高字節(jié)+寄存器地址低字節(jié)+寄存器數(shù)量高字節(jié)+寄存器數(shù)量低字節(jié)對應(yīng)于10H,數(shù)據(jù)域的結(jié)構(gòu)是:寄存器地址高字節(jié)+寄存器地址低字節(jié)+寄存器
7、數(shù)量高字節(jié)+寄存器數(shù)量低字節(jié)+字節(jié)數(shù)量+第1寄存器數(shù)值+第2寄存器數(shù)值+…+第N寄存器數(shù)值寄存器地址的編碼:寄存器地址范圍功能主站信息幀中的地址十進(jìn)制十進(jìn)制十六進(jìn)制0XXXX基址數(shù)字量輸出區(qū)0000-9999)0000-270FH1XXXX基址數(shù)字量輸入?yún)^(qū)10000-199992710-4E1FH2XXXX基址預(yù)留區(qū)20000-299994E20-752FH3XXXX基址輸入寄存器區(qū)30000-399997530-9C3FH4XXXX基址保持寄存器區(qū)40000-499999C40-C34FH5XXXX基址預(yù)留區(qū)50000-65535C350
8、-FFFFH注意當(dāng)主站需要讀從站中某寄存器數(shù)據(jù),則從站返回的消息幀中數(shù)據(jù)所在真實(shí)寄存器地址為返回地址減1。例如在下圖中:主站報文中填寫的寄存器地址為8656,且48656寄存器中