[程式] Earthworm 學習筆記:20170725 [email protected](II)

Earthworm 是一套模組化、可擴張、穩定且跨系統的地震資料處理程式,早在1993年便開始開發,是一個非常成熟且具有彈性的地震資料處理程式。今天到臺大參加 Earthworm 的 Pre-workshop(正式的 Earthworm workshop在7/27星期四),由達逸學長教我們建立基本的 earthworm 系統,並建立一個 Wave server 給其他的客戶端使用。下面會精簡的記述課堂練習的成果。

下篇記述利用 slink2ew 與 wave_serverV 從 IRIS 接收資料並建立波形伺服器。

Earthworm Work Flow Diagram

複習一下上一篇中我們預計建立的 Earthworm Work Flow Diagram :

首先,我們要使用 slink2ew 模組從 IRIS 接收及時的震波資料,將資料放置至 WAVE_RING 這個資料暫存區中,這時,我們用 findwave 去確定 WAVE_RING 是否有資料流進來,並決定 Wave Server 要串流哪些 Wave 的資料,最後再使用一些波形顯示的客戶端(Swarm 等)來顯示資料。

使用新模組前…

首先,在 EW 安裝目錄下「params」資料夾找到欲使用的模組的設定檔。(通常和模組名稱相同的.d檔,如「slink2ew」模組的設定檔為「slink2ew.d」)

再來,確定「earthworm.d」檔案中的欲使用模組名是否已經在模組清單中:

最後,在「startstop.d」中指定要開啟的模組:

我們就準備好可以啟動模組了!

建立共享記憶體(Ring)

我們要先創建一個共享記憶體的區域提供模組間做資料交換。先開啟「earthworm.d」,在「 Shared Memory Ring Keys」部分替共享記憶體取個獨特的 ID 名:

原本就有幾個預設的 Ring 存在,也可以使用之。

接著在「startstop.d」初始化共享記憶體,並決定其大小:

每個用到的共享記憶體必須經過這兩個步驟的初始化,才能使用喔!

slink2ew

一開始,我們先造訪 IRIS Buffer of Uniform Data 網站,點選其中的 Monitor 網頁,選擇一個喜歡的測站,如 TW KMNB。

接著,複製「slink2ew.d」至「run/params」,並以文字編輯器開啟準備編輯內容。再約 86-90 行附近,我們要加上我們想接收的站資訊:

目前只需要更動這部分,不過如果要自訂輸出的 Ring,請編輯「RingName」這個變數,也請記得依據上一小節的內容初始化共享記憶體。

測試 slink2ew 是否成功輸出

當我們設定好「slink2ew」,用下面的方式啟動 EW :

螢幕輸出大概會是這樣:

使用 findwave 測試 Ring 資料並整理供 Webserver 使用

使用 findwave 程式來讀取共享記憶體中的資料並儲存到檔案中:

程式會一直抓資料直到使用者按下「control + c」,這邊儲存的資料在 Wave Server 時會使用到,螢幕輸出範例如下:

而 out.txt 的內容則像下面這樣:

到這邊我們確定 WAVE_RING 中已經有我們想要的資料了!

架設 Wave Server

首先,複製「wave_serverV.d」至「/run/params」裡面,再來開始設定 wave_serverV.d 重要的參數:

完成後在「startstop」加入要啟動的模組清單中,即可準備啟動 EW。

啟動後螢幕範例:

使用 getmenu 向 wave server 存取資料

我們接著就可以使用其他程式向 wave server 存取資料了。比如說使用 getmenu 指令:

有資料就完成啦!

筆者也是第一次接觸,若有錯誤請多指教!


請多多指教!

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料