吳華燈,盧大偉,廖一帆,丁莉莎,葉世山,勞 謙,陳建濤,
黃 暉1,趙賢任1,王力偉1,盧子晉1,呂仲杭1
(1.廣東省地震局,廣東 廣州 510070;2.中國地震局地球物理研究所,北京 100081;3.中國地震局地震監測與減災技術重點實驗室,廣東 廣州 510070)
“十五”期間,國家在21個地震重點監視防御區建設了1 154個自由場固定強震動觀測臺、310個烈度速報子臺和13個強震動觀測專用臺陣,建成了由一個國家強震動臺網中心,東南、西南、西北3個區域強震動臺網中心以及北京、天津、昆明、烏魯木齊、蘭州5個大城市地震動強度(烈度)速報中心構成的中國強震動觀測臺網(周雍年,2006)。在隨后的“十一五”“十二五”期間,各省(市)、自治區和地方政府又投資建設了一大批強震動觀測臺站,臺網規模不斷擴大(吳華燈,葉春明,2011)。“十五”期間建成的強震動觀測臺網主要觀測目的是獲取近場強地面運動加速度記錄,為工程抗震、場地效應、地震動衰減等研究提供基礎數據(徐欽等,2019;王文才等,2019),臺網技術系統基于觸發式事件記錄,兼具部分城市地震烈度速報功能(盧大偉,李小軍,2010)。“十一五”“十二五”期間建成的強震動觀測臺站,已經向地震動強度(烈度)速報、地震預警等應用領域拓展,具備實時和觸發式事件記錄的功能。
但是我國建成的強震動觀測臺網,長期缺乏一套具備數據匯集、監控及自動處理功能于一體的強震動臺網數據處理軟件,大部分省(市)、自治區地震局只能利用各廠商記錄器配套的上位機軟件,手動收集、處理分布在轄區內的各個強震動臺站的觀測數據,少數幾個省局主自研發或使用了第三方開發的簡易版臺網管理軟件,半自動地實現了數據的收集和處理(劉瓊仙等,2008)。總體上強震動臺網數據收集和處理以人工為主,存在速度慢、效率低、工作負荷重等問題,遠遠滿足不了日常業務工作的需要,滿足不了政府、社會公眾對強震發生時快速獲知強震動關鍵參數的需求。立足強震動臺網日常業務和不斷拓寬的應用領域的需求,在“十二五”期間,上級主管部門大力推進強震動觀測技術支撐系統的建設,筆者負責開發了一套適用于“十五”“十一五”“十二五”期間強震動觀測臺站的具備強震動數據采集器接口集成、數據快速匯集、數據自動處理、狀態準實時監控、儀器雙向命令控制、日常業務圖表生成等功能的“Collectors強震動臺網數據處理系統軟件”。本文就該軟件的整體設計思路、功能模塊的實現及應用情況等方面展開介紹。
為了更好地實現系統軟件的各項功能及可跨平臺、大規模分布式部署,采用JAVA SE(JAVA開發工具包)、Eclipse Java EE IDE(JAVA集成開發環境)、MySQL(數據庫)、Navicat和MySQL Workbench(數據庫管理工具)等工具包搭建了軟件開發及運行環境。軟件采用模塊化設計,各模塊可獨立運行,軟件系統技術路線如圖1所示,設計思路如下:
(1)使用Navicat和MySQL Workbench設計出由15個數據表組成的底層數據庫,包括臺網信息表、臺站信息表、設備信息表、儀器字典表、通道方向極性表、儀器參數表、地震事件波形表、功能測試波形表、臺站狀態表、鏈路狀態表、遠程通訊檢查表、臺站連通及功能測試情況上報表、地震信息表、用戶信息表(受篇幅所限,數據庫設計另行文介紹)(Akkaretal,2014)。系統軟件在初始化時,將從系統配置表中讀取相關配置信息,從臺網信息表、臺站信息表和設備信息表中提取臺網、臺站、設備等元數據信息,用于標識身份、匹配儀器接口、繪制臺站位置、網絡連接建立、屬性信息提示。

