當(dāng)前位置:中美貿(mào)易網(wǎng) > 技術(shù)中心 > 所有分類
Modbus通訊協(xié)議詳解
ModBus網(wǎng)絡(luò)是一個工業(yè)通信系統(tǒng),由帶智能終端的可編程序控制器和計算機通過公用線路或局部專用線路連接而成。其系統(tǒng)結(jié)構(gòu)既包括硬件、亦包括軟件。它可應(yīng)用于各種數(shù)據(jù)采集和過程監(jiān)控。
ModBus網(wǎng)絡(luò)只有一個主機,所有通信都由他發(fā)出。網(wǎng)絡(luò)可支持247個之多的遠程從屬控制器,但實際所支持的從機數(shù)要由所用通信設(shè)備決定。采用這個系統(tǒng),各PC可以和中心主機交換信息而不影響各PC執(zhí)行本身的控制任務(wù)。
了解Modbus通訊協(xié)議是怎么回事,在現(xiàn)場就可以用各種第三方的小軟件做通訊測試了。
Modbus協(xié)議包括ASCII、RTU、TCP等,并沒有規(guī)定物理層。
此協(xié)議定義了控制器能夠認識和使用的消息結(jié)構(gòu),而不管它們是經(jīng)過何種網(wǎng)絡(luò)進行通信的。
標(biāo)準(zhǔn)的Modicon控制器使用RS232C實現(xiàn)串行的Modbus。
Modbus的ASCII、RTU協(xié)議規(guī)定了消息、數(shù)據(jù)的結(jié)構(gòu)、命令和就答的方式,數(shù)據(jù)通訊采用Maser/Slave方式,Master端發(fā)出數(shù)據(jù)請求消息,Slave端接收到正確消息后就可以發(fā)送數(shù)據(jù)到Master端以響應(yīng)請求;
Master端也可以直接發(fā)消息修改Slave端的數(shù)據(jù),實現(xiàn)雙向讀寫。
Modbus協(xié)議需要對數(shù)據(jù)進行校驗,串行協(xié)議中除有奇偶校驗外,ASCII模式采用LRC校驗,RTU模式采用16位CRC校驗,但TCP模式?jīng)]有額外規(guī)定校驗,因為TCP協(xié)議是一個面向連接的可靠協(xié)議。
另外,Modbus采用主從方式定時收發(fā)數(shù)據(jù),在實際使用中如果某Slave站點斷開后(如故障或關(guān)機),Master端可以診斷出來,而當(dāng)故障修復(fù)后,網(wǎng)絡(luò)又可自動接通。
因此,Modbus協(xié)議的可靠性較好。
對于Modbus的ASCII、RTU和TCP協(xié)議來說,其中TCP和RTU協(xié)議非常類似,我們只要把RTU協(xié)議的兩個字節(jié)的校驗碼去掉,然后在RTU協(xié)議的開始加上5個0和一個6并通過TCP/IP網(wǎng)絡(luò)協(xié)議發(fā)送出去即可。
一、通訊傳送方式:
通訊傳送分為獨立的信息頭,和發(fā)送的編碼數(shù)據(jù)。以下的通訊傳送方式定義也與ModBusRTU通訊規(guī)約相兼容:
初始結(jié)構(gòu) = ≥4字節(jié)的時間
地址碼 = 1 字節(jié)
功能碼 = 1 字節(jié)
數(shù)據(jù)區(qū) = N 字節(jié)
錯誤校檢 = 16位CRC碼
結(jié)束結(jié)構(gòu) = ≥4字節(jié)的時間
地址碼:地址碼為通訊傳送的個字節(jié)。
這個字節(jié)表明由用戶設(shè)定地址碼的從機將接收由主機發(fā)送來的信息。
并且每個從機都有具有的地址碼,并且響應(yīng)回送均以各自的地址碼開始。
主機發(fā)送的地址碼表明將發(fā)送到的從機地址,而從機發(fā)送的地址碼表明回送的從機地址。
功能碼:通訊傳送的第二個字節(jié)。ModBus通訊規(guī)約定義功能號為1到127。本儀表只利用其中的一部分功能碼。
作為主機請求發(fā)送,通過功能碼告訴從機執(zhí)行什么動作。作為從機響應(yīng),從機發(fā)送的功能碼與從主機發(fā)送來的功能碼一樣,并表明從機已響應(yīng)主機進行操作。
如果從機發(fā)送的功能碼的位為1(比如功能碼大與此同時127),則表明從機沒有響應(yīng)操作或發(fā)送出錯。
數(shù)據(jù)區(qū):數(shù)據(jù)區(qū)是根據(jù)不同的功能碼而不同。
數(shù)據(jù)區(qū)可以是實際數(shù)值、設(shè)置點、主機發(fā)送給從機或從機發(fā)送給主機的地址。
CRC碼:二字節(jié)的錯誤檢測碼。
二、通訊規(guī)約:
當(dāng)通訊命令發(fā)送至儀器時,符合相應(yīng)地址碼的設(shè)備接通訊命令,并除去地址碼,讀取信息,如果沒有出錯,則執(zhí)行相應(yīng)的任務(wù);
然后把執(zhí)行結(jié)果返送給發(fā)送者。
返送的信息中包括地址碼、執(zhí)行動作的功能碼、執(zhí)行動作后結(jié)果的數(shù)據(jù)以及錯誤校驗碼。
如果出錯就不發(fā)送任何信息。
1.信息幀結(jié)構(gòu)
地址碼 功能碼 數(shù)據(jù)區(qū) 錯誤校驗碼
8位 8位 N × 8位 16位
地址碼:地址碼是信息幀的字節(jié)(8位),從0到255。這個字節(jié)表明由用戶設(shè)置地址的從機將接收由主機發(fā)送來的信息。
每個從機都必須有的地址碼,并且只有符合地址碼的從機才能響應(yīng)回送。當(dāng)從機回送信息時,相當(dāng)?shù)牡刂反a表明該信息來自于何處。
功能碼:主機發(fā)送的功能碼告訴從機執(zhí)行什么任務(wù)。表1-1列出的功能碼都有具體的含義及操作。
數(shù)據(jù)區(qū):數(shù)據(jù)區(qū)包含需要從機執(zhí)行什么動作或由從機采集的返送信息。這些信息可以是數(shù)值、參考地址等等。
例如,功能碼告訴從機讀取寄存器的值,則數(shù)據(jù)區(qū)必需包含要讀取寄存器的起始地址及讀取長度。對于不同的從機,地址和數(shù)據(jù)信息都不相同。
錯誤校驗碼:主機或從機可用校驗碼進行判別接收信息是否出錯。
有時,由于電子噪聲或其它一些干擾,信息在傳輸過程中會發(fā)生細微的變化,錯誤校驗碼保證了主機或從機對在傳送過程中出錯的信息不起作用。這樣增加了系統(tǒng)的安全和效率。錯誤校驗采用CRC-16校驗方法。
注:信息幀的格式都基本相同:地址碼、功能碼、數(shù)據(jù)區(qū)和錯誤校驗碼。
2.錯誤校驗
冗余循環(huán)碼(CRC)包含2個字節(jié),即16位二進制。CRC碼由發(fā)送設(shè)備計算,放置于發(fā)送信息的尾部。
接收信息的設(shè)備再重新計算接收到信息的 CRC碼,比較計算得到的CRC碼是否與接收到的相符,如果兩者不相符,則表明出錯。
以上便是Modbus通訊協(xié)議的具體詳解。