摘 要: 為了解決多普勒天氣雷達(dá)實(shí)時(shí)處理系統(tǒng)研發(fā)過(guò)程中并發(fā)線程難以進(jìn)行控制的問(wèn)題,,設(shè)計(jì)了一種多線程控制結(jié)構(gòu),在充分利用目前發(fā)展水平的多普勒天氣雷達(dá)產(chǎn)品處理模塊的基礎(chǔ)上,,實(shí)現(xiàn)了對(duì)江蘇省全部多普勒天氣雷達(dá)站的實(shí)時(shí)監(jiān)控與數(shù)據(jù)的實(shí)時(shí)處理,。該控制結(jié)構(gòu)的應(yīng)用,增強(qiáng)了對(duì)各雷達(dá)站點(diǎn)雷達(dá)基數(shù)據(jù)的監(jiān)控與產(chǎn)品處理能力,。
關(guān)鍵詞: 多普勒天氣雷達(dá),;多線程;實(shí)時(shí),;控制結(jié)構(gòu)
實(shí)時(shí)系統(tǒng)的開(kāi)發(fā)過(guò)程中通常需要解決這樣的問(wèn)題:實(shí)時(shí)地或軟實(shí)時(shí)地對(duì)數(shù)據(jù)進(jìn)行處理,,并能夠及時(shí)地對(duì)用戶(hù)的操作做出響應(yīng)。由于數(shù)據(jù)的處理需要大量的計(jì)算,,這勢(shì)必影響到系統(tǒng)對(duì)用戶(hù)操作的響應(yīng),。為了解決這一矛盾,多線程是必然的選擇[1],。實(shí)踐證明,,實(shí)時(shí)系統(tǒng)中,,開(kāi)辟與用戶(hù)操作無(wú)關(guān)的、專(zhuān)門(mén)負(fù)責(zé)數(shù)據(jù)處理的線程可以解決這個(gè)問(wèn)題,。典型的應(yīng)用有激光雷達(dá)實(shí)時(shí)處理顯示系統(tǒng)[2],、遙測(cè)參數(shù)的實(shí)時(shí)判讀和傳輸監(jiān)控[3]、測(cè)震實(shí)時(shí)數(shù)據(jù)保護(hù)系統(tǒng)[4],、基于主從異步復(fù)制技術(shù)的容災(zāi)實(shí)時(shí)系統(tǒng)[5]與基于多線程的實(shí)時(shí)信息處理系統(tǒng)[6],。多線程技術(shù)在這些系統(tǒng)中的成功應(yīng)用,為多普勒天氣雷達(dá)實(shí)時(shí)處理系統(tǒng)的研發(fā)提供了良好的參考與借鑒,。
在開(kāi)發(fā)多普勒天氣雷達(dá)實(shí)時(shí)處理系統(tǒng)的過(guò)程中,,如果系統(tǒng)并發(fā)開(kāi)辟過(guò)多的產(chǎn)品處理線程,會(huì)造成系統(tǒng)本身甚至操作系統(tǒng)的崩潰,,因此如何對(duì)系統(tǒng)中并發(fā)的線程進(jìn)行控制,,成為系統(tǒng)開(kāi)發(fā)成功的關(guān)鍵。本文采用了并發(fā)地處理各雷達(dá)站點(diǎn),、串行生成各站點(diǎn)目標(biāo)產(chǎn)品的折衷策略,。考慮到進(jìn)一步研發(fā)雷達(dá)產(chǎn)品的必要性以及未來(lái)增設(shè)雷達(dá)站點(diǎn)的可能性,,系統(tǒng)的設(shè)計(jì)采用了一個(gè)二維的多線程控制結(jié)構(gòu),,因而可以較容易地?cái)U(kuò)展系統(tǒng)的目標(biāo)產(chǎn)品和能夠處理的雷達(dá)站點(diǎn)。
1 多普勒天氣雷達(dá)實(shí)時(shí)數(shù)據(jù)處理系統(tǒng)的設(shè)計(jì)
目前江蘇省氣象部門(mén)擁有5部多普勒天氣雷達(dá),,另有2部在建,,雷達(dá)監(jiān)測(cè)網(wǎng)已經(jīng)建成。如何充分利用該資源是目前氣象科研工作者的一項(xiàng)重要工作,。除了已有的雷達(dá)產(chǎn)品外,,科研人員應(yīng)用雷達(dá)基數(shù)據(jù)研究開(kāi)發(fā)出多種適合于業(yè)務(wù)使用的雷達(dá)產(chǎn)品。目前已自行研發(fā)的雷達(dá)產(chǎn)品的生成算法先進(jìn),、穩(wěn)定,、可靠,但在多算法,、多數(shù)據(jù)集成工作上還略顯不足,,研究成果的業(yè)務(wù)化效果不夠理想。為了對(duì)所有雷達(dá)站點(diǎn)數(shù)據(jù)進(jìn)行實(shí)時(shí)產(chǎn)品處理,,使得這些研究成果適合在業(yè)務(wù)中使用,,本文設(shè)計(jì)開(kāi)發(fā)了多普勒天氣雷達(dá)實(shí)時(shí)處理系統(tǒng)。該系統(tǒng)能夠?qū)Χ鄠€(gè)雷達(dá)站點(diǎn)的數(shù)據(jù)實(shí)施有效的監(jiān)控,,并實(shí)時(shí)地將所有雷達(dá)站點(diǎn)的數(shù)據(jù)處理成多個(gè)雷達(dá)產(chǎn)品,,同時(shí)便于業(yè)務(wù)人員掌握并控制雷達(dá)數(shù)據(jù)的處理,因此特別適合業(yè)務(wù)推廣。
系統(tǒng)的硬件結(jié)構(gòu)如圖1所示,。目前需要處理的數(shù)據(jù)來(lái)自南京,、徐州、連云港,、蘇州與南通5個(gè)雷達(dá)站點(diǎn),,這些站點(diǎn)的數(shù)據(jù)通過(guò)網(wǎng)絡(luò)傳輸?shù)轿募?wù)器上。多普勒天氣雷達(dá)數(shù)據(jù)實(shí)時(shí)處理系統(tǒng)監(jiān)控文件服務(wù)器上的雷達(dá)數(shù)據(jù),,并發(fā)地開(kāi)辟與站點(diǎn)數(shù)目對(duì)應(yīng)的產(chǎn)品處理線程,,由用戶(hù)控制系統(tǒng)生成各雷達(dá)站點(diǎn)的目標(biāo)產(chǎn)品,。
系統(tǒng)的總體設(shè)計(jì)如圖2所示,。由于目標(biāo)產(chǎn)品的生成都依賴(lài)于雷達(dá)數(shù)據(jù)的讀取,需事先監(jiān)控雷達(dá)數(shù)據(jù)的傳輸是否已經(jīng)完成,,雷達(dá)數(shù)據(jù)6 min到達(dá)一次,,因此必須在6 min之內(nèi),即在下一個(gè)雷達(dá)數(shù)據(jù)到達(dá)之前將所有站點(diǎn)的雷達(dá)數(shù)據(jù)實(shí)時(shí)處理成多個(gè)目標(biāo)產(chǎn)品,。其中包括雨量直方圖產(chǎn)品,、CAPPI(等高平面位置顯示)產(chǎn)品、VIL(垂直累積液態(tài)含水量)產(chǎn)品,、TREC風(fēng)場(chǎng)產(chǎn)品,、OHP產(chǎn)品、Div(散度)產(chǎn)品,、雨量預(yù)報(bào)產(chǎn)品(包括1 h雨量,、2 h雨量和3 h雨量)以及與這些產(chǎn)品相關(guān)的圖片產(chǎn)品。所有目標(biāo)產(chǎn)品的生成過(guò)程都由線程來(lái)實(shí)現(xiàn),,用戶(hù)通過(guò)多線程控制結(jié)構(gòu)來(lái)控制目標(biāo)產(chǎn)品的生成,,并在人機(jī)界面中進(jìn)行消息的實(shí)時(shí)顯示以及對(duì)用戶(hù)選定的產(chǎn)品進(jìn)行顯示。
由于各個(gè)產(chǎn)品處理線程運(yùn)用自身已有的方式各取所需,,因此對(duì)雷達(dá)數(shù)據(jù)的讀取可以串行進(jìn)行,,避免了各個(gè)產(chǎn)品處理部分之間數(shù)據(jù)訪問(wèn)的沖突,同時(shí)也無(wú)需使用其他機(jī)制控制數(shù)據(jù)的訪問(wèn),。如何實(shí)現(xiàn)并行處理各雷達(dá)站點(diǎn),、串行生成目標(biāo)產(chǎn)品的策略以及各產(chǎn)品處理線程的執(zhí)行可視化等系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)的關(guān)鍵部分都是通過(guò)多線程控制結(jié)構(gòu)來(lái)實(shí)現(xiàn)的。
2 多線程控制結(jié)構(gòu)
陣列邏輯控制器采用陣列邏輯的方法構(gòu)成組合邏輯控制電路,,一種實(shí)現(xiàn)控制器的電路結(jié)構(gòu)是可編程邏輯陣列(PLA)結(jié)構(gòu),,如圖3所示,其中對(duì)門(mén)電路的輸入端作了簡(jiǎn)化表示[7],。陣列中每個(gè)交叉點(diǎn)可以像寫(xiě)ROM一樣進(jìn)行設(shè)置,,這種設(shè)置的過(guò)程稱(chēng)為編程。
基于可編程邏輯陣列的啟發(fā),本文設(shè)計(jì)了一個(gè)多線程控制結(jié)構(gòu),??梢詫⑦@個(gè)控制結(jié)構(gòu)看作一個(gè)M行N列的二維數(shù)組,其中行定義了需要生成的M種雷達(dá)產(chǎn)品,,列定義了需要監(jiān)控的N個(gè)雷達(dá)站點(diǎn),。這里用Control[M][N]表示這個(gè)二維數(shù)組,Control[i][j]則代表了是否可以開(kāi)始第j個(gè)雷達(dá)站點(diǎn)的第i個(gè)產(chǎn)品處理過(guò)程,。若Control[i][j]為true,,則當(dāng)前可以開(kāi)始雷達(dá)站點(diǎn)j的第i個(gè)產(chǎn)品處理過(guò)程;若Control[i][j]為false,,則表明對(duì)雷達(dá)站點(diǎn)j中的第i個(gè)產(chǎn)品已經(jīng)處理完畢或正在等待處理,。需要注意的是第0行代表了雷達(dá)站點(diǎn)的數(shù)據(jù)是否已經(jīng)傳輸?shù)搅朔?wù)器上,只有當(dāng)?shù)?行為true時(shí)才能開(kāi)始各項(xiàng)目標(biāo)產(chǎn)品的處理,,否則系統(tǒng)中不存在任何產(chǎn)品處理過(guò)程,。通過(guò)圖4的多線程控制結(jié)構(gòu)可以很容易地實(shí)現(xiàn)并發(fā)處理各雷達(dá)站點(diǎn)、串行生成目標(biāo)產(chǎn)品的策略,。具體地只需要控制這個(gè)結(jié)構(gòu)使得每一列都只有一個(gè)為true,,而各列之間的不同元素可以同時(shí)為true即可。系統(tǒng)的實(shí)際運(yùn)行情況表明,,不同時(shí)并發(fā)地將所有雷達(dá)站點(diǎn)的雷達(dá)數(shù)據(jù)處理成所有的目標(biāo)產(chǎn)品,,而是采用這種并發(fā)與串行相結(jié)合的方式,有效地控制了系統(tǒng)產(chǎn)品處理線程的數(shù)量,,減輕了系統(tǒng)運(yùn)行時(shí)對(duì)內(nèi)存和CPU的需求,,同時(shí)也不影響人機(jī)之間的交互。
通過(guò)多線程控制結(jié)構(gòu)的狀態(tài)可以準(zhǔn)確得到系統(tǒng)在某一時(shí)刻開(kāi)辟了哪些產(chǎn)品處理線程,。如果用當(dāng)前各站點(diǎn)正在處理的產(chǎn)品的索引來(lái)表示控制結(jié)構(gòu)的狀態(tài),,則圖5中控制結(jié)構(gòu)的4個(gè)狀態(tài)可以編碼為11111、12254,、33445,、56555。與可編程邏輯通過(guò)對(duì)圖3中的交叉點(diǎn)進(jìn)行編程設(shè)置一樣,,用戶(hù)可以對(duì)控制結(jié)構(gòu)中交叉點(diǎn)進(jìn)行設(shè)置,,即對(duì)多線程控制結(jié)構(gòu)進(jìn)行編碼,控制系統(tǒng)生成用戶(hù)所指定的目標(biāo)產(chǎn)品,。
3 產(chǎn)品處理過(guò)程
系統(tǒng)的主要處理過(guò)程包含2個(gè)定時(shí)器,。
數(shù)據(jù)檢測(cè)定時(shí)器:為各個(gè)雷達(dá)站點(diǎn)開(kāi)辟各自相應(yīng)的數(shù)據(jù)檢測(cè)線程,每6 min進(jìn)行一次數(shù)據(jù)檢測(cè),。當(dāng)檢測(cè)到雷達(dá)站點(diǎn)j的數(shù)據(jù)已經(jīng)傳輸完成,,數(shù)據(jù)檢測(cè)線程將Control[0][j]設(shè)置為true,,以此通知產(chǎn)品處理定時(shí)器可以開(kāi)始站點(diǎn)j的各項(xiàng)產(chǎn)品處理過(guò)程。
產(chǎn)品處理定時(shí)器:輪詢(xún)多線程并行控制結(jié)構(gòu),,以便為各個(gè)站點(diǎn)開(kāi)辟目標(biāo)產(chǎn)品的處理線程,。如果站點(diǎn)j的產(chǎn)品i-1已經(jīng)處理完成,即Control[i-1][j]為true,,則說(shuō)明可以開(kāi)辟產(chǎn)品i的處理線程,;否則需要等待下一次輪詢(xún),直到Control[i-1][j]為true時(shí),,才能開(kāi)始產(chǎn)品i的處理,。產(chǎn)品i處理完成之后,自動(dòng)地將Control[i][j]設(shè)置為true,,以表明當(dāng)前產(chǎn)品已經(jīng)處理完畢,,以便進(jìn)行下一個(gè)產(chǎn)品的處理過(guò)程。這里需要注意,,為了避免開(kāi)辟相同的產(chǎn)品處理線程,,開(kāi)辟產(chǎn)品處理線程i之前,,應(yīng)先將Control[i-1][j]設(shè)置為false,,以保證每一列要么全為false,要么只有一個(gè)true,。
Div散度產(chǎn)品的處理過(guò)程中需要耗費(fèi)巨大的內(nèi)存,,不適合在多個(gè)站點(diǎn)之間并發(fā)處理,因此將Div散度產(chǎn)品視作一個(gè)關(guān)鍵產(chǎn)品,,各站點(diǎn)之間串行生成Div散度產(chǎn)品,,即使系統(tǒng)中每一時(shí)刻最多只有一個(gè)這樣的關(guān)鍵產(chǎn)品處理過(guò)程。由于整體上串行處理Div產(chǎn)品,,當(dāng)各個(gè)站點(diǎn)都要進(jìn)行Div產(chǎn)品處理時(shí),,將會(huì)產(chǎn)生各個(gè)站點(diǎn)對(duì)Div產(chǎn)品的競(jìng)爭(zhēng)。開(kāi)發(fā)過(guò)程中賦予每個(gè)站點(diǎn)一個(gè)Div產(chǎn)品的處理權(quán),,并在各個(gè)站點(diǎn)之間傳遞這個(gè)處理權(quán),,即只有當(dāng)前擁有處理權(quán)的站點(diǎn)才能進(jìn)行Div產(chǎn)品的處理,從而使Div產(chǎn)品的處理在整體上進(jìn)行串行處理,。
為了提高產(chǎn)品生成過(guò)程的實(shí)時(shí)性,,一旦站點(diǎn)j完成Div產(chǎn)品的生成,則立刻將Div產(chǎn)品的處理權(quán)傳遞給站點(diǎn)j+1,;通過(guò)多線程控制結(jié)構(gòu),,站點(diǎn)j+1獲知自己已經(jīng)得到了Div產(chǎn)品的處理權(quán),則立即開(kāi)始Div產(chǎn)品的處理,。這里存在一個(gè)潛在的問(wèn)題,,即一旦某個(gè)站點(diǎn)的數(shù)據(jù)傳輸因?yàn)槟承┰蚨鴷簳r(shí)中斷或停止,,則這個(gè)站點(diǎn)的Div產(chǎn)品的處理權(quán)難以自動(dòng)傳遞給下一個(gè)站點(diǎn)。為此,,每個(gè)站點(diǎn)附加了一個(gè)計(jì)數(shù)器,,通過(guò)這個(gè)計(jì)數(shù)器來(lái)指定限制某個(gè)站點(diǎn)掌握Div產(chǎn)品處理權(quán)的時(shí)間。只有當(dāng)前獲得處理權(quán)的站點(diǎn)才能進(jìn)行計(jì)數(shù)器的計(jì)數(shù),,一旦計(jì)數(shù)器超過(guò)了預(yù)設(shè)的上限,,則強(qiáng)制其交出處理權(quán)。這樣使每個(gè)站點(diǎn)不能無(wú)限制地?fù)碛刑幚頇?quán),,從而解決了由于數(shù)據(jù)傳輸中斷而引發(fā)的處理權(quán)難以傳遞的問(wèn)題,。
假設(shè)當(dāng)前系統(tǒng)需要將5個(gè)雷達(dá)站點(diǎn)的數(shù)據(jù)分別生成6個(gè)目標(biāo)產(chǎn)品,圖5所示為從一次數(shù)據(jù)處理過(guò)程中選取的控制結(jié)構(gòu)的幾個(gè)狀態(tài),,其中產(chǎn)品6為一個(gè)關(guān)鍵產(chǎn)品,。圖的底部是為各站點(diǎn)設(shè)置的計(jì)數(shù)器的計(jì)數(shù)值,這里設(shè)置計(jì)數(shù)器的上限是400,。第1個(gè)狀態(tài)代表數(shù)據(jù)檢測(cè)線程檢測(cè)到雷達(dá)數(shù)據(jù)之后,,剛剛開(kāi)始進(jìn)行各個(gè)雷達(dá)站點(diǎn)第一個(gè)產(chǎn)品的處理,此時(shí)第0個(gè)站點(diǎn)擁有對(duì)關(guān)鍵產(chǎn)品的處理權(quán),。由第2個(gè)狀態(tài)可以看出對(duì)各站點(diǎn)數(shù)據(jù)的并行處理過(guò)程是不同步的,。對(duì)比第3個(gè)和第4個(gè)狀態(tài)圖可知雖然第4個(gè)雷達(dá)站點(diǎn)首先將除了關(guān)鍵產(chǎn)品6之外的其他產(chǎn)品處理完畢,但是卻不能最先處理產(chǎn)品6,;第4個(gè)狀態(tài)圖可以解釋為由于站點(diǎn)0的計(jì)數(shù)器在其處理產(chǎn)品6之前已經(jīng)超過(guò)了設(shè)定的閾值,,站點(diǎn)0被迫提早將產(chǎn)品6的處理權(quán)交給了站點(diǎn)1,因此站點(diǎn)1首先進(jìn)行產(chǎn)品6的處理,。由于系統(tǒng)中每一時(shí)刻只有一個(gè)站點(diǎn)擁有對(duì)關(guān)鍵產(chǎn)品的處理權(quán),,假設(shè)此時(shí)各站點(diǎn)的數(shù)據(jù)傳輸正常,且產(chǎn)品6的處理過(guò)程將在計(jì)數(shù)器到達(dá)閾值之前結(jié)束并傳遞產(chǎn)品6的處理權(quán)給下一個(gè)站點(diǎn),。如果將此時(shí)產(chǎn)品6的各站點(diǎn)處理權(quán)編碼為01000,,則各站點(diǎn)對(duì)產(chǎn)品6的處理權(quán)循環(huán)編碼為01000、00100,、00010,、00001、10000,,1所在的位為擁有處理權(quán)的站點(diǎn),。對(duì)應(yīng)的多線程并行控制結(jié)構(gòu)狀態(tài)的編碼為56555、60655,、50065,、50006、60000,,每個(gè)狀態(tài)中只存在一個(gè)6,。
本文結(jié)合一個(gè)類(lèi)似可編程陣列控制邏輯的多線程并行控制結(jié)構(gòu),,完成了對(duì)江蘇省多普勒天氣雷達(dá)實(shí)時(shí)數(shù)據(jù)處理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)。系統(tǒng)在Windows下開(kāi)發(fā),,目前并發(fā)處理5個(gè)站點(diǎn)雷達(dá)數(shù)據(jù)的時(shí)間平均只需1 min~2 min,,其中包括16幅雷達(dá)產(chǎn)品圖片。與此同時(shí),,用戶(hù)可以方便地知道系統(tǒng)當(dāng)前時(shí)刻開(kāi)辟了哪些產(chǎn)品處理線程,,同時(shí)可以方便地對(duì)各站點(diǎn)所需生成的產(chǎn)品進(jìn)行控制。系統(tǒng)的實(shí)際運(yùn)行表明,,系統(tǒng)運(yùn)用時(shí),,橫向上至少可以對(duì)10個(gè)雷達(dá)站點(diǎn)的數(shù)據(jù)進(jìn)行綜合處理,與此同時(shí)縱向上仍可以擴(kuò)展添加新的雷達(dá)產(chǎn)品,。由于可以方便地對(duì)控制結(jié)構(gòu)進(jìn)行擴(kuò)展,,未來(lái)進(jìn)一步的工作可以集中在各種雷達(dá)產(chǎn)品的研發(fā)上,提高各產(chǎn)品生成算法的效率以及系統(tǒng)的擴(kuò)展性,。
參考文獻(xiàn)
[1] BEVERIDGE J,,WIENER R.Win32多線程編程設(shè)計(jì)[M]. 候捷,譯.武漢:華中科技大學(xué)出版社,,2002.
[2] 方欣,,胡順星,趙培濤,,等.ATS-1激光雷達(dá)實(shí)時(shí)處理顯示系統(tǒng)設(shè)計(jì)[J].計(jì)算機(jī)工程,,2009,,35(11):276-279.
[3] 趙文策,,苗巖松.利用多線程技術(shù)實(shí)現(xiàn)遙測(cè)參數(shù)的實(shí)時(shí)判讀和傳輸監(jiān)控[J].導(dǎo)彈試驗(yàn)技術(shù),2009(1):22-24.
[4] 盛琰,,畢卉娟.測(cè)震實(shí)時(shí)數(shù)據(jù)保護(hù)系統(tǒng)的建立及應(yīng)用[J].內(nèi)陸地震,,2005,19(2):181-184.
[5] 楊朝紅,,宮云戰(zhàn),,桑偉前,等.基于主從異步復(fù)制技術(shù)的容災(zāi)實(shí)時(shí)系統(tǒng)研究與實(shí)現(xiàn)[J].計(jì)算機(jī)研究與發(fā)展,,2003,,40(7):1104-1109.
[6] 張堅(jiān)英,詹彩菊.基于多線程的實(shí)時(shí)信息處理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].導(dǎo)彈試驗(yàn)技術(shù),,2009(1):37-39,,53.
[7] 胡越明.計(jì)算機(jī)組成和系統(tǒng)結(jié)構(gòu)[M].上海:上海科學(xué)技術(shù)文獻(xiàn)出版社,,1999:219-223.