本發(fā)明涉及一種RTU多協(xié)議動態(tài)加載的數(shù)據(jù)傳輸方法,具體涉及一種基于嵌入式協(xié)議棧的RTU采集數(shù)據(jù)多協(xié)議通信傳輸方法。它特別適用于不同傳感器數(shù)據(jù)采集應(yīng)用層通信協(xié)議的方便加載與數(shù)據(jù)傳輸,在保證傳感器數(shù)據(jù)采集協(xié)議與外部多種通信終端不變的情況下,實現(xiàn)采集數(shù)據(jù)從RTU到中心站的高效傳輸。
背景技術(shù):
遠(yuǎn)程測控終端系統(tǒng)(RTU)是構(gòu)成水文水資源監(jiān)控系統(tǒng)的核心裝置,由于使用面廣量大,存在不同的RTU設(shè)備生產(chǎn)廠商和不同時期的RTU設(shè)備,這些不同的廠商和不同時期的設(shè)備會有不同的通信或應(yīng)用協(xié)議。在實際應(yīng)用中,由于多種原因,在一個系統(tǒng)會存在大量不同時期、不同廠家的各種設(shè)備,這些設(shè)備的應(yīng)用層通信協(xié)議大多不盡相同,相應(yīng)的,中心站數(shù)據(jù)接收端數(shù)據(jù)接收程序也不同,從而造成信息解析和通信組網(wǎng)的困難。目前解決這一問題的辦法主要有兩種:
第一種:系統(tǒng)業(yè)主或承建方規(guī)定一種協(xié)議,更換其他所有不同協(xié)議的設(shè)備使全網(wǎng)協(xié)議統(tǒng)一。這種方法的缺點是減少了設(shè)備的可選擇性,也不容易保護(hù)和利用既有系統(tǒng)的投資。另外,由于廠商設(shè)備硬件資源和設(shè)計方法的局限,大部分設(shè)備都是針對不同的協(xié)議做不同的軟件版本,產(chǎn)品系列龐雜,通用性差,穩(wěn)定性很難保證,系統(tǒng)建設(shè)成本高。
第二種:不同的協(xié)議在中心站轉(zhuǎn)換,使全網(wǎng)在數(shù)據(jù)應(yīng)用層面統(tǒng)一。這種方法的缺點有兩點:一是增加了中心站軟件的復(fù)雜性。二是全網(wǎng)在數(shù)據(jù)通信層面不能互聯(lián)互通,需要應(yīng)用層分別二次轉(zhuǎn)換,影響數(shù)據(jù)直接使用的時效性與一致性性能。
為解決上述兩種辦法存在的問題,可利用設(shè)備硬件設(shè)計的可擴展和軟件及協(xié)議設(shè)計的抽象化、模塊化,使新開發(fā)的設(shè)備能夠兼容多協(xié)議應(yīng)用選擇,依賴其自身在抽象化的協(xié)議框架,駐留少量程序代碼,通過應(yīng)用層的配置,即時拼裝出新的協(xié)議,并保證其運行的穩(wěn)定可靠。據(jù)此提出一種軟件定義的RTU多協(xié)議數(shù)據(jù)傳輸方法。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的在于提供一種RTU多協(xié)議動態(tài)加載的數(shù)據(jù)傳輸方法,通過采用嵌入式協(xié)議棧作為核心部件,用于適配多種RTU應(yīng)用層通信協(xié)議的拼裝與加載,從而在保證傳感器數(shù)據(jù)采集協(xié)議與外部多種通信終端不變的情況下,實現(xiàn)采集數(shù)據(jù)從RTU到中心站的高效傳輸。
本發(fā)明的技術(shù)解決方案為:
步驟1:對不同的通信組網(wǎng)協(xié)議進(jìn)行抽象,形成統(tǒng)一的協(xié)議包處理框架模型。
分析常用的水文協(xié)議、水資源協(xié)議、地下水協(xié)議以及加密協(xié)議、私有協(xié)議等的組成,將此類用戶通信協(xié)議抽象成以下幾個部分:協(xié)議結(jié)構(gòu)模塊、協(xié)議控制模塊、協(xié)議-設(shè)備銜接模塊、數(shù)據(jù)緩沖模塊和硬件驅(qū)動模塊。各模塊主要功能如下:
(1)協(xié)議結(jié)構(gòu)模塊主要包括協(xié)議數(shù)據(jù)包/單元(PDU)的構(gòu)造(組包或封裝)、解析(拆包或解封裝),負(fù)責(zé)將待發(fā)送的數(shù)據(jù)報文按照選定的協(xié)議封裝成PDU,同時完成對接收的PDU進(jìn)行命令解析。
(2)協(xié)議控制模塊主要包括連接管理和傳輸控制,負(fù)責(zé)監(jiān)聽上層應(yīng)用程序的命令,完成建立連接、拆除連接、超時控制、發(fā)送數(shù)據(jù)、接收數(shù)據(jù)等命令。
(3)協(xié)議-設(shè)備銜接模塊主要包括RTU設(shè)備關(guān)聯(lián)和傳輸模式管理,負(fù)責(zé)與RTU設(shè)備支持的協(xié)議的關(guān)聯(lián)綁定,設(shè)置設(shè)備IP地址、端口、短消息等參數(shù),配置首發(fā)、重發(fā)、組播(多中心發(fā)送)和信道切換等方式。
(4)數(shù)據(jù)緩沖模塊主要包括數(shù)據(jù)發(fā)送控制和緩沖隊列管理,負(fù)責(zé)將待發(fā)送的PDU按照數(shù)據(jù)量大小、要求的時間間隔和數(shù)據(jù)類型,調(diào)度執(zhí)行基于串口的數(shù)據(jù)輸出。
(5)硬件驅(qū)動模塊主要包括數(shù)據(jù)通信口(COM)、參數(shù)配置口(CON)和外接設(shè)備口(USB),負(fù)責(zé)對多種形態(tài)的串行接口部件和設(shè)備的驅(qū)動使能,實現(xiàn)與RTU總線、外部計算和存儲設(shè)備的接入。
步驟2:生成嵌入式協(xié)議棧。
嵌入式協(xié)議棧保存可執(zhí)行的多種用戶通信協(xié)議代碼。根據(jù)步驟一的協(xié)議包處理框架模型,將各模塊的功能、算法進(jìn)行標(biāo)準(zhǔn)化、模塊化代碼設(shè)計,形成常用水文協(xié)議、水資源協(xié)議、地下水協(xié)議以及加密協(xié)議、私有協(xié)議等的“函數(shù)庫”,其中私有協(xié)議存放用戶自定義的特殊協(xié)議。這些協(xié)議組件以特有的嵌入式系統(tǒng)的“虛函數(shù)”形式寫入CPU的flash空間中,包含協(xié)議名稱、通信參數(shù)、數(shù)據(jù)類型等要素,供RTU設(shè)備在初始化和運行時裝配、加載。通過嵌入式協(xié)議棧來實現(xiàn)不同協(xié)議的自動加載和協(xié)議數(shù)據(jù)包的統(tǒng)一解析調(diào)度運行。
步驟3:協(xié)議配置與加載。
通過輸入?yún)f(xié)議和相應(yīng)的RTU設(shè)備配置參數(shù),對協(xié)議進(jìn)行加載控制。配置指示包括應(yīng)用協(xié)議指示、底層通信方式指示、本機和接收方IP地址、端口號、MAC地址綁定,短信參數(shù)等。跟據(jù)協(xié)議名稱、通信參數(shù)、數(shù)據(jù)類型等參數(shù)指示,定位選擇相應(yīng)的虛函數(shù),按照步驟1的五個模塊,快速組裝成指定的應(yīng)用協(xié)議,并與一個外部通信終端相應(yīng)的鏈路層協(xié)議參數(shù)關(guān)聯(lián),啟動RTU初始化過程,確定其與中心站的數(shù)據(jù)傳輸方式,完成通信雙方的協(xié)議加載。
步驟4:執(zhí)行協(xié)議狀態(tài)機算法,生成協(xié)議數(shù)據(jù)包/單元(PDU)。
一旦協(xié)議加載成功,系統(tǒng)將根據(jù)設(shè)置的數(shù)據(jù)發(fā)送觸發(fā)機制(如中斷或其他事件消息),對實際接收到的傳感器數(shù)據(jù)報文包頭識別、校驗和內(nèi)容的PDU封裝,并啟動數(shù)據(jù)傳輸與控制。
本發(fā)明采用的面向字符型的狀態(tài)機協(xié)議棧算法,并遵循《水資源監(jiān)測數(shù)據(jù)傳輸規(guī)約》(SZY206-2012),表示協(xié)議在運行時的工作狀態(tài)。根據(jù)加載的協(xié)議及其對應(yīng)的狀態(tài)機參數(shù),當(dāng)接收到數(shù)據(jù)處理信號后,從接收數(shù)據(jù)緩沖區(qū)取出協(xié)議參數(shù)設(shè)置個數(shù)的字節(jié)來進(jìn)行本協(xié)議包頭匹配,協(xié)議包頭匹配不成功時丟棄所取的數(shù)據(jù),同時進(jìn)行緩沖區(qū)移位以便于再次取數(shù),這個操作被稱為包頭處理狀態(tài)(狀態(tài)A);當(dāng)協(xié)議包頭匹配成功即轉(zhuǎn)入?yún)f(xié)議數(shù)據(jù)包處理,處理具體的PDU內(nèi)容(狀態(tài)B)。
在狀態(tài)B中又分三個具體的子狀態(tài):
(1)包頭匹配成功并進(jìn)行緩沖區(qū)移位操作后即進(jìn)入?yún)f(xié)議包長處理狀態(tài)(狀態(tài)B-子狀態(tài)a);
(2)知道協(xié)議包長(L字節(jié))后,狀態(tài)機控制轉(zhuǎn)入?yún)f(xié)議取數(shù)狀態(tài)(狀態(tài)B-子狀態(tài)b)進(jìn)行協(xié)議取數(shù);
(3)讀取接收數(shù)據(jù)緩沖區(qū)L字節(jié)后,狀態(tài)機控制轉(zhuǎn)入?yún)f(xié)議校驗狀態(tài)(狀態(tài)B-子狀態(tài)c);
(4)數(shù)據(jù)包校驗通過后,取走整個PDU的數(shù)據(jù)部分,并發(fā)出協(xié)議數(shù)據(jù)處理信號啟動后續(xù)數(shù)據(jù)處理。
(5)最后,對接收數(shù)據(jù)緩沖區(qū)余下的數(shù)據(jù)啟動下一次協(xié)議狀態(tài)機處理過程(回到狀態(tài)A)。
步驟5:完成數(shù)據(jù)傳輸與控制。
經(jīng)過步驟4處理后的數(shù)據(jù),輸入到“數(shù)據(jù)上報緩沖區(qū)”隊列中,由數(shù)據(jù)緩沖模塊與協(xié)議-設(shè)備銜接模塊和硬件驅(qū)動模塊共同完成數(shù)據(jù)發(fā)送和重發(fā)功能。上報成功的數(shù)據(jù)在上報完成后即丟棄(原始數(shù)據(jù)事前已存入RTU設(shè)備的存儲器中),對于上報不成功的數(shù)據(jù),專門開辟了“補傳數(shù)據(jù)緩沖區(qū)”來區(qū)別存放。
每次啟動上報時都是優(yōu)先發(fā)送數(shù)據(jù)上報緩沖區(qū)內(nèi)的數(shù)據(jù),待數(shù)據(jù)上報緩沖區(qū)的數(shù)據(jù)全部發(fā)完后,再按后進(jìn)先出的順序控制發(fā)送數(shù)據(jù)補傳緩沖區(qū)內(nèi)的數(shù)據(jù),保證實時數(shù)據(jù)的優(yōu)先上報。
這樣無論系統(tǒng)決定采用何種應(yīng)用層協(xié)議,由于設(shè)備已經(jīng)抽象出了協(xié)議的處理框架模型,只需在RTU設(shè)備軟件中增加相應(yīng)的協(xié)議配置選擇參數(shù)和對應(yīng)協(xié)議協(xié)議包的處理狀態(tài)機等簡單代碼,即可完成新協(xié)議的開發(fā)和投用,設(shè)備本身整體的應(yīng)用功能和嵌入式協(xié)議棧框架并不需要修改和開發(fā),從而使短時間內(nèi)開發(fā)并加載新協(xié)議并保證設(shè)備的穩(wěn)定可靠運行成為可能。本發(fā)明所采用的技術(shù)綜合上述目前解決這一難題的兩種方法的優(yōu)點、克服了上述兩種方法的缺點,使不同設(shè)備和不同協(xié)議在同一網(wǎng)絡(luò)里可以統(tǒng)一使用,豐富了設(shè)備選擇的多樣性和協(xié)議組網(wǎng)的靈活性。
本發(fā)明具有以下顯著特點:
1)通過軟件定義的方式,抽象RTU應(yīng)用層協(xié)議處理框架,以手動配置后自動加載配置的方式,確定RTU的通信工作模式,顯著提高了遙測數(shù)據(jù)在不同用戶協(xié)議和網(wǎng)絡(luò)環(huán)境下傳輸?shù)目蓴U展性和可靠性。
2)以快速組裝和加載的方式,使RTU和中心站同時初始化,實現(xiàn)配置一次自動加載并永久使用,同時也能在用戶協(xié)議和組網(wǎng)方式改變的情況下,重新配置加載,實現(xiàn)多次配置靈活更新,有效降低整個系統(tǒng)的建設(shè)周期和費用。
本發(fā)明能夠解決多種應(yīng)用層協(xié)議的動態(tài)配置與加載問題,提高RTU數(shù)據(jù)傳輸在新老系統(tǒng)集成建設(shè)中的適應(yīng)能力。
附圖說明
圖1:為本發(fā)明的邏輯原理圖。
圖2:為本發(fā)明的多協(xié)議狀態(tài)機處理流程圖。
具體實施方式
下面結(jié)合附圖對本發(fā)明進(jìn)行進(jìn)一步描述:
圖1是本發(fā)明的邏輯原理圖,由數(shù)據(jù)發(fā)送控制模塊、嵌入式協(xié)議棧和硬件接口驅(qū)動模塊組成。數(shù)據(jù)發(fā)送控制模塊用于接收、緩存來自各類水文、水資源、氣象、環(huán)境傳感器的數(shù)據(jù),并根據(jù)選擇的用戶應(yīng)用協(xié)議,形成協(xié)議數(shù)據(jù)單元(PDU),執(zhí)行原始數(shù)據(jù)發(fā)送和重發(fā);嵌入式協(xié)議棧抽象出了協(xié)議的處理框架模型,實現(xiàn)了常用的水文協(xié)議、水資源協(xié)議、地下水協(xié)議、加密協(xié)議、私有協(xié)議等傳輸協(xié)議核心算法,形成虛擬的“函數(shù)庫”,保存在flash空間中,接收用戶配置指示,選擇合適的函數(shù),快速組裝成指定的應(yīng)用協(xié)議,并與一個外部通信終端相應(yīng)的鏈路層協(xié)議參數(shù)關(guān)聯(lián),啟動RTU初始化過程,確定其與中心站的數(shù)據(jù)傳輸方式。硬件接口驅(qū)動模塊采用通用串行接口,連接外部各種通信終端或裝置,將數(shù)據(jù)發(fā)送控制模塊傳來的應(yīng)用層PDU封裝成數(shù)據(jù)鏈路層的數(shù)據(jù)幀,最終完成數(shù)據(jù)幀的發(fā)送和應(yīng)答處理。
圖2為本發(fā)明的多協(xié)議狀態(tài)機處理流程圖,是協(xié)議處理的核心算法,主要由包頭匹配/校驗、協(xié)議數(shù)據(jù)包/單元處理組成,按照初始化配置確定的協(xié)議類型,實施協(xié)議加載。按照《水資源監(jiān)測數(shù)據(jù)傳輸規(guī)約》(SZY206-2012)規(guī)定的控制字符,數(shù)據(jù)緩沖任務(wù)發(fā)出數(shù)據(jù)處理信號量通知協(xié)議狀態(tài)機處理任務(wù)來進(jìn)行具體的協(xié)議包頭狀態(tài)機處理,進(jìn)入狀態(tài)A,識別待發(fā)送數(shù)據(jù)報文的包頭;對于匹配成功的包頭進(jìn)行協(xié)議數(shù)據(jù)處理,進(jìn)入狀態(tài)B,形成特定應(yīng)用協(xié)議數(shù)據(jù)包/單元(PDU),然后進(jìn)行校驗,通過校驗的PDU存儲到上報數(shù)據(jù)緩沖區(qū)中,啟動后續(xù)數(shù)據(jù)發(fā)送處理,并繼續(xù)對剩余接收緩沖區(qū)中的數(shù)據(jù)進(jìn)行協(xié)議狀態(tài)機處理。
本發(fā)明的工作過程如下:
首先是對不同的通信組網(wǎng)協(xié)議進(jìn)行抽象,形成統(tǒng)一的協(xié)議包處理框架模型,生成嵌入式協(xié)議棧,在嵌入式協(xié)議棧里對各種協(xié)議進(jìn)行解析抽象,形成算法可執(zhí)行代碼;然后在運行時通過配置參數(shù),實現(xiàn)不同協(xié)議的自動加載,由協(xié)議狀態(tài)機來對采集到的數(shù)據(jù)報進(jìn)行按照面向字節(jié)型的控制協(xié)議方式進(jìn)行組幀,形成應(yīng)用協(xié)議數(shù)據(jù)包/單元(PDU),保存在上報數(shù)據(jù)緩沖隊列中;最后通過數(shù)據(jù)緩沖模塊調(diào)用相應(yīng)的底層數(shù)據(jù)終端接口程序完成PDU的發(fā)送
本發(fā)明的協(xié)議算法可內(nèi)置于嵌入式RTU多協(xié)議自動適配器中,當(dāng)系統(tǒng)需要用一種當(dāng)前設(shè)備不支持的協(xié)議時,由于已經(jīng)抽象出了協(xié)議的處理框架模型,只需在設(shè)備軟件中增加相應(yīng)的協(xié)議配置選擇參數(shù)和對應(yīng)協(xié)議包的處理狀態(tài)機等簡單代碼,即可完成新協(xié)議的開發(fā)和投用,設(shè)備本身整體的應(yīng)用功能和嵌入式協(xié)議棧框架并不需要修改和開發(fā),從而使短時間內(nèi)開發(fā)并加載新協(xié)議并保證設(shè)備的穩(wěn)定可靠運行成為可能。
在具體的應(yīng)用中首先根據(jù)選定的協(xié)議在全網(wǎng)加載和初始化,使全網(wǎng)運行這個協(xié)議,此時RTU嵌入式協(xié)議棧便可根據(jù)選定的協(xié)議對數(shù)據(jù)采集單元的各種基礎(chǔ)元數(shù)據(jù)信息進(jìn)行組幀和發(fā)送,在中心站或其他數(shù)據(jù)接收端根據(jù)所選定的協(xié)議算法解析還原原始數(shù)據(jù)入庫共上層使用,從而完成了數(shù)據(jù)的收發(fā)的全過程。