李貴元,何思源,鐘李彬,劉華姣,徐文海
(四川省地震局成都地震基準臺,四川 成都 611730)
《地震前兆臺網專用設備網絡通信》規定了中國地震前兆臺網專用設備基于以太網接口網絡化功能的技術要求,包括前兆臺網專用設備的通信接口、設備信息、運行功能、數據格式、通信協議和訪問安全控制的約定,以太網接口是設備通信的必備標準接口。規程是“中國數字地震觀測網絡”分項“中國地震前兆臺網”之《中國地震前兆臺網技術規程》的組成部分,適用于“中國地震前兆臺網”建設。地震前兆臺網設備是指可用于測量重力、地磁、地殼形變、地電和地下流體各個學科的觀測對象的設備以及臺站輔助觀測設備。地震前兆設備接口軟件的設計需嚴格遵守地震前兆臺網專用設備網絡通信規定,主要針對地電和地磁的設備接入進行研究。本文主要采用基于TCP/IP協議的SOCKET連接技術,設計能夠在行業網絡環境下實現對儀器控制與參數讀取的接口軟件,主要功能有收集測量數據、設定工作參數、查看狀態信息、調取工作日志等。軟件數據通信通過以太網、采用基于TCP/IP協議的SOCKET連接的前兆臺網專用設備與客戶端的數據信息交換??蛻舳送ㄟ^上傳命令字和相關參數,設備端解析原語后執行相應動作,返回執行結果。接口軟件可在地震前兆設備調試、教學實踐、儀器故障原因判定等工作中應用。

圖1 前兆設備網絡連接示意圖
成都地震臺有GM-4磁通門磁力儀、FHDZ-M15自動化地磁臺站系統、ZD8M地電儀、ZD9A地電場儀等數字化前兆設備,各前兆設備的網絡連接如圖1所示。成都地震臺作為地球物理學實踐教育基地,承擔教學實踐的工作,如何在實習教學中,對重力、地磁、地電儀器狀態信息進行教學演示,使實踐人員更清楚設備如何進行通信、如何進行數據傳輸以及在故障中如何對指定IP地址的服務器告警,了解SNTP協議在儀器校時的工作機制具有重要意義。前兆設備接口軟件主要從儀器數據、儀器參數、參數設置等幾方面進行設計,使軟件能應用于監測人員與設備交互的日常工作之中,輔助監測人員深入了解前兆儀器在通信、數據存儲、遠程控制等方面的原理。
軟件主要通過TCP/IP協議連接前兆設備,對每一套接入的設備分配對應內存和軟件資源,利用Socket(IP:Port)對設備發起連接請求,儀器做出應答,使用設置好的用戶名和密碼登陸設備。軟件依照規程的協議實現監測數據、工作參數、設備告警、參數設定(何案華等,2008)等4個模塊。軟件流程圖如圖2所示??紤]到連接設備時,設備同時也承擔著數據采集任務,規程規定在連接儀器30 s后沒有操作,連接自動斷開,以保障整個觀測系統的穩定運行。在軟件設計中,各個功能操作應在登錄后30 s內完成操作,若需要持續連接,可以考慮以合法的空操作指令作為心跳幀,在30 s內向設備發起請求來維持連接。在讀取監測數據時,存在數據量過大的問題,對于秒采樣的磁通門磁力儀單測項的數據量一天是86 400字節(王秀英等,2009),在同時讀取15天的數據時要考慮速度較慢的問題。在數據傳輸過程中,軟件發送數據傳輸指令,設備端響應數據傳輸命令,依據命令將相應的測量數據發送到接口軟件(王秀英等,2008)。軟件再接收數據進行數據處理。獲取工作參數、告警信息、設定儀器參數功能與數據傳輸過程類似。

圖2 通用接口軟件流程圖
在連接設備中,值得注意的是,在設備連接中一定要保證正確的設備ID號和上位機運行所應用的端口號。根據規程,設備ID由12個字符表示,一般前4個字符為“X”加設備的測項代碼,中間4個字符為廠家自定義標志,后4個字符為設備序列號。測項代碼遵照《地震及地震前兆測項分類與代碼(DB/T 3-2011)》的規定,設備序列號由4個阿拉伯數字組成。連接成功后使用缺省的用戶名和密碼即可登錄設備。在選用Socket時,主要比較了CAsyncSocket類和CSocket類之間的區別,其中在CAsyncSocket類中逐個封裝了WinSock API,這個類基于非常了解網絡通信,目的是為了在MFC中使用WinSock,開發者有能力處理諸如阻塞、字節順序和在Unicode與MBCS間轉換字符的任務。提供更方便的接口以自動處理這些任務,CSocket類是由CAsyncSocket類繼承下來的,它提供了比CAsyncSocket類更高的WinSock API接口。CSocket類和CSocketFile類可以與CArchive類合作起來管理發送和接收的數據,這使得管理數據收發更加便利。CAsyncSocket類是異步通信,CSocket類是同步通信;前者是非阻塞模式,后者是阻塞模式。CAsyncSocket類異步效率高,但是更容易出錯,而內置了多線程機制的CSocket類能夠保證數據的順序交付,提高了效率。在接口軟件的設計中,最終采用了CSocket類作為核心組件實現與前兆設備的數據收發管理機制。
數據傳輸協議采用基于SOCKET連接的HTTP(Hyper Text Transfer Protocol)協議,支持指令方式和網頁方式。本文中僅使用了指令方式,通信協議采用的是HTTP 1.1版本,相較于HTTP 1.0,HTTP 1.1支持持久連接,在一個TCP連接上可以傳送多個HTTP請求和響應,減少了建立和關閉連接的消耗和延遲,允許客戶端不用等待上一次請求結果返回就可發送下一次請求,能有效降低系統交互時間,提高效率。客戶端發送一個請求消息到設備端包含請求行、請求頭部、空行和請求數據4個部分(見圖3)。使用HTTP請求消息結構分析來解析用戶登錄設備過程,用戶登錄設備端的協議定義如圖4所示。

