于興晗,蓋優(yōu)普,侯 煜,郭 易
(中國水利水電科學(xué)研究院水情水調(diào)事業(yè)部,北京市 100038)
一種三層協(xié)議定制機(jī)制模型的設(shè)計與實現(xiàn)
于興晗,蓋優(yōu)普,侯 煜,郭 易
(中國水利水電科學(xué)研究院水情水調(diào)事業(yè)部,北京市 100038)
本文介紹了一種可以現(xiàn)場修改協(xié)議和增加新協(xié)議的三層協(xié)議定制機(jī)制模型的設(shè)計與實現(xiàn),詳細(xì)闡明三層協(xié)議定制機(jī)制模型的各種相關(guān)原理和關(guān)鍵技術(shù),介紹了兩種編程實現(xiàn)結(jié)構(gòu),適合匯編和C語言的多表分析結(jié)構(gòu)和適合C++、C#和Java等高級語言的單表映射結(jié)構(gòu)。同時,詳細(xì)介紹了在實際工程上使用單表映射結(jié)構(gòu)在嵌入式系統(tǒng)Windows Ce上開發(fā)三層協(xié)議定制機(jī)制模型的過程,在一定程度上解決了解決水利信息化系統(tǒng)中多源設(shè)備的整合以及不同代產(chǎn)品的混合使用的問題。
協(xié)議定制;嵌入式;多表分析;單表映射
在我國現(xiàn)行的水利數(shù)據(jù)檢測領(lǐng)域,數(shù)據(jù)采集器都是采用單片機(jī)+程序的硬件開發(fā)技術(shù)來實現(xiàn)的,整個水利數(shù)據(jù)采集系統(tǒng)的工作過程是,數(shù)據(jù)采集器通過傳感器收集現(xiàn)場數(shù)據(jù),一部分?jǐn)?shù)據(jù)存儲在本地,大部分?jǐn)?shù)據(jù)需要通過無線通信技術(shù)(GSM/GPRS/超短波/北斗衛(wèi)星/Inmarsat等)或者是有線(PSTN/internet等)發(fā)送到中心站,中心站在將接收到的數(shù)據(jù)進(jìn)行處理、為洪水預(yù)報、防洪調(diào)度和水資源合理開發(fā)利用決策提供原始數(shù)據(jù)[5][6]。為節(jié)省傳輸信道的帶寬,減少數(shù)據(jù)誤碼率,保證數(shù)據(jù)的可靠性,大部分的水利數(shù)據(jù)在信道中傳輸時都采用協(xié)議編碼,將原始數(shù)據(jù)按照規(guī)定的協(xié)議進(jìn)行編碼,將編碼后的數(shù)據(jù)包經(jīng)由信道傳輸給中心站,中心站接到數(shù)據(jù)后按照協(xié)議的規(guī)定進(jìn)行解碼還原成原始數(shù)據(jù)再進(jìn)一步處理。
大部分水利數(shù)據(jù)采集系統(tǒng)安裝完成以后,只支持一種協(xié)議數(shù)據(jù)傳輸,當(dāng)需要修改協(xié)議(包括增加數(shù)據(jù)類型、增加數(shù)據(jù)傳輸種類、添加新型數(shù)據(jù)采集器等)或者是增加新的協(xié)議時,整個水利數(shù)據(jù)采集系統(tǒng)(數(shù)據(jù)采集端—遙測站,數(shù)據(jù)接收端—中心站)軟件都需要重新開發(fā),整個程序編碼都需要重頭編寫,所有的工作流程都需要重新實現(xiàn),不但開發(fā)的周期長,效率低下,而且使整個系統(tǒng)繼承困難,不利于產(chǎn)品更新?lián)Q代。
目前,我國許多早期搭建的水利數(shù)據(jù)采集系統(tǒng)都到了需要更新?lián)Q代的時候,隨著生產(chǎn)水利數(shù)據(jù)采集器設(shè)備的廠家增多,通信協(xié)議也越來越多,每個廠家都有自己的獨有的通信協(xié)議,不同廠家之間的設(shè)備不能替換,結(jié)果就導(dǎo)致用戶在選擇水利數(shù)據(jù)采集器時,對協(xié)議的支持就成了重中之重,只有支持原協(xié)議的設(shè)備才能更換原設(shè)備;在搭建新的水利數(shù)據(jù)采集系統(tǒng)時,由于通信信道種類的增多,用戶對于支持多協(xié)議的數(shù)據(jù)采集系統(tǒng)的需求也越來越多,比較常用的都是雙協(xié)議,目前大部分的水利數(shù)據(jù)采集系統(tǒng)的中心站都是采用使用多個數(shù)據(jù)采集軟件,共享數(shù)據(jù)庫來實現(xiàn)的;這種實現(xiàn)辦法雖然在一定程度上解決了多源設(shè)備所導(dǎo)致的協(xié)議增多問題,但是隨著數(shù)據(jù)采集器設(shè)備種類的增多中心站的負(fù)擔(dān)將越來越重,最終會導(dǎo)致多個數(shù)據(jù)采集軟件互相沖突,中心站阻塞丟失數(shù)據(jù)。
針對上述弊端,大部分廠家采取了簡化協(xié)議結(jié)構(gòu)或單獨設(shè)計協(xié)議子程序的做法,在更改協(xié)議時只需修改協(xié)議子程序即可,盡量減少二次開發(fā)的工作量,這種方法極大地減少了當(dāng)協(xié)議變化或者是增加新元素時修改程序的工作量,但是這種方法主要還是依靠開發(fā)者來實現(xiàn)不支持第三方開發(fā),不利于技術(shù)的推廣。本文描述了一種協(xié)議定制機(jī)制模型——三層協(xié)議定制機(jī)制模型,該機(jī)制使我們的產(chǎn)品具有使用其他廠家協(xié)議的能力,只需要簡單地設(shè)置和編寫少量的代碼即可實現(xiàn)第三方協(xié)議的加入,讀者只需按照編程指導(dǎo)操作就可以開發(fā)出自己的協(xié)議。
三層協(xié)議定制機(jī)制模型是在充分了解協(xié)議棧工作原理和水利數(shù)據(jù)采集系統(tǒng)工作流程的情況下,所抽象出來的協(xié)議定制模型,這種模型結(jié)構(gòu)清晰,易于實現(xiàn),當(dāng)用戶需要修改協(xié)議時只需要通過簡單地設(shè)置就可實現(xiàn),而不需要修改整個程序。
三層協(xié)議定制機(jī)制模型是在充分了解水利數(shù)據(jù)采集系統(tǒng)工作流程的基礎(chǔ)上實現(xiàn)的,該機(jī)制的加入不會影響整個水利數(shù)據(jù)采集系統(tǒng)原有的工作流程。用戶只需按照用戶編程指導(dǎo)手冊經(jīng)過簡單地設(shè)置和編寫少量的代碼,就可將第三方協(xié)議加載到水利數(shù)據(jù)采集系統(tǒng)。
三層協(xié)議定制模型的建立,采用兩種編程分析模型:表格化編程模型,支持匯編和C語言編程,非嵌入式的數(shù)據(jù)采集器可以使用此模型;對象化編程模型,支持C++、C#和Java等高級語言,嵌入式數(shù)據(jù)采集器和中心站均可使用此模型。
隨著嵌入式開發(fā)技術(shù)的發(fā)展,將嵌入式開發(fā)技術(shù)應(yīng)用到水利數(shù)據(jù)采集系統(tǒng)也成為必然,在嵌入式開發(fā)技術(shù)當(dāng)中,C、C++、C#和Java是嵌入式開發(fā)編程主要使用的開發(fā)語言,三層協(xié)議定制機(jī)制模型可以使用這些語言來實現(xiàn),因此三層協(xié)議定制機(jī)制模型可以很容易在嵌入式操作系統(tǒng)上實現(xiàn),本文所介紹的實現(xiàn)就是在嵌入式操作系統(tǒng)Windows Ce[1-4]上實現(xiàn)的。
三層協(xié)議定制機(jī)制模型指的是,協(xié)議定制機(jī)制模型的結(jié)構(gòu)主要分為三層,標(biāo)簽行為層、標(biāo)簽數(shù)據(jù)層和標(biāo)簽影射層,結(jié)構(gòu)框圖如圖1所示,通過標(biāo)簽數(shù)據(jù)、標(biāo)簽映射和標(biāo)簽行為的對應(yīng)關(guān)系來實現(xiàn)對原始數(shù)據(jù)的編解碼,從而實現(xiàn)對協(xié)議的定制。
圖1 三層協(xié)議定制模型結(jié)構(gòu)框圖
在水利數(shù)據(jù)采集系統(tǒng)中,傳輸?shù)臄?shù)據(jù)必須包含傳感器名、站號、時間和采樣值,只有包含這些信息的數(shù)據(jù)我們才認(rèn)為是有效的數(shù)據(jù),針對不同的功能(標(biāo)簽行為),所傳數(shù)據(jù)所包含的內(nèi)容也可能不同,在實現(xiàn)時使用不同的開發(fā)語言所形成的編碼也不同,為解決這一矛盾,在設(shè)計三層協(xié)議定制機(jī)制時我們引入了標(biāo)簽概念。標(biāo)簽指的是水利數(shù)據(jù)采集系統(tǒng)所傳原始數(shù)據(jù)與協(xié)議描述語言之間的一一映射關(guān)系,包括數(shù)據(jù)、映射和行為。通過該映射來實現(xiàn)原始數(shù)據(jù)與功能、協(xié)議和代碼之間的一一對應(yīng)關(guān)系,如圖2所示。
數(shù)據(jù)名:指的是水利數(shù)據(jù)采集系統(tǒng)中所使用的原始數(shù)據(jù)描述符(助記符),如水位1/Water1、雨量/Rain和電壓/Volt等。
圖2 標(biāo)簽、傳感器名和傳感器名之間的關(guān)系框圖
點號:指的是原始數(shù)據(jù)名在協(xié)議編碼中所對應(yīng)的映射值,該值是由協(xié)議唯一確定,如短信協(xié)議用83表示水位1,用84表示雨量;SSP協(xié)議用20表示水位,用1、21表示雨量等。
協(xié)議:指的是對原始數(shù)據(jù)編碼時所采用的協(xié)議,當(dāng)協(xié)議確定后其他元素都是唯一的,如短信協(xié)議用SMS表示,sutron公司的協(xié)議用SSP表示等。
行為:指的是傳輸數(shù)據(jù)所對應(yīng)的水利數(shù)據(jù)采集系統(tǒng)的行為,如定時報,平安報和閥值報等,由水利數(shù)據(jù)采集系統(tǒng)的硬件功能唯一確定。
操作碼:指的是協(xié)議所規(guī)定的與水利數(shù)據(jù)采集系統(tǒng)行為一一對應(yīng)數(shù)據(jù),如時段報用03表示,當(dāng)前報由02表示等,由協(xié)議唯一確定。
數(shù)據(jù)類型:指的是原始數(shù)據(jù)值與協(xié)議描述語言所表示的類型之間的一一對應(yīng)關(guān)系,如水位用浮點數(shù)表示,當(dāng)用SMS協(xié)議時用02表示,SSP協(xié)議用03表示等。
標(biāo)簽數(shù)據(jù),本文所提的標(biāo)簽數(shù)據(jù)指的是在水利數(shù)據(jù)采集系統(tǒng)中,所有可以被指定協(xié)議描述所包含的數(shù)據(jù);標(biāo)簽數(shù)據(jù)的內(nèi)容與協(xié)議的規(guī)定有關(guān),不同協(xié)議所指定的標(biāo)簽數(shù)據(jù)可以相同,標(biāo)簽數(shù)據(jù)與協(xié)議所描述的數(shù)據(jù)必須要一一對應(yīng);如當(dāng)我們增添的協(xié)議只要求傳輸一組雨量數(shù)據(jù)時,那么該協(xié)議所指定的標(biāo)簽數(shù)據(jù)就只包含一組數(shù)據(jù)雨量數(shù)據(jù)。
標(biāo)簽映射指的是標(biāo)簽數(shù)據(jù)在協(xié)議中所對應(yīng)的編碼,一般用數(shù)值來表示,標(biāo)簽映射與標(biāo)簽數(shù)據(jù)和協(xié)議相關(guān),在指定協(xié)議的情況下,標(biāo)簽映射與標(biāo)簽數(shù)據(jù)是一一對應(yīng)的。如針對SMS協(xié)議標(biāo)簽數(shù)據(jù)水位1所對應(yīng)的標(biāo)簽映射是83。
標(biāo)簽行為指的是水利數(shù)據(jù)采集器的具體功能與指定協(xié)議所描述的操作碼之間的映射關(guān)系,不是一一對應(yīng),如針對SMS協(xié)議,水利數(shù)據(jù)采集器的平安報可能需要時段報和當(dāng)前報兩個協(xié)議操作碼,而數(shù)據(jù)采集器的閥值報就需要當(dāng)前報一個操作碼。
整個機(jī)制的運(yùn)行主要分兩個過程,發(fā)送數(shù)據(jù)時的標(biāo)簽數(shù)據(jù)編碼和接收數(shù)據(jù)時的標(biāo)簽數(shù)據(jù)的解碼過程,編碼原理框圖如圖3所示。
圖3 協(xié)議定制機(jī)制的編碼原理框圖
系統(tǒng)在發(fā)送數(shù)據(jù)時,首先通過加載標(biāo)簽庫來確定需要發(fā)送的標(biāo)簽數(shù)據(jù),準(zhǔn)備好標(biāo)簽數(shù)據(jù)后系統(tǒng)在通過標(biāo)簽行為來確定需要加載的標(biāo)簽映射模塊,同時,按照協(xié)議規(guī)定對準(zhǔn)備好的標(biāo)簽數(shù)據(jù)進(jìn)行打包,打包后形成協(xié)議數(shù)據(jù),將協(xié)議數(shù)據(jù)通過通信設(shè)備發(fā)往中心站。
接收數(shù)據(jù)時,原理框圖如圖4所示。
系統(tǒng)首先將數(shù)據(jù)讀入系統(tǒng),通過標(biāo)簽庫來確定需加載的協(xié)議模塊,按照協(xié)議對接收數(shù)據(jù)進(jìn)行解析,將解析后的標(biāo)簽數(shù)據(jù)送入標(biāo)簽庫來分析,有對應(yīng)的行為則按照行為來處理,無則丟棄。
圖4 協(xié)議定制機(jī)制的接收原理框圖
發(fā)送數(shù)據(jù)時“→加載標(biāo)簽→準(zhǔn)備標(biāo)簽數(shù)據(jù)→查找標(biāo)簽行為→加載標(biāo)簽映射/協(xié)議模塊→按協(xié)議對標(biāo)簽數(shù)據(jù)打包→協(xié)議數(shù)據(jù)→”,接收數(shù)據(jù)時“→讀取端口數(shù)據(jù)→加載標(biāo)簽庫→加載協(xié)議模塊→按協(xié)議解析數(shù)據(jù)/標(biāo)簽數(shù)據(jù)→查找標(biāo)簽行為→處理數(shù)據(jù)→”;通過三層協(xié)議定制機(jī)制模型工作流程可以看出整個機(jī)制的運(yùn)行都是依賴于標(biāo)簽,即標(biāo)簽是整個協(xié)議定制機(jī)制模型得以存在的核心關(guān)鍵技術(shù),其執(zhí)行效率決定整個協(xié)議定制機(jī)制模型的運(yùn)行效率。
標(biāo)簽數(shù)據(jù)成員的確定要能完整表述水利數(shù)據(jù)采集系統(tǒng)通信協(xié)議所需的元素,標(biāo)簽數(shù)據(jù)成員的設(shè)定對用戶及三層協(xié)議定制模型的實現(xiàn)都有著比較大的影響,標(biāo)簽數(shù)據(jù)成員過少,則不足以解決原始數(shù)據(jù)和協(xié)議編碼之間的一一映射關(guān)系,標(biāo)簽數(shù)據(jù)過多則會降低協(xié)議層對標(biāo)簽數(shù)據(jù)處理的效率。所以,確定適當(dāng)?shù)臉?biāo)簽數(shù)據(jù)成員,最終會影響到整個協(xié)議定制機(jī)制模型的執(zhí)行效率。
標(biāo)簽庫是實現(xiàn)三層協(xié)議定制機(jī)制的關(guān)鍵技術(shù),該庫的實現(xiàn)依賴于水利數(shù)據(jù)采集系統(tǒng)的具體功能和通信協(xié)議的規(guī)定,是水利數(shù)據(jù)采集系統(tǒng)具體功能和通信協(xié)議規(guī)定的組合抽象,是水利數(shù)據(jù)采集系統(tǒng)具體功能在通信協(xié)議上的映射體現(xiàn),標(biāo)簽庫的復(fù)雜程度將會影響整個機(jī)制的運(yùn)行效率,實現(xiàn)時還與所使用的開發(fā)語言有關(guān)。標(biāo)簽庫主要包含6個映射,原始數(shù)據(jù)名映射,協(xié)議映射,操作碼映射,行為映射,數(shù)據(jù)類型映射和點號映射。
三層協(xié)議定制機(jī)制模型的實現(xiàn),主要與水利數(shù)據(jù)采集系統(tǒng)的具體功能、協(xié)議和開發(fā)語言有關(guān),可以采用兩種編程結(jié)構(gòu)來實現(xiàn),適用于匯編、C語言的多表分析結(jié)構(gòu)和適合使用C++、C#和Java等高級語言實現(xiàn)的單表映射結(jié)構(gòu)。由于篇幅有限,本文只詳細(xì)介紹了單表映射結(jié)構(gòu)的實現(xiàn)細(xì)節(jié)。
這個編程模型根據(jù)三層協(xié)議定制模型的結(jié)構(gòu)圖,將整個協(xié)議定制機(jī)制模型的實現(xiàn)通過三部分來實現(xiàn),標(biāo)簽行為表,標(biāo)簽數(shù)據(jù)表和標(biāo)簽映射表(協(xié)議結(jié)構(gòu)表),結(jié)構(gòu)框圖如圖5所示。
圖5 協(xié)議定制機(jī)制多表分析編程結(jié)構(gòu)
標(biāo)簽行為表:水利數(shù)據(jù)采集系統(tǒng)具體功能在協(xié)議上的表述,一般為多個操作碼的組合,例如水利數(shù)據(jù)采集器的定時報功能可以用通信協(xié)議中的時段報操作碼+當(dāng)前報操作碼來表示。
標(biāo)簽數(shù)據(jù)表:水利數(shù)據(jù)采集系統(tǒng)具體功能,在協(xié)議規(guī)定下所應(yīng)包含的采集數(shù)據(jù),如在定時報下需要上傳水位、雨量、電池電壓等數(shù)據(jù)。
標(biāo)簽映射表:根據(jù)標(biāo)簽行為表和標(biāo)簽數(shù)據(jù)表的組合將會得到一個由系統(tǒng)具體功能所決定的數(shù)據(jù)段組合,在按照標(biāo)簽數(shù)據(jù)的映射關(guān)系將其轉(zhuǎn)換成協(xié)議所規(guī)定的編碼,最后形成有系統(tǒng)功能所決定的編碼數(shù)據(jù)——協(xié)議數(shù)據(jù)。
在編程實現(xiàn)時包含兩個部分,將上述的多表分析編程模型作為一個整體,以系統(tǒng)具體功能作為索引,建立一個系統(tǒng)功能索引表即可實現(xiàn)整個操作;在接收數(shù)據(jù)時,過程與上述的過程相反。在使用匯編語言或C語言實現(xiàn)時,建立表格應(yīng)適當(dāng)保留存儲位置以備系統(tǒng)擴(kuò)展使用,當(dāng)上述表格變?yōu)閯討B(tài)標(biāo)格,用戶可以通過設(shè)置輸入修改時即可實現(xiàn)協(xié)議的修改,增加新的標(biāo)簽行為表、標(biāo)簽數(shù)據(jù)表和標(biāo)簽映射表即可實現(xiàn)新協(xié)議的加入。
這個編程結(jié)構(gòu)根據(jù)三層協(xié)議定制模型的結(jié)構(gòu),將整個協(xié)議定制機(jī)制模型的實現(xiàn)通過兩部分來實現(xiàn),標(biāo)簽數(shù)據(jù)表和標(biāo)簽解析庫。在這個結(jié)構(gòu)中,以整個三層協(xié)議定制模型為對象,可以封裝成一個完整獨立的標(biāo)簽類,該類以標(biāo)簽數(shù)據(jù)作為類中的數(shù)據(jù)成員,標(biāo)簽映射和標(biāo)簽行為作為類中的數(shù)據(jù)操作,將該類進(jìn)行編譯形成標(biāo)簽解析庫。這種編程模型支持面向?qū)ο缶幊陶Z言,特別適合在嵌入式系統(tǒng)上推廣。
與用戶交互的標(biāo)簽設(shè)置界面如圖6所示。
圖6 與用戶交互的標(biāo)簽設(shè)置界面
通過該界面的設(shè)置,使系統(tǒng)所用的標(biāo)簽數(shù)據(jù)與標(biāo)簽解析庫對應(yīng)起來。在本系統(tǒng)中設(shè)置界面主要包括三部分,標(biāo)簽數(shù)據(jù)列表,顯示系統(tǒng)所有的標(biāo)簽數(shù)據(jù);標(biāo)簽數(shù)據(jù)屬性輸入?yún)^(qū),主要包括原始數(shù)據(jù)的“傳感器名”、對應(yīng)使用協(xié)議中的“點號”、傳輸數(shù)據(jù)時使用的“協(xié)議”、協(xié)議當(dāng)中的“操作碼”、發(fā)觸發(fā)發(fā)送數(shù)據(jù)的系統(tǒng)行為“操作”和傳輸數(shù)據(jù)所使用的“數(shù)據(jù)類型”共6個文本輸入框;功能按鍵區(qū),主要包括6個功能按鍵,“添加”增加標(biāo)簽數(shù)據(jù)按鍵,通過該按鍵將標(biāo)簽數(shù)據(jù)屬性輸入?yún)^(qū)的數(shù)據(jù)添加到系統(tǒng)標(biāo)簽數(shù)據(jù)列表的最后一行,“修改”標(biāo)簽數(shù)據(jù)按鍵,將在標(biāo)簽數(shù)據(jù)列表中選中的標(biāo)簽數(shù)據(jù)內(nèi)容按照標(biāo)簽數(shù)據(jù)輸入?yún)^(qū)的內(nèi)容修改,“刪除”標(biāo)簽數(shù)據(jù)按鍵,刪除在標(biāo)簽數(shù)據(jù)列表中選中的標(biāo)簽數(shù)據(jù),后一行數(shù)據(jù)上移,“清除”系統(tǒng)所有標(biāo)簽數(shù)據(jù)按鍵,“確定”修改并退出按鍵和不保留修改并“退出”按鍵。
如何對標(biāo)簽數(shù)據(jù)進(jìn)行處理將影響整個機(jī)制運(yùn)行的效率,在本系統(tǒng)中,采用了自定義格式文件的方式來處理標(biāo)簽數(shù)據(jù),由于文件的格式是自己定義的,所以在處理時完全可以采用格式化語句處理,所有的處理語句都是唯一的,既提高了標(biāo)簽數(shù)據(jù)的讀和存的速度,又充分使用了Windows Ce操作系統(tǒng)所提供的高效API,提高了整個機(jī)制的運(yùn)行效率。
標(biāo)簽解析庫的實現(xiàn)主要包括三部分:初始化、數(shù)據(jù)發(fā)送和數(shù)據(jù)接收。標(biāo)簽解析庫運(yùn)行時,首先調(diào)用標(biāo)簽解析庫初始化函數(shù),該函數(shù)的主要功能是將系統(tǒng)的標(biāo)簽數(shù)據(jù)存成6個映射表,是原始數(shù)據(jù)名和點號映射關(guān)系的N-T映射表,表示數(shù)據(jù)采集系統(tǒng)行為和數(shù)據(jù)名的O-N映射表,表示數(shù)據(jù)采集系統(tǒng)行為和協(xié)議模塊的O-P映射表,表示數(shù)據(jù)采集系統(tǒng)行為和操作碼的O-C映射表,表示操作碼和點號映射關(guān)系的C-T映射表和表示原始數(shù)據(jù)類型和開發(fā)語言對應(yīng)數(shù)據(jù)類型的映射關(guān)系的D-T映射表。
系統(tǒng)在發(fā)送數(shù)據(jù)時,首先通過O-N映射表查找對應(yīng)的原始數(shù)據(jù)名,根據(jù)原始數(shù)據(jù)名準(zhǔn)備數(shù)據(jù),數(shù)據(jù)準(zhǔn)備好后通過O-P映射表查找對應(yīng)協(xié)議并加載協(xié)議模塊,模塊加載后通過N-T映射表將原始數(shù)據(jù)的數(shù)據(jù)名+數(shù)據(jù)轉(zhuǎn)換成點號+數(shù)據(jù)的形式,通過O-C映射表來確定數(shù)據(jù)打包所用的操作碼組,通過C-T映射表來確定與操作碼有映射關(guān)系的點號組,通過O-C和C-T映射表最終實現(xiàn)行為數(shù)據(jù)和點號數(shù)據(jù)的映射O-T映射,之后通過D-T映射來確定數(shù)據(jù)所使用的數(shù)據(jù)類型,并按照O-T映射關(guān)系來將數(shù)據(jù)進(jìn)行編碼,最后將編碼數(shù)據(jù)通過通信設(shè)備發(fā)往中心站。
在數(shù)據(jù)發(fā)送的映射邊實現(xiàn)過程中有兩個數(shù)組,分別為操作碼組和點號組,它們不但包含元素的個數(shù)還決定元素的順序,對于發(fā)送一些對數(shù)據(jù)發(fā)送順序和數(shù)量有限制的數(shù)據(jù)非常必要。數(shù)據(jù)接收與數(shù)據(jù)發(fā)送的過程類似,這里就不在闡述了。
在遙測站端添加新數(shù)據(jù)Water2,點號設(shè)為82,數(shù)據(jù)是浮點數(shù),通過SMS協(xié)議傳送,在平安報和定時報時將數(shù)據(jù)通過遙測站傳到中心站,按照本文所述方法其設(shè)置界面如圖7所示。
點擊添加按鍵,該數(shù)據(jù)就會出現(xiàn)設(shè)備標(biāo)簽數(shù)據(jù)表的最下端,點擊確定按鍵,運(yùn)行整個系統(tǒng),把系統(tǒng)時間調(diào)到平安報或者是定時報時間,在中心站觀察遙測站數(shù)據(jù),可以在遙測站上傳的平安報數(shù)據(jù)和定時報數(shù)據(jù)中觀察到數(shù)據(jù)Water2。
在遙測站終端增加新協(xié)議PPP,將遙測站終端的Water(點號56,操作碼07,浮點數(shù))和Rain(點號67,操作碼08,整型數(shù))數(shù)據(jù)在平安報時通過PPP協(xié)議上傳到中心站,其標(biāo)簽設(shè)置界面如圖8所示。
點擊確定按鍵,退出標(biāo)簽設(shè)置界面;按照協(xié)議規(guī)定和本技術(shù)方案規(guī)定的編程指導(dǎo)編寫PPP.dll,并將其下載到遙測終端Proc目錄下,運(yùn)行要測站終端系統(tǒng),將系統(tǒng)時間調(diào)整到平安報時間,等待遙測終端數(shù)據(jù)發(fā)送完畢,在中心站觀察數(shù)據(jù),可以在遙測站的平安報數(shù)據(jù)報文中看到按照PPP協(xié)議打包的Water和Rain數(shù)據(jù)。
圖7 添加新數(shù)據(jù)設(shè)置界面
圖8 增加新協(xié)議標(biāo)簽設(shè)置界面
按照本文描述的三層協(xié)議定制機(jī)制模型,可以很方便地在原有協(xié)議數(shù)據(jù)的基礎(chǔ)上增加新的協(xié)議數(shù)據(jù),增加新的協(xié)議,標(biāo)簽設(shè)置+協(xié)議解析庫。整個模型概念清晰、結(jié)構(gòu)簡單,無論是在原有的協(xié)議數(shù)據(jù)上增加新數(shù)據(jù),還是在水利數(shù)據(jù)采集系統(tǒng)中增加新協(xié)議都可以通過第三方實現(xiàn),讀者只要熟悉本文提供的概念和本文提到的編程指導(dǎo)就可以很容易地在使用了本文提到的三層協(xié)議定制機(jī)制模型的設(shè)備上開發(fā)出新協(xié)議,增加新數(shù)據(jù)。
本文在描述三層協(xié)議定制機(jī)制模型的原理和結(jié)構(gòu)時,所使用的數(shù)據(jù)結(jié)構(gòu)和描述方法都是基于標(biāo)準(zhǔn)C實現(xiàn)的,因此本文提到的實現(xiàn)方法可以在任何支持C語言的硬件設(shè)備或者是終端上實現(xiàn),非常適合在其他領(lǐng)域推廣;本文實現(xiàn)的二元協(xié)議定制機(jī)制運(yùn)行可靠、擴(kuò)展性強(qiáng)、加入新協(xié)議時開發(fā)周期短、指導(dǎo)性強(qiáng)、代碼復(fù)用率高、開發(fā)模式先進(jìn),非常適合在一些需要團(tuán)體開發(fā)的大型項目中應(yīng)用。本文提到的方法已經(jīng)在實際產(chǎn)品中使用,取得了非常好的效果,很好地解決了水利信息化系統(tǒng)中多源設(shè)備的整合以及不同代產(chǎn)品的混合使用問題。
[1] 王兵,李存斌,陳鵬,等.EVC高級編程及其應(yīng)用開發(fā).北京:中國水利水電出版社,2005.
[2] 華清遠(yuǎn)見,嵌入式培訓(xùn)中心.Windows CE嵌入式開發(fā)標(biāo)準(zhǔn)教程.北京:人民郵電出版社,2010.
[3] (美)微軟公司,著;希望圖書創(chuàng)作室,譯.Microsoft Windows CE設(shè)備驅(qū)動程序開發(fā)指南.北京:北京希望電子出版社,1999.
[4] 張冬泉,譚南林,王雪梅,焦風(fēng)川. Windows CE實用開發(fā)技術(shù).北京:電子工業(yè)出版社,2006.
[5] 孫增義,吳躍.水情自動測報技術(shù)基礎(chǔ)及其應(yīng)用.北京:中國水利水電出版社,1999.
[6] 毛學(xué)工,安波,蹇德平,陸玉忠.雅礱江流域梯級電站水情自動測報系統(tǒng).北京:中國水利水電出版社,2012.
于興晗(1975—),男,碩士,工程師,主要研究方向:檢測技術(shù)及自動化裝置,32位嵌入式數(shù)據(jù)采集器,WIFI智能傳感器。E-mail: 13601009217@126.com
Design and Implementation of a Multi-protocol Switching System
YU Xinghan,GAI Youpu,HOU Yu,GUO Yi
(China Institute of Water Resource and Hydropower Research,Beijing 100038,China)
This paper introduces the design and implementation of a three layer protocol customization mechanism model can modify the protocol and add new protocol,clarify the relevant principles and key technology of three layer protocol customization mechanism model in detail,introduces two kinds of programming structure,single table mapping structure of multi table analysis structure and suitable for C++,C# and Java high level language for the compilation and C language.This paper introduces in detail the process of mapping using single table structure development of three layer protocol customization mechanism model in embedded system Windows Ce in practical engineering,to a certain extent solved solve mixed integrated multi-source equipment water information system and different generation product use problems.
protocol customization;embedded;multi scale analysis;single table mapping