單維鋒,李 軍
(防災科技學院,河北三河 065201)
地震前兆觀測設備模擬通信軟件關鍵技術研究*
單維鋒,李 軍
(防災科技學院,河北三河 065201)
遵循“中國數字地震觀測網絡技術規程”相關標準,設計了一套基于 Java語言的前兆觀測設備模擬通信軟件。介紹了通信指令原語、數據包格式定義以及模擬通信軟件的總體設計,詳述了模擬通信軟件中的幾個關鍵技術,包括如何同時模擬多個前兆設備,應用觀察者設計模式實時更新設備狀態信息,使用套接字技術和多線程技術啟動或停止模擬設備,通過“心跳”線確認遠端 Socket是否關閉等。該軟件可以模擬大多數 “十五”前兆觀測設備的通信原語,一方面為臺站技術人員以及地震專業學生了解前兆設備的功能、通信指令、以及數據包的數據格式提供了一個模擬環境,有效地提高了教學效果和培訓質量,另一方面也為開發前兆設備相關軟件提供了模擬支撐環境。
前兆觀測設備;模擬通信軟件;套接字;多線程;觀察者設計模式
地震前兆臺網的主要任務就是獲取重力、地磁、形變、地電、流體等地球物理和地球化學觀測數據,為地震預報、科學研究和社會應用提供基礎數據。在地震行業領域,地震前兆觀測是日常獲取地震觀測信息的重要手段之一。
地震前兆觀測設備的種類很多,如數字水位儀、氣象三要素觀測儀、地電儀和相對重力儀等。各種觀測設備的觀測物理量、采樣率、數據存儲等方面不盡相同(中國地震局,2005)。
隨著 “十五”國家建設項目的推進,網絡化前兆儀器安裝相繼完成,全國各省級地震局的臺網中心甚至臺站都已經接入互聯網(何案華等,2008)。為了采集、傳輸、存儲和管理各種前兆觀測數據,各省局臺網中心或臺站根據現有設備特點開發了多種計算機管理系統,以提高工作效率(牛從達等,2005)。目前,前兆觀測設備的數據匯集工作由中國地震前兆臺網數據管理系統(以下簡稱管理系統)完成,該系統還負責臺站、區域中心、國家中心和學科臺網中心之間的數據同步交換并對地震專業用戶提供數據服務。
由于管理系統的高度自動化和智能化,不利于專業人員了解設備的內部工作原理、數據格式和通信協議。操作人員嚴重依賴于管理系統獲取數據或監控設備狀態。一旦管理系統出現問題,操作人員很難找到錯誤、手動獲取數據、查看設備狀態或直接控制設備。
此外,在對相關技術人員培訓、教學以及設備通信軟件開發過程中,也需要了解設備的工作原理、數據格式和通信指令等內容。由于涉及的設備種類非常多,搭建真實的實驗環境不僅費用昂貴,而且還需要合適的實驗場地。
因此,研究和開發一套前兆觀測設備模擬通信軟件(以下簡稱模擬軟件)就非常必要。模擬軟件可以模擬大多數 “十五”地震前兆觀測設備,遵從 “中國數字地震觀測網絡技術規程——地震前兆臺網專用設備網絡通信”標準(地殼運動監測工程研究中心,2005)(以下簡稱通信規程),能夠根據客戶端發送的指令,模擬不同設備產生相應格式的數據包并發送給客戶端。利用模擬軟件,可以模擬多種前兆設備的通信指令原語、返回相應數據包,有利于教師、受訓人員和學生了解設備的通信原理、通信指令以及數據格式等信息,通過模擬軟件有效地避免了對實際觀測設備的頻繁訪問,降低了對正常運行設備的干擾。
模擬軟件主要實現客戶端與設備端通信指令原語的模擬。客戶端向設備端發送通信指令和相關參數,設備端收到指令原語后,進行解釋并執行相應動作、返回執行結果。指令原語主要分為數據傳輸類、設備控制類和設備監視類。數據傳輸類原語包括獲取整體測量數據、當前測量數據和實時測量數據等原語。設備控制類原語包括設置工作參數、設備重新啟動等。設備監視類原語包括獲取設備狀態信息、運行日志、工作參數等原語(地殼運動監測工程研究中心,2005)。
例如,獲取當前測量數據通信指令原語格式定義如下:
get /length+ ID+dat+5
指令原語含義:客戶端通過指令獲取設備端最近整 5分鐘采樣的樣本,如果沒有采樣樣本,取最近的 1個樣本。
其中,“get”為命令關鍵字;“ ID”為設備標識符,即出廠時廠家給設備分配的唯一 ID號,通信規程規定命令中的 ID號必須和設備本身的 ID號完全一致,才可以執行該命令(王秀英等,2008)。
“length”為指令長度字,即除指令原語固有格式外指令的字節數總和;“dat”為數據傳輸命令字;“+”為分隔符。
指令必須通過 TCP/IP協議發送,因此在發送該指令前,必須通過 81端口建立到特定設備的Socket連接,然后再發送具體命令。
當設備接收到上述命令后,會將最新整 5分鐘采樣的樣本或最近一個樣本按如下格式打包,并通過 TCP/IP協議發回給客戶端。
$數據包信息長度 數據包內容 ack
其中,“$”為返回信息起始符;“數據包信息長度”是指數據包的具體內容的字節總數,不含“數據包信息長度”本身和以“ ”表示的分隔符;“數據包內容”是設備端最新整 5分鐘采樣的樣本,如果沒有采樣樣本,取最近的 1個樣本;“ ”為換行符,用于分隔各個信息;若該儀器不支持該命令,返回“$err ”字符串。
通信規程僅僅規定了各種設備必須提供的命令以及命令格式,并沒有規定各具體設備內部數據格式。設備采樣率和測項不同,不同設備同一命令返回的數據也不同,如水溫儀獲取當前測量數據指令的返回數據如下:
$79
79 105601 11006 431320060705 01 01 4313 15.9684 15.9684 15.9684 15.9684 15.9684
ack
其中,79表示數據的字節數;105601表示起始時間為 10點 56分 01秒;11006是臺站代碼;431320060705為設備 ID編號;第一個 01為采樣率,表示分采;第二個 01表示通道數為 1個;4313為測量分項代碼,即井表層水溫;15.968 4、15.968 4、15.968 4、15.968 4、15.968 4分別為最近 5個觀測數據的值。
如果是磁通門磁力儀設備,則返回的數據包含變化記錄垂直分量、變化記錄水平分量等 4個測項數據。
所以,在實際模擬軟件開發過程中,必須實際測試每種模擬設備的具體數據格式,有針對性地進行模擬。
模擬軟件分設備端模擬軟件子系統和客戶端模擬軟件子系統。設備端模擬軟件子系統主要模擬實現各種前兆觀測設備接收客戶端模擬軟件發送的各種通信指令,并對指令進行分析,進而執行相關指令,將運行結果按照規定的數據包格式打包,并發送給客戶端模擬軟件??蛻舳四M軟件子系統主要完成連接設備端模擬軟件、發送各種通信指令原語、收到指令后解析觀測數據。模擬軟件的工作流程如圖 1所示。
當某個具體設備啟動后,設備一直處于偵聽狀態,如果此時有客戶端發送連接請求,設備將產生一個新的工作線程用來處理與該客戶端的交互??蛻舳耸紫劝l送登錄指令,服務器端根據指令中的用戶名和密碼查找數據庫,判斷是否正確,如果用戶名和密碼都正確,則返回 “$ack ”字符串,表示登錄成功;返回 “$err ”字符串,表示失敗。登錄成功后,工作線程繼續等待接受客戶端的其他指令請求,并根據不同的指令,模擬執行不同的操作,并將模擬執行產生的數據按照規定的格式打包,并發送回客戶端。直至客戶端關閉連接或設備端關閉或者設備端空閑超時自動關閉。

