甄宇同,葉 浩,杜 微,顧寶剛,王麗杰
(海城市地震臺(tái),遼寧 海城 114200)
1975 年海城7.3 級(jí)地震發(fā)生后,海城老震區(qū)微震、小震不斷,中強(qiáng)地震頻發(fā),由于民眾防震減災(zāi)意識(shí)不斷提高,這也對(duì)海城市地震工作提出了更高的要求。海城市地震臺(tái)承擔(dān)著向海城市市委、市政府、市地震局等上級(jí)主管單位報(bào)送震后應(yīng)急和地震會(huì)商材料等任務(wù)。
為了能夠及時(shí)準(zhǔn)確地上報(bào)震情信息,根據(jù)實(shí)際工作專(zhuān)門(mén)研發(fā)了一套震情報(bào)告自動(dòng)產(chǎn)出軟件,實(shí)現(xiàn)快速產(chǎn)出震情文字材料,避免出現(xiàn)由于人工因素存在的問(wèn)題,提高工作效率,為地震應(yīng)急決策提供依據(jù)[1-4]。
震情報(bào)告自動(dòng)產(chǎn)出軟件基于Visual Basic和Python 兩種編程語(yǔ)言開(kāi)發(fā),整體架構(gòu)使用多進(jìn)程、多線(xiàn)程的工作模式,各項(xiàng)功能采用流程化的結(jié)構(gòu)設(shè)計(jì)。使用Visual Basic語(yǔ)言開(kāi)發(fā)了地震速報(bào)信息與地震目錄獲取、地震目錄處理和Word 文檔編輯等功能,使用Python 語(yǔ)言開(kāi)發(fā)了向企業(yè)微信推送文件的功能。
軟件模塊充分考慮功能獨(dú)立、代碼復(fù)用的原則,每個(gè)模塊獨(dú)立封裝自身參數(shù)、方法,并單獨(dú)編譯[5]。軟件開(kāi)發(fā)過(guò)程中使用了大量控件、類(lèi)庫(kù)和API 函數(shù),增強(qiáng)可操作性,無(wú)需安裝其他輔助軟件即可實(shí)現(xiàn)相關(guān)功能[6]。同時(shí)使用了看門(mén)狗技術(shù),避免意外崩潰而影響軟件的正常運(yùn)行。絕大多數(shù)參數(shù)(如臺(tái)站經(jīng)緯度、震中距、起始震級(jí)、地震目錄范圍等)用戶(hù)可根據(jù)實(shí)際需求自行設(shè)定,軟件的可擴(kuò)展性得到大幅提高。
震情報(bào)告自動(dòng)產(chǎn)出軟件自動(dòng)產(chǎn)出的震情報(bào)告包括兩個(gè)文檔,一是向海城市市委市政府、應(yīng)急管理服務(wù)中心報(bào)送的《震情匯報(bào)》,主要是根據(jù)每月、每周的地震會(huì)商匯總上月或上周海城老震區(qū)、省內(nèi)及鄰區(qū)、國(guó)內(nèi)、國(guó)外的地震目錄、宏觀(guān)異常和分析意見(jiàn)等內(nèi)容;二是震后向鞍山市地震局報(bào)送的《震情特刊》,包括地震簡(jiǎn)訊、宏微觀(guān)異常及綜合分析意見(jiàn)等內(nèi)容。因兩個(gè)文檔的觸發(fā)機(jī)制、數(shù)據(jù)源和文件內(nèi)容等均不相同,故采取了兩種不同的設(shè)計(jì)流程。
《震情匯報(bào)》的產(chǎn)出采取定時(shí)觸發(fā)機(jī)制,即用戶(hù)可以設(shè)置每月(月報(bào))、每周(周報(bào))的特定時(shí)間產(chǎn)出報(bào)告。數(shù)據(jù)源為中國(guó)地震臺(tái)網(wǎng)中心的地震目錄數(shù)據(jù)庫(kù),首先由軟件定時(shí)自動(dòng)下載不同震級(jí)下限的地震目錄文件,然后對(duì)下載后的地震目錄按設(shè)置參數(shù)(發(fā)震起止日期、起始震級(jí)、震中名稱(chēng)、經(jīng)緯度范圍、震中距等)自動(dòng)篩選和格式處理,導(dǎo)入缺省或在日常工作中記錄的宏觀(guān)異常等內(nèi)容,最后對(duì)標(biāo)題、地震目錄列表等文字信息進(jìn)行自動(dòng)格式化排版,產(chǎn)出Word文檔。