圖1 系統軟件技術路線Fig.1 Technical route of the Collectors system software
(2)用Eclipse Java EE IDE開發包括ETNA,K2,GDQJ,MR-2002,GSR-18,GSMA-2400IP,ETNA2,Basalt,MR-3000,EDAS-24IP,EDAS-24GN,130REN和TDE-CA 等強震動記錄器的數據接口和通信控制接口,集成到強震動臺網數據處理系統上,以客戶端套接字的方式連接臺站的設備,實現地震事件數據的自動匯集;實現臺站運行狀態的多指標、精細化的監控和設備的遠程控制;驅動存儲機制實現有關報表信息的自動生成和運行率統計等。
(3)在匯集地震事件時,由解碼模塊解碼三分向數據,然后驅動強震動參數計算模塊,按照基線校正、計算主要頻率、積分速度和位移時程、數字濾波、記錄合成的數據處理流程計算PGA,PGV,PGD,IPGA和IPGV等強震動參數(1)中國地震局.2015.儀器地震烈度計算暫行規程.,再經地震消息匹配出對應臺站的臺站信息、地震信息、記錄處理結果信息,生成強震動觀測記錄報告單和產出儀器烈度分布圖件,進行地震烈度速報。與此同時,驅動數據同步模塊,通過數據庫或基于文件傳輸協議的方式,實現各省、自治區、直轄市強震動臺網中心到各區域分中心,再到國家強震動臺網中心的分級數據同步。
“Collectors強震動臺網數據處理系統軟件”是一套基于地震事件傳輸的強震動臺網專業數據處理軟件,較好地滿足了當前強震動觀測臺網的日常業務需求。具體功能包括了強震動記錄器的接口適配、全網臺站運行狀態準實時監控、地震事件數據自動匯集、強震動事件參數(PGA,PGV,PGD,IPGA,IPGV,反應譜)自動處理、設備遠程控制、報表自動生成(遠程通訊檢查表、強震動記錄報告單、強震動記錄分析結果表、強震動觀測簡報)等,以下分別介紹各核心功能模塊的具體實現。
“強震動記錄器的接口適配模塊”是“Collectors強震動臺網數據處理系統軟件”的核心模塊之一,數據流、狀態流和控制流的適配及流向由該模塊驅動實現。由于強震動記錄器的種類繁多,不同類型的儀器有不同的命令集、不同的通信協議和數據格式,特別是基于事件傳輸的記錄器(吳華燈等,2012),要實現數據流、狀態流和控制流的三流匯集及分發,處理上比較復雜和繁瑣,因此該模塊采用了任務隊列管理和線程池的技術,使復雜的問題簡單化。具體操作為,在該模塊中,定義了ETNA,K2,GDQJ,MR-2002,GSR-18,GSMA-2400IP,ETNA2,Basalt,MR-3000,EDAS-24IP,EDAS-24GN,130REN,TDE-CA等型號設備及與之對應的任務類別和通信命令;根據設備型號和特定的任務,建立了相應的線程池;最后,以DAO作為入口,從數據庫中加載臺站設備信息,匹配設備型號,建立通信連接池,驅動獲取事件數據、獲取狀態數據和通信控制等任務,實現數據流、狀態流和控制流的匯集及分發(葉世山等,2019)。程序設計的核心是,創建一個任務包task實現接口適配,包括2個枚舉變量DevType和TaskType,3個類TaskBeanFactory、TaskManager和TaskExecutor:設備型號DevType用于指定需要適配接口的強震動記錄器類型,任務類別TaskType定義接口適配時需要執行的諸如獲取狀態流、獲取事件數據流、功能測試等任務;TaskBeanFactory和TaskExecutor類的作用是獲取要執行的任務,TaskManager類用于建立線程、加載設備類型、執行隊列中的任務。核心源代碼如下:
public enum DevType {
ETNA,K2,GDQJ,MR2002,GSR18,GSMA2400IP,ETNA2,Basalt,MR3000,EDAS24IP,EDAS24GN,130REN,TDE-CA
} /*強震動記錄器類型*/
public enum TaskType{
STA,EVENT,CONTROL,FT
}/*定義任務類型*/
public class TaskBeanFactory implements ApplicationContextAware {
public TaskExecutor getTask(String devType,String taskName){
return(TaskExecutor);
}
}/*獲取要執行的任務*/
public class TaskManager {
protected TaskBeanFactory taskBeanFactory;
threads = Executors.newFixedThreadPool(thread Num);/*建立線程池*/
public void execute(TaskType type){
equipmentInfoDAO.loadEquipments(dev_type,starIndex,pageSize);
}/*加載指定的設備類型,準備執行任務*/
private void todo(EquipmentInfo eq,TaskType type){
TaskExecutor taskExecutor = taskBeanFactory.getTask();
pool.getConnect();/*建立連接*/
taskExecutor.execute(terminal,eq);/*執行任務,匹配設備類型,調用接口*/
pool.recycle(terminal);/*資源回收*/
}
}
強震動臺網監控平臺是“Collectors強震動臺網數據處理系統軟件”的一個重要組成部分,具體由“臺站運行狀態準實時監控模塊”實現。其主要功能是實現臺站運行狀態的多指標、精細化監控顯示和設備的遠程控制,便于工作人員了解臺網的整體運行情況和開展臺網的日常運維管理工作。出于使用方便及技術更新的需要,該模塊摒棄了筆者早期基于C/S結構的強震動臺網監控平臺的設計思想(葉春明等,2011),采用MVC(Model View Controller,一種軟件設計模式)框架重新進行了設計,以求做到軟件前后端分離,易于分布式部署。
該模塊在MVC框架下,結合“強震動記錄器的接口適配模塊”和底層數據庫,基于電子地圖實現前端展示和交互操作,如圖2所示。具體是以電子地圖展示臺站的位置分布和臺站的關鍵信息,并用黑、橙、紅、綠4種顏色分別標示臺站通信中斷、通信告警、設備告警和正常工作4種狀態。主控臺的狀態告示欄,及時顯示各種狀態下臺站的數量及告警的具體原因(如鏈路告警、電池電壓過低告警、磁盤空間告警、GPS授時告警、零點電壓告警等),維護人員能針對已知的具體原因開展臺站的維護工作。交互操作方面,通過DAO及API,實現前端臺站狀態的多指標查詢、臺站信息查詢、設備信息查詢、臺站觸發參數查詢、功能測試等遠程操控。后端則按照設定的任務,周期性自動地完成每月2次的功能測試及遠程通訊檢查,并把測試的結果寫入遠程通訊檢查數據表。前端的所有操作,通過圖2的人機交互界面便能輕松完成。該模塊的核心實現過程如下:
(1)加載電子地圖。在html頁面中指定地圖數據源,并在javascript代碼中創建地圖實例,通過API接口,調用地圖數據源,實現地圖的加載。
/*在html頁面中指定地圖數據源*/
>script type="text/javascript"src="http://api.map.baidu.com/api?v=2.0&ak=NU..">
>/script>
/*在javascript代碼中創建地圖實例*/
map = new BMap.Map("map");
(2)展示臺站信息及狀態。通過前端的接口類MapDao和javascript代碼中的getTitle,getMsg和statusInfo方法,在地圖上實現臺站信息提示及設備狀態的準實時告警,代碼如下:
/*用javascript代碼實現臺站信息提示*/
function getTitle(eq){
return eq.sta_code+" "+eq.sta_cname+"["+eq.recorder_model+"](經度:"+eq.lon+",緯度:"+eq.lat+")IP/port:"+eq.ip+":"+eq.port+" "
+getMsg(eq,eq.status)
}
/*用javascript代碼展示設備狀態告警信息*/
function statusInfo(status){
var title = "";
var img = "";
if(status==1){
title = "通信中斷";
img = "";
}else if(status==2){
title = "通信告警";
img = "";
}else if(status==3){
title = "告警";
img = ""
}else if(status==0){
title = "正常"
img = "";
}
for(var i=0;i>length;i++){
html+=′>li>′
html+=′>span>>/span>′
html+=′>a href="javascript:;" class="ellipsis" >>span >′
+datas[i].sta_code+′>/span>′+getMsg(datas[i],status)+′>i>>/i>>/a>′
html+=′>label>′+ new
Date(datas[i].lastUpdateTime*1000).toLocaleTimeString()+">/label>"
html+=′>/li>′
}
……
}
(3)人機交互。通過前端的html頁面、InfoDAO接口類、InfoMapper類和后端的API相互結合,實現從監控平臺的電子地圖上控制設備。