圖1 模擬軟件工作流程Fig.1 Workflow of simulation system
模擬軟件可以同時模擬多個設備,每個設備可以同時接受多個客戶端的連接。通過前文的分析可知,模擬設備具有一些共同的功能,如啟動、停止、用戶登錄、獲取當前數據、獲取配置參數、獲取運行日志等。將這些功能封裝在一個 ITen-FiveDevice的接口中。對于一些共同的操作,如登錄、啟動、停止等功能在 TenFiveDeviceAbstract類中實現,而大部分設備具有的不同的具體功能實現則由每個具體的設備類(如:DSQ、G M4、WYY等)負責進行重載,相關類圖如圖 2所示。

圖2 模擬設備類圖Fig.2 Diagram of s imulation devices
模擬軟件為用戶提供了一個可視化操作界面,用戶可以方便的操作各種模擬設備,包括啟動、停止、添加、刪除、修改設備等。模擬軟件啟動時,先從數據庫中加載所有的設備信息到內存中,每個設備就是一個 Device對象,所有設備組成一個鏈表結構 DeviceList。模擬設備在運行過程中,用戶連接數、運行狀態等信息會隨著客戶端的連接與斷開或發出的各種通信指令不同而發生變化,界面上的信息需要和各設備內存結構中的信息保持一致。在此,采用觀察者設計模式,使界面上的設備狀態和內存中的設備對象狀態保持一致。觀察者設計模式的工作原理是讓多個觀察者對象同時監聽某個主題對象(被觀察者),當這個主題對象的狀態發生變化時,它會通知所有觀察者對象,使這些觀察者對象能夠自動更新各自的行為或狀態。觀察者模式的優點在于,它在觀察者和被觀察者之間建立一種抽象、松散的耦合關系,并且支持廣播通信,被觀察者會向所有登記過的觀察者發送通知消息。
在 J2SDK中的 java.util包中,為 Java程序設計人員提供了實現觀察者模式的幾個類和接口,主要有 java.util.Observer接口和 java.util.Observable類(盧葦,楊少波,2008)。java.util.Observer接口是觀察者對象接口,它定義了一個 update方法,用于在收到被觀察者對象發出的消息后,定義如何更新自己的狀態或行為。java.util.Observable類是一個被觀察對象或數據,通過其提供的 addObserver方法注冊一個觀察對象,通過 notifyObservers方法通知所有的觀察者調用自身的 update方法更新自身狀態或行為。
在本模擬軟件中,DeviceList對象可以被視為一個被觀察對象,它繼承了 Observable類,DataT-able封裝了界面上的 JTable控件,用于顯示 DeviceList對象中各設備對象相關信息,實現了 Observer接口,是一個觀察者。觀察者模式相關類及其之間的關系如圖 3所示。

