專利名稱:在Modbus主站與從站之間進行大數(shù)據(jù)量通信的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種通信方法,尤其涉及一種在Modbus主站與從站之間進行大數(shù)據(jù)量通信的方法。
背景技術(shù):
Modbus總線由于其協(xié)議開放、實施簡便、可靠性高的特點,已經(jīng)成為一種事實上的工業(yè)標(biāo)準(zhǔn),得到了眾多廠商的產(chǎn)品支持。目前已經(jīng)安裝的Modbus節(jié)點超過1000萬個。隨著信息技術(shù)的不斷發(fā)展,許多應(yīng)用場合要求使用現(xiàn)有的Modbus設(shè)備進行大數(shù)據(jù)量通信,如電力通信領(lǐng)域一次傳輸?shù)墓收喜ㄐ斡涗浛赡苓_到數(shù)十MB,視頻監(jiān)控領(lǐng)域一次傳輸?shù)膱D像數(shù) 據(jù)可能達到數(shù)百MB。Modbus協(xié)議中定義的數(shù)據(jù)模型僅支持最多65536個數(shù)據(jù)尋址,對“輸入寄存器”類型數(shù)據(jù),最大只能尋址131.072KB數(shù)據(jù)容量。在進行大數(shù)據(jù)量通信時,從站設(shè)備地址空間不足。Modbus早期在串行鏈路上執(zhí)行的長度約束限制了其ADU (應(yīng)用數(shù)據(jù)單元)的大小,一巾貞Modbus報文最大長度為256字節(jié)。使用Modbus協(xié)議中已經(jīng)定義的公共功能碼進行通信時,主站(作為客戶機)和從站(作為服務(wù)器)之間按照“請求-應(yīng)答”格式交換信息。在進行大數(shù)據(jù)量通信時,需要主站多次請求,從站多次應(yīng)答,通信效率較低。
發(fā)明內(nèi)容
本發(fā)明的主要目的在于提供一種在Modbus主站和從站間進行大數(shù)據(jù)量通信的方法,如果在大數(shù)據(jù)量通信過程中發(fā)生幀錯誤或幀丟失故障,主站可根據(jù)從站響應(yīng)報文中的分段類型和分段計數(shù)信息來計算丟失的數(shù)據(jù)地址及長度,這樣只需重新請求丟失的數(shù)據(jù),無需從站重發(fā)全部數(shù)據(jù)。該方法不僅增強了通信可靠性,而且大大減小了通信錯誤開銷。為了達到上述目的,本發(fā)明提供了一種在Modbus主站和從站間進行大數(shù)據(jù)量通信的方法,包括以下步驟步驟一 Modbus主站發(fā)送Modbus請求報文,該Modbus請求報文的數(shù)據(jù)域包括中貞類型、數(shù)據(jù)類型、起始地址和數(shù)據(jù)數(shù)量四個位場;步驟二 Modbus從站接收到該Modbus請求報文,根據(jù)該Modbus請求報文中指定的數(shù)據(jù)類型、起始地址和數(shù)據(jù)數(shù)量,從內(nèi)存中取出數(shù)據(jù);步驟三ModbuS從站將該數(shù)據(jù)分段封裝到Modbus響應(yīng)報文里,形成分段響應(yīng)報文,并依次連續(xù)發(fā)送該分段響應(yīng)報文,該Modbus響應(yīng)報文的數(shù)據(jù)域包括幀類型、數(shù)據(jù)類型、分段協(xié)議、有效數(shù)據(jù)數(shù)量和有效數(shù)據(jù)五個位場;步驟四ModbuS主站接收該分段響應(yīng)報文,判斷其是否有分段幀錯誤或遺失,如果是則執(zhí)行步驟五,否則執(zhí)行步驟七;步驟五ModbuS主站根據(jù)該分段協(xié)議計算錯誤或丟失的分段幀中有效數(shù)據(jù)的地址和長度,重新發(fā)送對該有效數(shù)據(jù)的請求報文;步驟六Modbus從站返回響應(yīng)報文;步驟七本次數(shù)據(jù)通信過程結(jié)束。
與現(xiàn)有技術(shù)相比較,本發(fā)明中提出的Modbus主從站間大數(shù)據(jù)量通信的方法,支持更大的數(shù)據(jù)容量,并具有通信效率高、可靠性強、錯誤開銷小的優(yōu)點,具有較大的應(yīng)用前景和推廣使用價值。
圖I是本發(fā) 明中Modbus網(wǎng)絡(luò)結(jié)構(gòu)示意圖;圖2是本發(fā)明中Modbus從站設(shè)備的數(shù)據(jù)模型示意圖;圖3是本發(fā)明中在Modbus主站和從站間一次數(shù)據(jù)通信的流程圖。
具體實施例方式本發(fā)明所述的在Modbus主站與從站之間進行大數(shù)據(jù)量通信的方法,首先在Modbus數(shù)據(jù)模型的基礎(chǔ)上定義了一種擴展的數(shù)據(jù)模型,包括以下四種類型的數(shù)據(jù)(I) DWORD類型對應(yīng)于兩個“輸入寄存器”類型數(shù)據(jù),長度為4字節(jié),可表示長整型或單精度浮點型數(shù)據(jù);⑵WORD類型對應(yīng)于一個“輸入寄存器”類型數(shù)據(jù),長度為2字節(jié),可表示短整型數(shù)據(jù);(3)BYTE類型對應(yīng)于半個“輸入寄存器”類型數(shù)據(jù),長度為I字節(jié),可表示字符型數(shù)據(jù);(4)BIT類型對應(yīng)于一個“離散量輸入”類型數(shù)據(jù),長度為I比特,可表示單比特型數(shù)據(jù)。這四種類型數(shù)據(jù)都保存在從站設(shè)備(作為服務(wù)器)的內(nèi)存空間內(nèi),每種類型的數(shù)據(jù)互相獨立,通過不同格式的Modbus請求報文幀進行訪問。每種類型的數(shù)據(jù)均使用4字節(jié)(32位)進行尋址,可尋址范圍為O OxFFFFFFFF。這意味著對DWORD類型數(shù)據(jù),最大可支持16GB存儲容量;對WORD類型數(shù)據(jù),最大可支持8GB存儲容量;對BYTE類型數(shù)據(jù),最大可支持4GB存儲容量;對BIT型數(shù)據(jù),最大可支持512MB存儲容量。Modbus協(xié)議中規(guī)定用戶可以自定義功能碼,范圍在65 72和100 110之間。本發(fā)明中使用自定義功能碼110來進行大數(shù)據(jù)量通信,并且規(guī)定,使用該功能碼進行通信時,主站發(fā)送一次請求報文,從站將要發(fā)送的數(shù)據(jù)分段封裝在響應(yīng)報文中連續(xù)發(fā)送,即主站一次請求,從站多次應(yīng)答。這樣可以提高通信效率。一個Modbus報文幀包括地址域(從站地址)、功能碼域(這里為110)、數(shù)據(jù)域和校驗域。下面對數(shù)據(jù)域做出定義。Modbus主站的Modbus請求報文的數(shù)據(jù)域包括幀類型、數(shù)據(jù)類型、起始地址、數(shù)據(jù)數(shù)量四個位場,說明如下(I)為了區(qū)分請求報文和響應(yīng)報文,Modbus報文的數(shù)據(jù)域的第一個字節(jié)的bit7表示中貞類型,O表示請求巾貞,I表示響應(yīng)巾貞;(2)為了能夠使用同一功能碼傳輸四種類型的數(shù)據(jù),使用Modbus請求報文的數(shù)據(jù)域的第一個字節(jié)的bit6-bit5表示數(shù)據(jù)類型,00表示DWORD類型,01表示W(wǎng)ORD類型,10表示BYTE類型,11表示BIT類型;(3)Modbus請求報文的數(shù)據(jù)域的第二至第五個字節(jié)表示要讀取的數(shù)據(jù)的起始地址,范圍為O OxFFFFFFFF ;(4)Modbus請求報文的數(shù)據(jù)域的第六至第九個字節(jié)表示要讀取的數(shù)據(jù)的數(shù)量,范圍為 O OxFFFFFFFF。Modbus從站的Modbus響應(yīng)報文的數(shù)據(jù)域包括幀類型、數(shù)據(jù)類型、分段協(xié)議(包括幀標(biāo)志和幀計數(shù))、有效數(shù)據(jù)數(shù)量和有效數(shù)據(jù)五個位場,說明如下(I)為了區(qū)分請求報文和響應(yīng)報文,使用Modbus報文的數(shù)據(jù)域的第一個字節(jié)的bit7表示巾貞類型,O表示請求巾貞,I表示響應(yīng)巾貞;(2)為了能夠使用同一功能碼傳輸四種類型的數(shù)據(jù),使用Modbus響應(yīng)報文的數(shù)據(jù)域的第一個字節(jié)的bit6-bit5表示數(shù)據(jù)類型,00表示DWORD類型,01表示W(wǎng)ORD·類型,10表示BYTE類型,11表示BIT類型;(3)為了保證通信的可靠性,及時識別幀丟失、幀錯誤等通信故障,使用Modbus響應(yīng)報文的數(shù)據(jù)域的第二個字節(jié)作為分段協(xié)議位場,其中,bit7-bit6表示分段類型,00表示單幀無后續(xù),OI表示多幀中的起始段,10表示多幀中的中間段,11表示多幀中的結(jié)束段。bit5-bit0表示分段計數(shù),表示每個分段幀的序號,使接收器可以方便的判斷一個分段幀是否遺失。對于從站連續(xù)傳輸?shù)亩鄠€分段幀,分段計數(shù)依次加1,當(dāng)分段計數(shù)達到64時返回O ;(4)使用Modbus響應(yīng)報文的數(shù)據(jù)域的第三和第四個字節(jié)表示本幀報文攜帶的有效數(shù)據(jù)的數(shù)量;由下文可知一幀Modbus響應(yīng)報文中攜帶的有效數(shù)據(jù)長度最大為248字節(jié),可知,當(dāng)傳輸DWORD型數(shù)據(jù)時,有效數(shù)據(jù)數(shù)量最大為62 ;當(dāng)傳輸WORD型數(shù)據(jù)時,有效數(shù)據(jù)數(shù)量最大為124 ;當(dāng)傳輸BYTE型數(shù)據(jù)時,有效數(shù)據(jù)數(shù)量最大為248 ;當(dāng)傳輸BIT型數(shù)據(jù)時,有效數(shù)據(jù)數(shù)量最大為1984 ;(5)除上述四個位場外,Modbus響應(yīng)報文的數(shù)據(jù)域的其它空間都用來表示有效數(shù)據(jù)。一幀Modbus報文最大長度256字節(jié),包括地址域(I字節(jié))、功能碼域(I字節(jié))、數(shù)據(jù)域和校驗域(2字節(jié)),可知數(shù)據(jù)域長度最大為252字節(jié),因此,一幀Modbus響應(yīng)報文中可攜帶的有效數(shù)據(jù)長度最大為248字節(jié)。在一次大數(shù)據(jù)量通信過程中可能存在幀丟失、幀錯誤等通信故障。使用Modbus協(xié)議中定義的CRC/LRC校驗方式和巾貞間定時檢驗方式只能檢測出巾貞錯誤故障,無法檢測出中貞丟失故障。使用本發(fā)明中定義的分段協(xié)議位場,不僅可以檢測出幀丟失故障,而且在幀錯誤、幀丟失等故障發(fā)生時可以根據(jù)分段類型和分段計數(shù)信息方便的計算出錯誤幀的序號,進而可以計算出錯誤幀中攜帶的有效數(shù)據(jù)的地址和長度,這樣無需從站將全部數(shù)據(jù)重發(fā),只需主站重新請求錯誤幀中攜帶的有效數(shù)據(jù)即可,大大減少了通信錯誤開銷。下面結(jié)合圖I、圖2、圖3說明一具體實施例如圖I所示,一個Modbus主站設(shè)備和一個或多個Modbus從站設(shè)備共同連接在Modbus總線上,組成Modbus通信網(wǎng)絡(luò)。如圖2所示,在Modbus從站設(shè)備的內(nèi)存中定義四種類型數(shù)據(jù)存儲區(qū)域,分別如下(I)DffORD 類型,數(shù)據(jù)為 DW0RD_DATA0,DW0RD_DATA1,· · .,DW0RD_DATAm,m 的范圍為
O OxFFFFFFFF。(2) WORD 類型,數(shù)據(jù)為 W0RD_DATA0,TORD_DATA1,· · .,TORD_DATAn,n 的范圍為 O OxFFFFFFFFο(3) BYTE 類型,數(shù)據(jù)為 BYTE_DATA0,BYTE_DATA1,· · .,BYTE_DATAp,p 的范圍為 O OxFFFFFFFFο(4)BIT 類型,數(shù)據(jù)為 BIT_DATA0, BIT_DATA1, · · ·,BIT_DATAq, q 的范圍為 0 OxFFFFFFFF。一次Modbus數(shù)據(jù)傳輸包括Modbus請求(客戶機發(fā)送給服務(wù)器)和Modbus響應(yīng)(服務(wù)器發(fā)送給客戶機)。Modbus服務(wù)器設(shè)備(從站)接收到Modbus請求后,根據(jù)請求報文中指定的數(shù)據(jù)類型訪問相應(yīng)存儲區(qū)域,將取出的數(shù)據(jù)封裝在Modbus響應(yīng)中回送給客戶機設(shè)備(主站)。如表一所示,Modbus請求報文的數(shù)據(jù)域包括以下幾部分內(nèi)容(I)幀類型長度為I位,內(nèi)容為0,代表請求幀。(2)數(shù)據(jù)類型長度為2位,00代表DWORD類型,01代表WORD類型,10代表BYTE類型,11代表BIT類型。(3)起始地址長度為4字節(jié),表示要讀取的數(shù)據(jù)的起始地址。(4)數(shù)據(jù)數(shù)量長度為4字節(jié),表示要讀取的數(shù)據(jù)的數(shù)量。數(shù)據(jù)域Bytel中的bit4 bitO保留,用O填充。表一
權(quán)利要求
1.一種在Modbus主站和從站間進行大數(shù)據(jù)量通信的方法,其特征在于,包括以下步驟 步驟一 =Modbus主站發(fā)送Modbus請求報文,該Modbus請求報文的數(shù)據(jù)域包括巾貞類型、數(shù)據(jù)類型、起始地址和數(shù)據(jù)數(shù)量四個位場; 步驟二 Modbus從站接收到該Modbus請求報文,根據(jù)該Modbus請求報文中指定的數(shù)據(jù)類型、起始地址和數(shù)據(jù)數(shù)量,從內(nèi)存中取出數(shù)據(jù); 步驟三=Modbus從站將該數(shù)據(jù)分段封裝到Modbus響應(yīng)報文里,形成分段響應(yīng)報文,并依次連續(xù)發(fā)送該分段響應(yīng)報文,該Modbus響應(yīng)報文的數(shù)據(jù)域包括幀類型、數(shù)據(jù)類型、分段協(xié)議、有效數(shù)據(jù)數(shù)量和有效數(shù)據(jù)五個位場; 步驟四=Modbus主站接收該分段響應(yīng)報文,判斷其是否有分段幀錯誤或遺失,如果是則執(zhí)行步驟五,否則執(zhí)行步驟七; 步驟五=Modbus主站根據(jù)該分段協(xié)議計算錯誤或丟失的分段幀中有效數(shù)據(jù)的地址和長度,重新發(fā)送對該有效數(shù)據(jù)的請求報文; 步驟六=Modbus從站返回響應(yīng)報文; 步驟七本次數(shù)據(jù)通信過程結(jié)束。
2.根據(jù)權(quán)利要求I所述的在Modbus主站和從站間進行大數(shù)據(jù)量通信的方法,其特征在于,該Modbus請求報文的數(shù)據(jù)域的第一個字節(jié)的bit7表示巾貞類型,該Modbus請求報文的數(shù)據(jù)域的第一個字節(jié)的bit6_bit5表示數(shù)據(jù)類型,該Modbus請求報文的數(shù)據(jù)域的第二至第五個字節(jié)表示要讀取的數(shù)據(jù)的起始地址;該Modbus請求報文的數(shù)據(jù)域的第六至第九個字節(jié)表示要讀取的數(shù)據(jù)的數(shù)量。
3.根據(jù)權(quán)利要求I或2所述的在Modbus主站和從站間進行大數(shù)據(jù)量通信的方法,其特征在于,所述Modbus響應(yīng)報文的數(shù)據(jù)域的第一個字節(jié)的bit7表示巾貞類型;所述Modbus響應(yīng)報文的數(shù)據(jù)域的第一個字節(jié)的bit6_bit5表示數(shù)據(jù)類型;所述Modbus響應(yīng)報文的數(shù)據(jù)域的第二個字節(jié)作為分段協(xié)議位場;所述Modbus響應(yīng)報文的數(shù)據(jù)域的第三和第四個字節(jié)表示本幀報文攜帶的有效數(shù)據(jù)的數(shù)量;所述Modbus響應(yīng)報文的數(shù)據(jù)域的其它空間都用來表示有效數(shù)據(jù)。
4.根據(jù)權(quán)利要求3所述的在Modbus主站和從站間進行大數(shù)據(jù)量通信的方法,其特征在于,該分段協(xié)議位場包括分段類型和分段計數(shù)信息。
5.根據(jù)權(quán)利要求4所述的在Modbus主站和從站間進行大數(shù)據(jù)量通信的方法,其特征在于,該分段協(xié)議位場長度為I個字節(jié),其中,bit7 bite表示分段類型,00表示單幀無后續(xù),01表示多幀中的起始段,10表示多幀中的中間段,11表示多幀中的結(jié)束段;bit5 bito表示分段計數(shù)信息,表示每個分段幀的序號。
全文摘要
一種在Modbus主站和從站間進行大數(shù)據(jù)量通信的方法,包括以下步驟步驟一Modbus主站發(fā)送Modbus請求報文;步驟二Modbus從站接收到該Modbus請求報文,從內(nèi)存中取出數(shù)據(jù);步驟三Modbus從站將該數(shù)據(jù)分段封裝到Modbus響應(yīng)報文里,形成分段響應(yīng)報文,并依次連續(xù)發(fā)送該分段響應(yīng)報文;步驟四Modbus主站接收該分段響應(yīng)報文,判斷其是否有分段幀錯誤或遺失,如果是則執(zhí)行步驟五,否則執(zhí)行步驟七;步驟五Modbus主站根據(jù)分段協(xié)議計算錯誤或丟失的分段幀中有效數(shù)據(jù)的地址和長度,重新發(fā)送對該有效數(shù)據(jù)的請求報文;步驟六Modbus從站返回響應(yīng)報文;步驟七本次數(shù)據(jù)通信過程結(jié)束。本發(fā)明支持更大的數(shù)據(jù)容量,而且通信效率高,可靠性強,錯誤開銷小。
文檔編號H04L1/00GK102820959SQ20111015612
公開日2012年12月12日 申請日期2011年6月10日 優(yōu)先權(quán)日2011年6月10日
發(fā)明者佟為明, 于皎, 鄭超, 李海波, 王長清 申請人:哈爾濱工業(yè)大學(xué)