圖2 Collectors強震動臺網監控平臺Fig.2 Collectors monitoring platform for strong motion observation network
事件數據自動快速匯集是進行地震烈度速報的先決條件。在業務邏輯層,該模塊依托“強震動記錄器的接口模塊”,聯合“強震動事件參數自動處理模塊”,解碼并計算出入庫的參數,按照數據庫和文件存儲方式(Anchetaetal,2014),實現對各個臺站的事件數據流歸檔存儲。存儲的內容包括地震事件ID、臺站事件名、臺網代碼、臺站代碼、臺站名稱、采樣率、采樣點個數、記錄長度、記錄開始時間、記錄結束時間、三通道的PGA和PGV、儀器烈度、事件類型、提交時間、操作者等,存儲的結果信息,如圖3所示。存儲過程的核心程序如下:
WaveformEvent w = new WaveformEvent();
w.setEvent_id(String.valueOf(TimeUtil.date2 YMDHMS(sDate)));/*置地震事件ID*/
w.setSta_Event_name(eq.getSta_code()+w.getEvent_id());/*置臺站事件名*/
w.setNet_code(eq.getNet_code());/*置臺網代碼*/
w.setSta_code(eq.getSta_code());/*置臺站代碼*/
w.setNsamples((int)event.getFileHead().getRoParams().getStream().getNscans());/*置采樣點個數*/
w.setSamp_rate(event.getFileHead().getRwParams().getStream().getSps());/*置采樣率*/
w.setStart_time(sDate);/*置記錄開始時間*/
w.setEnd_time(eDate);/*置記錄結束時間*/
w.setRec_lenth((int)duration);/*置記錄長度*/
w.setEW_PGA((float)result.getEwPGA());/*置東西向PGA*/
w.setNS_PGA((float)result.getNsPGA());/*置北南向PGA*/
w.setUD_PGA((float)result.getUdPGA());/*置垂直向PGA*/
w.setEW_PGV((float)result.getEwPGV());/*置東西向PGV*/
w.setNS_PGV((float)result.getNsPGV());/*置北南向PGV*/
w.setUD_PGV((float)result.getUdPGV());/*置垂直向PGV*/
w.setIntensity((float)result.getIntensity());/*置烈度*/
w.setSub_time(new Date());/*置提交時間*/
w.setOperator("sys");/*置操作者,缺省為sys*/
w.setFlag(event.getFlags());/*置事件類型*/
w.setWaveform(event.getBs());/*存儲波形文件*/