圖3 觀察者模式相關類及其關系Fig.3 Relative classes and their relationship of observer design pattern
當模擬設備啟動、停止時,或者因為超時而自動斷開時都會導致設備的狀態發生改變(即 Device對象的 status屬性發生改變),當有一個客戶端連接或斷開時,也會導致設備的客戶端連接數目(clientNumber屬性)發生變化。當這些操作發生時,將 Device對象的 operation屬性設置為 update,并調用如下代碼通知觀察者進行更新:
setChanged();//設置改變
notifyObservers(device);//通知更新
被觀察者發送更新通知(notifyObservers方法)時,將Device對象作為參數傳遞給觀察者。觀察者DataTable對象接收到更新通知后,自動調用 update方法,更新界面上設備相關信息。
在模擬軟件實現中,管理員可以隨時在設備端管理界面上停止、啟動某個設備。啟動一個設備即建立一個監聽套接字,然后調用其 accept方法,在指定的端口進行監聽,等待客戶端的連接,如果連接成功,就新創建并啟動一個線程,在線程內部處理和客戶端的交互。模擬設備的啟動方法的算法描述如下。
在本模擬系統中,如果設備對象 Device直接繼承 Thread類,而將上述模擬設備的啟動方法內容置于其 run方法內,雖然可以啟動設備進行監聽,但是當停止監聽后無法重新啟動。原因在于一個線程執行完指定的任務后就消亡了,無法調用線程對象的 start方法再次啟動該線程(Sun Microsystems,2003)。
因此,在模擬軟件中,將監聽任務單獨實現在 TenFiveDeviceServerThread類中,它繼承了 Runnable接口,將啟動方法放在 TenFiveDeviceServerThread類的 run方法中,并且其構造函數中包含一個類型為 Device的參數,與相應的設備進行關聯。
Device類的 startServer方法算法如下:首先,構造一個 TenFiveDeviceServerThread對象;然后,構造一個線程對象,并啟動該線程;最后,更新界面狀態。
當需要停止設備監聽時,可以調用 Device對象的 stopServer方法。
由此可見,設備(Device類)包括一個 Ten-FiveDeviceServerThread對象,而一個 TenFiveDeviceServerThread對象包括多個客戶端工作線程對象(TenFiveWorkThread),每個工作線程對象內有一個命令解析對象 parser,負責對收到的客戶端命令進行解析并調用設備相應的方法,打包模擬數據。其 UML關系圖見圖 4。
模擬軟件客戶端和設備端通過 Socket建立連接,當設備端停止模擬時,客戶端軟件的界面狀態需要實時更新。在整個通信過程中,客戶端主動請求設備端,而設備端一直處于被動響應模式。當設備端停止時,客戶端并不能立刻知道設備端的狀態,只有在下一次請求時才會出現異常。因此,在客戶端和設備端之間應該建立一條“心跳”線來檢測兩者之間鏈路是否暢通。Java中的 Socket類提供了一個 sendUrgentData方法(Sun Microsystems,2003),它會往輸出流發送一個字節的數據,用于測試對方 Socket是否已經關閉。只要對方Socket的 SO_OOB INL INE屬性(默認值)沒有打開,就會自動舍棄這個字節,因此設備端不需要添加任何處理該消息的相關代碼。在模擬軟件中,當 Socket連接成功后,會啟動一個定時器,每隔 1秒鐘就通過 sendUrgentData方法發送一個字節數據,確認設備端是否關閉,如果設備端已經關閉,sendUrgentData方法將會拋出異常,在異常處理代碼中關閉客戶端相關連接即可。