圖3 HTTP請求消息結構

圖4 用戶登錄協議結構
使用HTTP的GET請求,前兩個字段分別為請求方法名和固定的空格,第三個字段是除指令原語固有格式外指令的字節數總和,ID字段需要的唯一的設備ID參數,lin字段是命令字,表示協議功能,取login的lin為用戶登錄功能,username和password表示用戶登錄的參數。最后為固定格式空格加上協議版本號??蛻舳税l送請求后,設備端驗證登錄連接正常,返回$ack 。驗證登錄連接不正常,返回$nak 。若儀器端接收到錯誤指令,返回$err 。對于更復雜一點的協議,協議的固定格式還是一致,唯一的區別在于參數列表發生了變化,比如獲取整體觀測數據,最多可以獲取15天的觀測數據,協議結構如圖5所示。

圖5 獲取整體測量數據協議結構
協議的主體結構與上一協議一致,此處不再贅述,主要分析協議功能和參數列表,該協議的命令字是dat,表示功能為獲取觀測數據,n是獲取數據的天數,最大取值為15,只能獲取的觀測數據為15天,day0即獲取當天的數據,day1為前一天數據,以此類推。雖m可以取值到255,但最多到day14為有效參數。在客戶端發出請求后,正常執行返回信息格式,格式為:$第一個數據包信息長度 第一個數據包內容 第二個數據包信息長度 第二個數據包內容 ……最后一個數據包信息長度 最后一個數據包內容 ack 。其中$為返回信息起始符。信息長度是指數據包的具體內容的字節總數,不含“信息長度”本身和以“ ”表示的分隔符。數據包內容是以天為單位的測量數據, 為換行符,用于分隔各個信息。若數據傳輸參數指定的某天數據不存在,則將對應天的數據包信息長度置為0,不傳輸該天數據包內容。若儀器端接收到錯誤指令,返回$err 。
使用了封裝的SocketClient實現數據通信,分別設置了Socket連接、Socket重新連接、Socket斷開連接等函數。在新建的線程中間接收并分發數據給指定的函數處理。下例是線程中處理數據的代碼:
DWORD WINAPI MyThreadFunction1(LPVOID lpParam)
{
SocketClient* c = (SocketClient*)lpParam; //取得SocketClient類的對象
memset(recvBuff, 0, sizeof(recvBuff));
while (c->isConnected){ //連接可用的時候
int ret, num = 100, err;
ret = recv(c->sockClient, recvBuff, num, 0); //接收Socket數據
if (ret == SOCKET_ERROR)
{
err = WSAGetLastError();
if (err == WSAEWOULDBLOCK)
{ continue; }
else if (err == WSAETIMEDOUT){} //超時。
else if (err == WSAENETDOWN){} //連接斷開。
else //其他錯誤。
break;
}
else {
isGetData = TRUE;
//break; //接受成功,退出線程
}
}
return 0;
}
數據發送模塊使用的發送函數的代碼:
int SocketClient::sendData(char *data, int length)
{
hThread1 = CreateThread( // 開啟接收線程
NULL, // 默認安全屬性
0, // 使用默認棧大小
MyThreadFunction1, // 線程函數名稱
this, // 線程函數參數
0, // 使用默認創建標志
NULL); // 返回函數標識符
int res = send(this->sockClient, data, length, 0); //數據發送
return res;
}

圖6 軟件主界面
前兆設備接口軟件主要分為4個模塊(見圖6),分別是數據獲取、設備控制、設備監視、工作參數。首先是Socket連接設備,連接成功后,才能使用賬號信息登錄設備。之后才能實現對設備的管理控制。
軟件使用了臺站代碼為51×××、設備ID為3120IGEA××××的崇州地震臺的GM-4磁通門磁力儀為例,對軟件進行測試,該軟件完成了預期的效果,能夠獲取準確的設備狀態信息、設備網絡參數以及相應的各項功能。圖7、圖8為軟件在獲取設備信息的測試情形。

圖7 設備狀態信息獲取

圖8 設備網絡參數獲取
在使用地震觀測網絡技術規程開發前兆設備接口軟件中,有以下幾點認識:(1)地震前兆設備支持多種傳輸協議,實現了FTP,HTTP1.1等通用的應用層傳輸協議,為用戶多渠道獲取觀測數據提供了方法。(2)地震觀測網絡技術規程為前兆設備遠程監控提供了解決方案,可以實現多平臺、多終端的數據監控和故障處理判定。(3)地震接口軟件的實現為Android/iOS移動設備接入地震專用儀器驗證了技術可行性,為地震數據在移動終端展示提供了解決方案。(4)本次研制的接口軟件能夠獲取設備的狀態信息、網絡信息、供電狀況,能在設備原理案例學習、儀器故障判定等工作中發揮作用,以期前兆設備接口軟件能在后續工作中有更大范圍的推廣應用。