圖3 事件數據展示頁Fig.3 Display page of event data
當“強震動記錄器的接口模塊”驅動事件數據流接收任務時,直接解碼三分向數據,并根據通道位置和極性確定正確的三分向數據。然后按照事件前20 s的樣本對三分向數據進行基線校正,積分出速度和位移時程,結合儀器參數進行單位換算后,求取峰值加速度PGA、峰值速度PGV和峰值位移PGD。最后,按照“〔2015〕18號《儀器地震烈度計算暫行規程》”的烈度算法(2)中國地震局.2015.儀器地震烈度計算暫行規程.(金星等,2013),計算儀器地震烈度I。“強震動事件參數自動處理模塊”實現了強震動參數的自動計算和存儲入庫,為強震動記錄報告單、強震動記錄分析結果、強震動觀測簡報、峰值加速度、峰值速度和儀器烈度等報表及分布圖件的生成提供了可調用的結果數據(Worden,Wald,ORDEN2010),如圖4所示。該模塊的核心實現過程如下:
(1)解碼三分向數據,從數據庫中匹配通道位置和極性,確定正確的三分向數據。
(2)取事件前20 s的樣本均值進行零線校正,用線性加速度法積分出速度和位移時程,求PGA,PGV值。即在程序中,按照下面的式(1)和(2),在t=0時,取Vt=0,Dt=0,逐次計算出速度和位移時程,并分別取其最大值,最后合成三分向的PGA和PGV,具體算式如下:
(1)
(2)
式中:V為速度值;A為加速度值;D為位移值;Δt為一個采樣點的時間間隔;t為某個采樣點的時間。
(3)計算由峰值加速度得到的儀器烈度IPGA或由峰值速度得到的IPGV:
IPGA=3.20lg(PGA)+6.59
(3)
IPGV=2.96lg(PGV)+9.78
(4)
當IPGA和IPGV均大于等于6.0時,則儀器地震烈度I取IPGV,如式(5)所示;否則取IPGA和IPGV的算術平均值,如式(6)所示:
I=IPGV(IPGV≧6.0且IPGA≧6.0)
(5)
I=(IPGV+IPGA)/2 (IPGV>6.0且IPGA>6.0)
(6)