圖4 設備、線程類 UML圖Fig.4 UML diagram of device
設備端模擬軟件子系統能夠實現設備的添加、修改、刪除以及查看詳細信息,在設備列表中,選擇一個具體設備后,可以啟動或停止監聽??蛻舳四M軟件子系統通過指定模擬設備的 IP地址和端口號連接到一個運行中的模擬設備,然后發送登錄、獲取數據等指令,并將返回數據顯示在界面上。
模擬軟件能夠模擬絕大部分通信指令。模擬的設備包括水管傾斜儀、豎直擺鉆孔傾斜儀、測氡儀、數字式溫度計等多種 “十五”設備。設備端模擬軟件子系統界面如圖 5所示,客戶端模擬軟件子系統界面如圖 6所示。

圖5 設備端模擬軟件子系統界面Fig.5 U Iof device side of simulative system

圖6 客戶端模擬軟件子系統界面Fig.6 U Iof client side of simulative system
該模擬軟件界面友好、簡單實用、易于操作,能夠模擬大部分 “十五”前兆觀測設備,為臺站工作人員、教師、學生學習和了解前兆設備通信協議、設備功能、觀測數據格式提供了模擬環境支持,同時也為各種前兆設備相關通信軟件的開發提供模擬支撐環境,在實際開發中,可以直接連接該模擬軟件,避免對實際觀測設備的頻繁訪問,具有較大的應用價值。
地殼運動監測工程研究中心 .2005.中國數字地震觀測網絡技術規程——地震前兆臺網專用設備網絡通信 [M].北京:地震出版社.
何案華,趙剛,王軍,等 .2008.串口前兆儀器的因特網接入方案與配套軟件開發[J].地震研究,31(3):279-283.
盧葦,楊少波 .2008.J2EE項目實訓——UML及設計模式 [M].北京:清華大學出版社 .
倪泰山,闕云彩,李祥,等 .2009.基于B/S結構的地震臺站綜合信息管理系統的設計與實現[J].地震研究,32(1):89-93.
牛從達,王峰,李倩,等 .2005.云南分布式地震觀測數據庫系統的設計與實現[J].地震研究,28(4):398-402.
王秀英,周振安,劉愛春 .2008.“十五”地震前兆觀測設備網絡通信規程應用探討[J].大地測量與地球動力學,28(4):131-135.
中國地震局 .2005.中國地震前兆臺網技術規程[M].北京:地震出版社.
SunMicrosystems.Class Thread[EB/OL].(2003-01-01)[2010-05- 22]. http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Thread.html.
SunMicrosystems.sendUrgentData[EB/OL].(2003-01-01)[2010-05-22].http://java.sun.com/j2se/1.4.2/docs/api/java/net/Socket.html#sendUrgentData(int).
Research on Key Technologies of Simulative Commun ication System of Earthquake Precursory Observation Devices
S HAN W ei-feng,L I Jun
(Institute of D isaster Prevention,Sanhe065201,Hebei,China)
A ccording to“Stipulation on N et Comm unication for D evices in China Geophysical and Geochem ical O bservatory N e tw ork”,a sim ulative comm unication system of precursory observation devices based on java programm ing language is designed.Firstly,the paper introduces the comm unication prim itives,data package form at and high-level architecture.Secondly,several key technologies of sim ulative comm unication system are argued in detail,such as how to sim ultaneously sim ulate m ultiple p recursor equipm ent,updating devices'status using observer pattern,using socket and m ultithreading technologies to start/stop s im ulative device,using “heart”m essage to judge w hether the rem ote socket is closed or not.The s im ulative comm unication system realizes m ost comm unication pr im itives and provides a sim ulative environm ent for students to understand the functions,comm unication prim itives and data package form at of precursory observation devices,w hich enhances the teaching effects and training quality,on the other hand it provides a support environm ent for developm ent of sim ulation softw are.
precursory observation devices,sim ulative comm unication softw are,socket,m ultithreading,observer design patten
TP311.52
A
1000-0666(2010)04-0365-06
2010-03-15.
中國地震局教師科研基金(20090101)和防災科技學院防災減災青年科技基金(200905)聯合資助 .