圖1 軟件工作流程圖Fig.1 Software working flow chart
《震情特刊》的產(chǎn)出采取地震觸發(fā)機(jī)制,即接收到地震速報(bào)信息后根據(jù)設(shè)定的參數(shù)達(dá)到報(bào)告產(chǎn)出的條件則產(chǎn)出《震情特刊》。數(shù)據(jù)源為遼寧臺(tái)網(wǎng)發(fā)布的地震速報(bào)短信,首先由地震速報(bào)短信接收設(shè)備負(fù)責(zé)接收遼寧臺(tái)網(wǎng)推送的地震速報(bào)短信(這里不再詳述),本軟件對(duì)短信內(nèi)容進(jìn)行格式化處理提取地震三要素等信息,然后根據(jù)設(shè)置參數(shù)判斷是否符合產(chǎn)出報(bào)告條件,若符合條件則調(diào)用《震情特刊》Word 文檔編輯模塊產(chǎn)出報(bào)告。
報(bào)告產(chǎn)出后存儲(chǔ)在本地指定目錄,最后將報(bào)告手動(dòng)或自動(dòng)推送給指定人員即完成了整個(gè)流程。報(bào)告推送的方式有兩種,一是調(diào)用企業(yè)微信推送可執(zhí)行程序發(fā)送給指定企業(yè)微信用戶(hù);二是通過(guò)電子郵件方式推送指定收件人,如圖1所示。
震情報(bào)告自動(dòng)產(chǎn)出軟件按照設(shè)計(jì)流程和預(yù)設(shè)模板自動(dòng)產(chǎn)出和推送報(bào)告,為實(shí)現(xiàn)自動(dòng)數(shù)據(jù)獲取、數(shù)據(jù)處理、文檔編輯和自動(dòng)發(fā)送功能,使用了多個(gè)Timer 控件。軟件同時(shí)還具備手動(dòng)產(chǎn)出功能,可在需要時(shí)立即手動(dòng)產(chǎn)出報(bào)告。這里以《震情匯報(bào)》為例主要介紹創(chuàng)建模板和報(bào)告自動(dòng)推送的相關(guān)技術(shù)和方法。
在Visual Basic 調(diào)用Word 之前,需要先引入Microsoft Word 16.0 Object Library 對(duì)象庫(kù)[7-8]才能便捷地以Word 為對(duì)象編程,然后建立Application 對(duì)象和Document 對(duì)象。報(bào)告內(nèi)容部分包括紅頭標(biāo)識(shí)和期數(shù)、海城老震區(qū)地震活動(dòng)、省內(nèi)及鄰區(qū)(ML≥2.0)、國(guó)內(nèi)(MS≥5.0)、國(guó)外(MS≥7.0)、宏觀(guān)異常、分析意見(jiàn)和報(bào)送單位等部分。正文部分涉及震中距計(jì)算、震中所在鄉(xiāng)鎮(zhèn)名稱(chēng)獲取的有關(guān)技術(shù)和算法不再詳述。軟件可預(yù)設(shè)缺省的宏觀(guān)異常和分析意見(jiàn),也可進(jìn)行手動(dòng)編輯。
以《震情匯報(bào)》的定期自動(dòng)產(chǎn)出為例,其核心流程包括地震目錄下載、按條件篩選地震、導(dǎo)入缺省或在日常工作中記錄的宏觀(guān)異常記錄文本和報(bào)告推送(2.3節(jié))等。
地震目錄數(shù)據(jù)的下載基于FTP 協(xié)議,其步驟為啟動(dòng)與遠(yuǎn)程主機(jī)建立連接,然后向遠(yuǎn)程主機(jī)發(fā)出傳輸命令,遠(yuǎn)程主機(jī)在收到命令后給予響應(yīng),并執(zhí)行正確的命令。
地震目錄篩選步驟為:首先讀取發(fā)震日期、震中位置字符串,如篩選2022 年8 月份海城市發(fā)生的地震,則逐行讀取地震目錄文件截取發(fā)震日期字符串并將其轉(zhuǎn)變?yōu)閿?shù)值類(lèi)型,條件為:20220801≤Date≤20220831,同時(shí)查找震中位置字符串中是否包含“鞍山市海城市”字符,若符合這兩個(gè)條件則保存至Haicheng202208.EQT文件,再讀取該文件進(jìn)行震級(jí)區(qū)間次數(shù)統(tǒng)計(jì)并根據(jù)冒泡算法篩選出最大地震。
宏觀(guān)異常記錄部分由軟件提供錄入窗口,缺省為無(wú)宏觀(guān)異常描述文本,當(dāng)有宏觀(guān)異常時(shí)用戶(hù)可對(duì)文本內(nèi)容進(jìn)行修改,軟件將自動(dòng)保存為T(mén)XT 文件,產(chǎn)出報(bào)告時(shí)讀取該文件內(nèi)容并添加到預(yù)設(shè)位置。
2.3.1 企業(yè)微信方式
企業(yè)微信推送方式可以讓工作人員通過(guò)手機(jī)隨時(shí)隨地接收到軟件產(chǎn)出的報(bào)告,便于查閱和校核。這部分使用Python 語(yǔ)言開(kāi)發(fā),將代碼編譯成可執(zhí)行文件,待報(bào)告產(chǎn)出后由震情報(bào)告自動(dòng)產(chǎn)出軟件調(diào)用將報(bào)告文件推送到企業(yè)微信“自建應(yīng)用”—地震速報(bào)[海城市地震臺(tái)](圖2),自建應(yīng)用可見(jiàn)范圍的人員均可看到報(bào)告文件。有關(guān)企業(yè)微信企業(yè)ID、部門(mén)ID、AgentId和Secret等敏感信息寫(xiě)入加密后的Access數(shù)據(jù)庫(kù)。