圖4 強震動參數展示頁Fig.4 Display page of strong motion parameters
為方便強震動臺網工作人員交互分析、校核強震動事件參數及提交事件入庫,該系統軟件還專門設計了桌面版的“強震動臺網交互分析數據處理模塊”,如圖5所示。該模塊的開發,力求
界面簡潔、友好、易用、通用,除沿用“強震動事件參數自動處理模塊”的大部分功能外,還擴充了部分常用的功能。具體包括基線校正、仿真速度、仿真位移、反應譜計算、儀器烈度計算、傅立葉譜計算、功率譜計算、自相關系數計算、波形顯示、反應譜曲線顯、傅立葉譜曲線顯示和功率譜曲線顯示、ASCII格式,MiniSEED格式和SEED格式轉換、事件文件及結果參數入庫等。該模塊用Java SE 8實現上述數據處理方法,用JFreeChart和JCommon類庫來實現波形及其他曲線圖的繪制及顯示。本模塊的具體實現所占篇幅較大,將另外行文介紹。

圖5 強震動臺網交互分析數據處理軟件Fig.5 Data processing software of mutual analysis for strong motion network
因日常業務的需要,根據《強震動臺網運行維護與管理細則》的規定,該模塊設計了遠程通訊檢查報表、遠程通訊及功能測試結果上報表的自動生成模板。按照選定的某個臺網或某個臺站的條件,由相應的模板批量自動生成指定時間內的報表,取代傳統手工填報的方式,減輕了臺網工作人員的勞動強度。“臺站運行狀態準實時監控模塊”為遠程通訊檢查報表、遠程通訊及功能測試結果上報表提供了必要的結果信息,“報表自動生成模塊”僅僅需要通過DAO,從底層數據庫的遠程通訊檢查數據表中提取信息,生成相應的報表。
在可跨平臺部署的新版本強震動臺網數據處理系統推出之前,由筆者開發的基于C/S結構的舊版本軟件已經在全國20多個省、自治區、直轄市地震局推廣應用,取得了一定的效果。以地震多發區為重點服務對象,新版本“Collectors強震動臺網數據處理系統”于2017年6月在云南省地震局優先升級部署,隨后陸續對四川省地震局、新疆維吾爾自治區地震局、青海省地震局等10多家單位的系統軟件進行了更新。截至2019年6月30日,新版本系統軟件7×24 h連續、穩定、可靠、高效地運行了2年整,共記錄到儀器狀態數據36 441 002條,記錄天然地震事件、功能測試事件和誤觸發事件共計1 118 669組。系統軟件全流程自動化處理,除自動完成日常的智能化監控和常規標定外,在處置地震事件時,一般能在2~10 min內陸續完成地震事件的自動回收和強震動參數的自動產出,速報能力由軟件推廣前的小時級別躍升到分鐘級別,較大程度提高了地震事件匯集與處理的速度。
以地震頻度高、強度大的云南、四川、新疆3個省份的統計為例,在云南省地震局的軟件系統中,入庫的儀器狀態記錄13 690 804條,事件記錄78 890組(含天然地震事件、功能測試事件和誤觸發事件),事件記錄自動回收的平均用時為震后5分49秒,最快的回收時間為震后1分28秒,詳見表1。自2017年6月至2019年6月,云南轄區內記錄的3次5.0級以上地震中,剔除網絡不穩定及設備故障等因素的影響,震后7分鐘內,地震事件便能陸續自動完成入庫并自動產出PGA,PGV,IPGA和IPGV等強震動參數結果。其中最短用時是震后1分30秒,最長用時為震后5分38秒,最大儀器地震烈度為高大臺記錄的6.3度,詳見表2。四川省地震局入庫的儀器狀態記錄10 431 910條,事件記錄860 336組,全部事件記錄自動回收的平均用時為7分38秒,最快的回收時間為1分18秒。四川省地震局事件記錄回收的平均用時超出5 min,主要受臺站的網絡環境、MR-2002儀器設備的事件存儲參數設置及MR-2002儀器設備老化等影響所致。自2017年8月7日至2019年6月17日,四川轄區內記錄的5次5.0級以上地震中,地震事件記錄回收及強震動參數產出最短用時為震后1分18秒,最長用時為震后8分54秒,記錄得的最大儀器地震烈度為珙縣中學的8.2度,詳見表2。新疆維吾爾自治區地震局入庫的儀器狀態記錄5 784 696條,事件記錄26 317組,事件記錄自動回收的平均用時為4分15秒,最快的回收時間為1分09秒。新版系統軟件更新以來,新疆轄區內記錄的4次5.0級以上地震中,地震事件記錄回收及強震動參數產出最短用時為震后2分40秒,最長用時為震后4分56秒,錄得的最大儀器地震烈度為臥里托乎拉格臺的6.0度,具體數據見表2。

