常用的MODBUS通訊規(guī)約有兩種,一種是MODBUS ASCII模式,一種是MODBUS RTU模式。每個設(shè)備必須都有相同的傳輸模式。所有設(shè)備都支持RTU模式,ASCII傳輸模式是選項,那么ASCII模式和RTU模式有什么區(qū)別呢?
(1)標(biāo)準(zhǔn)、開放,用戶可以免費、放心地使用Modbus協(xié)議,不需要交納許可證費,也不會侵犯知識產(chǎn)權(quán)。目前,支持Modbus的廠家超過400家,支持Modbus的產(chǎn)品超過600種。
(2)Modbus可以支持多種電氣接口,如RS-232、RS-485等,還可以在各種介質(zhì)上傳送,如雙絞線、光纖、無線等。
(3)Modbus的幀格式簡單、緊湊,通俗易懂。用戶使用容易,廠商開發(fā)簡單。
1、ASCII模式
Modbus串行鏈路的設(shè)備被配置為使用ASCII模式通信時,報文中的每8位字節(jié)以兩個ASCII字符發(fā)送。例:字節(jié)0X5B會被編碼為兩個字符:0x35和0x42進(jìn)行傳送(ASCII編碼0x35="5",0x42="B"),這樣傳輸效率會降低。
在ASCII模式,報文用特殊的字符區(qū)分幀起始和幀結(jié)束。一個報文必須以一個‘冒號’(:)(ASCII十六進(jìn)制3A)起始,以‘回車-換行’(CRLF)對(ASCII十六進(jìn)制0D和0A)結(jié)束。設(shè)備連續(xù)的監(jiān)視總線上的‘冒號’字符。當(dāng)收到這個字符后,每個設(shè)備解碼后續(xù)的字符一直到幀結(jié)束。報文中字符間的時間間隔可以達(dá)一秒。如果有更大的間隔,則接受設(shè)備認(rèn)為發(fā)生了錯誤。
當(dāng)控制器設(shè)為在Modbus網(wǎng)絡(luò)上以ASCII(美國標(biāo)準(zhǔn)信息交換代碼)模式通信,在消息中的每個8Bit字節(jié)都作為兩個ASCII字符發(fā)送。這種方式的主要優(yōu)點是字符發(fā)送的時間間隔可達(dá)到1秒而不產(chǎn)生錯誤。
代碼系統(tǒng)
十六進(jìn)制,ASCII字符0...9,A...F
消息中的每個ASCII字符都是一個十六進(jìn)制字符組成
每個字節(jié)地位
1個起始位
7個數(shù)據(jù)位,最小的有效位先發(fā)送
1個奇偶校驗位,無校驗則無
1個停止位(有校驗時),2個Bit(無校驗時)
錯誤檢測域
LRC(縱向冗長檢測)
2、RTU模式
當(dāng)設(shè)備使用RTU(RemoteTerminalUnit)模式在Modbus串行鏈路通信,報文中每個8位字節(jié)含有兩個4位十六進(jìn)制字符。這種模式的主要優(yōu)點是較高的數(shù)據(jù)密度,在相同的波特率下比ASCII模式有更高的傳輸效率。每個報文必須以連續(xù)的字符流傳送。
當(dāng)控制器設(shè)為在Modbus網(wǎng)絡(luò)上以RTU(遠(yuǎn)程終端單元)模式通信,在消息中的每個8Bit字節(jié)包含兩個4Bit的十六進(jìn)制字符。這種方式的主要優(yōu)點是:在同樣的波特率下,可比ASCII方式傳送更多的數(shù)據(jù)。
代碼系統(tǒng)
8位二進(jìn)制,十六進(jìn)制數(shù)0...9,A...F
消息中的每個8位域都是一個兩個十六進(jìn)制字符組成
每個字節(jié)地位
1個起始位
8個數(shù)據(jù)位,最小的有效位先發(fā)送
1個奇偶校驗位,無校驗則無
1個停止位(有校驗時),2個Bit(無校驗時)
錯誤檢測域
CRC(循環(huán)冗長檢測)
RTU傳輸模式應(yīng)用有自報、兼容、查詢、以及調(diào)試四種工作模式。
RTU傳輸模式:
a)自報工作模式
事件觸發(fā)(被測要素值發(fā)生一定變化)時,遙測站主動發(fā)送數(shù)據(jù);定時觸發(fā)時,遙測站應(yīng)按規(guī)定的時間主動上報發(fā)送數(shù)據(jù);
自報工作模式下RTU在整點上報和預(yù)警加報時上線,完成數(shù)據(jù)傳輸后又自動下線。自報主要應(yīng)用于短時間通訊、長時間待機(jī),因此在功耗上遠(yuǎn)遠(yuǎn)低于兼容式工作模式。自報模式下GPRS通訊模塊處于休眠狀態(tài),可以通過短信進(jìn)行遠(yuǎn)程修改配置參數(shù)。
b)兼容工作模式
表示同時包括查詢和自報兩種工作模式,兼容式工作模式下RTU一開機(jī)啟動就會自動連接服務(wù)中心,并且一直保持在線;如果出現(xiàn)網(wǎng)絡(luò)故障RTU設(shè)備就會自動重新連接。此模式下,水文監(jiān)測管理平臺可以進(jìn)行召測、召拍等操作。
由于無線通信模塊是一個比較耗電的單元,在自報模式下,RTU只在小時報或加報報時候才會上線,否則會關(guān)閉其電源。在兼容模式下則會一直保持在線,此時功耗會較高。
c)查詢工作模式
中心站發(fā)出指令主要用于對遙測站進(jìn)行數(shù)據(jù)查詢、參數(shù)(狀態(tài))設(shè)置或設(shè)備控制;
遙測站應(yīng)響應(yīng)指令發(fā)送所查詢的數(shù)據(jù)或狀態(tài)、設(shè)置參數(shù)或執(zhí)行控制設(shè)備指令并返回執(zhí)行結(jié)果。
d) 調(diào)試工作模式
調(diào)試模式下,主要用于RTU外接水位、雨量、攝像頭等設(shè)備的安裝測試。
安裝測試作用:一是測試通信線路是否正常,二是用于驗證遙測站采集傳輸?shù)恼_性,并告訴中心站,測試數(shù)據(jù)只做檢查用,不存儲。
MODBUS的ASCII協(xié)議和RTU協(xié)議相比,MODBUS ASCII協(xié)議擁有開始和結(jié)束標(biāo)記,而MODBUS RTU卻沒有,所以ASCII協(xié)議的程序中對數(shù)據(jù)包的處理能更加方便。
MODBUS ASCII協(xié)議的DATA域傳輸?shù)亩际强梢姷腁SCII字符,因此在調(diào)試階段就顯得更加直觀,另外LRC校驗程序也比較容易編寫,這些都是MODBUS ASCII的優(yōu)點。
MODBUS ASCII的主要缺點是傳輸效率低,因為傳輸?shù)亩际强梢姷腁SCII字符,原來用RTU傳輸?shù)臄?shù)據(jù)每一個字節(jié),用ASCII的話都要把這個字節(jié)拆分兩個字節(jié),比如RTU傳輸一個十六進(jìn)制數(shù)0xF9,ASCII就需要傳輸字符''F''和字符''9'',對應(yīng)的ASCII碼0x46和0x39兩個字節(jié),這樣傳輸?shù)男士隙ň捅萊TU低。
所以一般來說,如果所需要傳輸?shù)臄?shù)據(jù)量較小可以考慮使用ASCII協(xié)議,如果所需傳輸?shù)臄?shù)據(jù)量比較大,最好能使用RTU協(xié)議。
另外,由于ASCII協(xié)議有開始標(biāo)志和結(jié)束標(biāo)志,所以一個數(shù)據(jù)包之間的各字節(jié)間的傳輸間隔時間可以大于1秒,而MODBUS RTU方式下,由于沒有規(guī)定開始和結(jié)束標(biāo)記,所以協(xié)議規(guī)定每兩個字節(jié)之間發(fā)送或者接收的時間間隔不能超過3.5倍字符傳輸時間。如果兩個字符時間間隔超過了3.5倍的字符傳輸時間,就認(rèn)為一幀數(shù)據(jù)已經(jīng)接收,新的一幀數(shù)據(jù)傳輸開始,所以RTU方式下兩個字節(jié)間傳輸間隔有時間要求。MODBUS 的ASCII和RTU兩種協(xié)議的這一區(qū)別,可能決定某些應(yīng)用場合只能選用其中一種協(xié)議。