圖2 企業(yè)微信自建應(yīng)用收到的報(bào)告文件Fig.2 Report files received by enterprise Wechat self-built applications
2.3.2 電子郵件方式
電子郵件推送方式主要用于自動(dòng)向上級(jí)主管單位和領(lǐng)導(dǎo)發(fā)送產(chǎn)出的報(bào)告,可同時(shí)發(fā)送給多個(gè)收件人。通過(guò)調(diào)用系統(tǒng)自帶的CDO 接口完成電子郵件的自動(dòng)推送,對(duì)外發(fā)送郵箱需要開(kāi)啟POP3/SMTP模式。代碼如下:


震情報(bào)告自動(dòng)產(chǎn)出軟件自2022 年3 月投入使用以來(lái),不管是在固定時(shí)間還是震后均能保證觸發(fā)產(chǎn)出快速、運(yùn)行穩(wěn)定,實(shí)現(xiàn)了信息自動(dòng)化。如:《震情匯報(bào)》月報(bào)(圖3a)設(shè)置的開(kāi)始產(chǎn)出時(shí)間為每月1 日8 時(shí)30 分,一般用時(shí)35秒左右即自動(dòng)完成了地震目錄下載、篩選、報(bào)告編輯和推送等一整套流程,這在以往人工操作時(shí)一般需要2~3 個(gè)小時(shí)才能完成;再如:2022 年4 月3 日10 時(shí)42 分在遼寧省鞍山市海城市發(fā)生M2.2 級(jí)地震,10 時(shí)47 分短信接收設(shè)備接收到速報(bào)短信,13 秒后即產(chǎn)出本次地震的《震情特刊》(圖3b)并完成自動(dòng)推送,這在以往人工操作時(shí)一般需要20~30分鐘才能完成。

圖3 軟件自動(dòng)生成的《震情匯報(bào)》和《震情特刊》Fig.3 Earthquake Report and Earthquake Special Issue automatically generated by software
震情報(bào)告自動(dòng)產(chǎn)出軟件觸發(fā)設(shè)定后,程序自動(dòng)完成數(shù)據(jù)獲取、處理及報(bào)告產(chǎn)出和推送。軟件架構(gòu)合理,運(yùn)行穩(wěn)定,報(bào)告的產(chǎn)出和推送及時(shí)、準(zhǔn)確,極大地縮短了震后應(yīng)急和地震會(huì)商資料的準(zhǔn)備時(shí)間,減少了大量的重復(fù)性勞動(dòng)[9],滿(mǎn)足了海城市地震臺(tái)地震應(yīng)急和地震會(huì)商工作的時(shí)效性需求。今后,將緊密結(jié)合實(shí)際工作的進(jìn)一步完善、擴(kuò)展和升級(jí)軟件功能,以便發(fā)揮該軟件的更大作用。