表1 數據匯集情況統計Tab.1 Statistics of data collection

表2 地震事件記錄回收及強震動參數產出用時Tab.2 Time-consuming of record recycling and output of strong motion parameters
“Collectors強震動臺網數據處理系統軟件”在全國推廣應用以來,已經接入了近千個強震動臺站的觀測數據,解決了中國強震動觀測臺網數據匯集、監控、自動處理及日常業務處理等方面的迫切需求。系統軟件全流程自動化處理,其所具備的多指標、精細化的臺站狀態監控及強震動參數分鐘級別產出等能力,使得其在日常的臺網運行維護管理和地震應急工作上,發揮了實效,用戶滿意度較高。同時,也存在一些值得探討的問題:
(1)在“Collectors強震動臺網數據處理系統軟件”推廣之際,上層業務體制發生了重大改革,一定程度上影響了該系統軟件可持續的升級開發。如強震動參數產出方面,圖形及圖表的多樣性展示是否繼續投入力度;新的強震動數據采集器的接口是否還接入系統;前期基于相關管理規定定義的報表模板是否沿用,等等。而這些功能,恰恰是用戶最迫切需要的,也是影響系統軟件生命周期的關鍵所在。
(2)該系統軟件的升級開發雖然受到業務體制改革的影響,但筆者認為,該系統軟件無論是對于地震動衰減規律統計、場地土層反應研究、結構抗震性能分析、地震危險性分析或地震區劃的數據收集方面,還是在地震烈度速報、震害快速評估等應用領域依然能發揮較大的作用。因此,該系統軟件應借助數據自動匯集的優勢,循序漸進地構建相應的自動處理算法模型,繼續完善和拓展新功能,開展相關的應用研發。
本文及有關研究得到了中國地震局強震動觀測學科組各位專家的指導以及國家強震動臺網中心、云南、四川、新疆等地震局同事們的幫助和支持,在此一并致謝。