• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      地震前兆設(shè)備接口軟件的設(shè)計與研究

      2019-02-12 04:02:00李貴元何思源鐘李彬劉華姣徐文海
      四川地震 2019年4期
      關(guān)鍵詞:前兆臺網(wǎng)數(shù)據(jù)包

      李貴元,何思源,鐘李彬,劉華姣,徐文海

      (四川省地震局成都地震基準(zhǔn)臺,四川 成都 611730)

      《地震前兆臺網(wǎng)專用設(shè)備網(wǎng)絡(luò)通信》規(guī)定了中國地震前兆臺網(wǎng)專用設(shè)備基于以太網(wǎng)接口網(wǎng)絡(luò)化功能的技術(shù)要求,包括前兆臺網(wǎng)專用設(shè)備的通信接口、設(shè)備信息、運行功能、數(shù)據(jù)格式、通信協(xié)議和訪問安全控制的約定,以太網(wǎng)接口是設(shè)備通信的必備標(biāo)準(zhǔn)接口。規(guī)程是“中國數(shù)字地震觀測網(wǎng)絡(luò)”分項“中國地震前兆臺網(wǎng)”之《中國地震前兆臺網(wǎng)技術(shù)規(guī)程》的組成部分,適用于“中國地震前兆臺網(wǎng)”建設(shè)。地震前兆臺網(wǎng)設(shè)備是指可用于測量重力、地磁、地殼形變、地電和地下流體各個學(xué)科的觀測對象的設(shè)備以及臺站輔助觀測設(shè)備。地震前兆設(shè)備接口軟件的設(shè)計需嚴(yán)格遵守地震前兆臺網(wǎng)專用設(shè)備網(wǎng)絡(luò)通信規(guī)定,主要針對地電和地磁的設(shè)備接入進(jìn)行研究。本文主要采用基于TCP/IP協(xié)議的SOCKET連接技術(shù),設(shè)計能夠在行業(yè)網(wǎng)絡(luò)環(huán)境下實現(xiàn)對儀器控制與參數(shù)讀取的接口軟件,主要功能有收集測量數(shù)據(jù)、設(shè)定工作參數(shù)、查看狀態(tài)信息、調(diào)取工作日志等。軟件數(shù)據(jù)通信通過以太網(wǎng)、采用基于TCP/IP協(xié)議的SOCKET連接的前兆臺網(wǎng)專用設(shè)備與客戶端的數(shù)據(jù)信息交換??蛻舳送ㄟ^上傳命令字和相關(guān)參數(shù),設(shè)備端解析原語后執(zhí)行相應(yīng)動作,返回執(zhí)行結(jié)果。接口軟件可在地震前兆設(shè)備調(diào)試、教學(xué)實踐、儀器故障原因判定等工作中應(yīng)用。

      1 前兆設(shè)備接口軟件系統(tǒng)設(shè)計

      1.1 軟件需求分析

      圖1 前兆設(shè)備網(wǎng)絡(luò)連接示意圖

      成都地震臺有GM-4磁通門磁力儀、FHDZ-M15自動化地磁臺站系統(tǒng)、ZD8M地電儀、ZD9A地電場儀等數(shù)字化前兆設(shè)備,各前兆設(shè)備的網(wǎng)絡(luò)連接如圖1所示。成都地震臺作為地球物理學(xué)實踐教育基地,承擔(dān)教學(xué)實踐的工作,如何在實習(xí)教學(xué)中,對重力、地磁、地電儀器狀態(tài)信息進(jìn)行教學(xué)演示,使實踐人員更清楚設(shè)備如何進(jìn)行通信、如何進(jìn)行數(shù)據(jù)傳輸以及在故障中如何對指定IP地址的服務(wù)器告警,了解SNTP協(xié)議在儀器校時的工作機(jī)制具有重要意義。前兆設(shè)備接口軟件主要從儀器數(shù)據(jù)、儀器參數(shù)、參數(shù)設(shè)置等幾方面進(jìn)行設(shè)計,使軟件能應(yīng)用于監(jiān)測人員與設(shè)備交互的日常工作之中,輔助監(jiān)測人員深入了解前兆儀器在通信、數(shù)據(jù)存儲、遠(yuǎn)程控制等方面的原理。

      1.2 軟件總體設(shè)計

      軟件主要通過TCP/IP協(xié)議連接前兆設(shè)備,對每一套接入的設(shè)備分配對應(yīng)內(nèi)存和軟件資源,利用Socket(IP:Port)對設(shè)備發(fā)起連接請求,儀器做出應(yīng)答,使用設(shè)置好的用戶名和密碼登陸設(shè)備。軟件依照規(guī)程的協(xié)議實現(xiàn)監(jiān)測數(shù)據(jù)、工作參數(shù)、設(shè)備告警、參數(shù)設(shè)定(何案華等,2008)等4個模塊。軟件流程圖如圖2所示??紤]到連接設(shè)備時,設(shè)備同時也承擔(dān)著數(shù)據(jù)采集任務(wù),規(guī)程規(guī)定在連接儀器30 s后沒有操作,連接自動斷開,以保障整個觀測系統(tǒng)的穩(wěn)定運行。在軟件設(shè)計中,各個功能操作應(yīng)在登錄后30 s內(nèi)完成操作,若需要持續(xù)連接,可以考慮以合法的空操作指令作為心跳幀,在30 s內(nèi)向設(shè)備發(fā)起請求來維持連接。在讀取監(jiān)測數(shù)據(jù)時,存在數(shù)據(jù)量過大的問題,對于秒采樣的磁通門磁力儀單測項的數(shù)據(jù)量一天是86 400字節(jié)(王秀英等,2009),在同時讀取15天的數(shù)據(jù)時要考慮速度較慢的問題。在數(shù)據(jù)傳輸過程中,軟件發(fā)送數(shù)據(jù)傳輸指令,設(shè)備端響應(yīng)數(shù)據(jù)傳輸命令,依據(jù)命令將相應(yīng)的測量數(shù)據(jù)發(fā)送到接口軟件(王秀英等,2008)。軟件再接收數(shù)據(jù)進(jìn)行數(shù)據(jù)處理。獲取工作參數(shù)、告警信息、設(shè)定儀器參數(shù)功能與數(shù)據(jù)傳輸過程類似。

      1.3 關(guān)鍵技術(shù)分析

      圖2 通用接口軟件流程圖

      在連接設(shè)備中,值得注意的是,在設(shè)備連接中一定要保證正確的設(shè)備ID號和上位機(jī)運行所應(yīng)用的端口號。根據(jù)規(guī)程,設(shè)備ID由12個字符表示,一般前4個字符為“X”加設(shè)備的測項代碼,中間4個字符為廠家自定義標(biāo)志,后4個字符為設(shè)備序列號。測項代碼遵照《地震及地震前兆測項分類與代碼(DB/T 3-2011)》的規(guī)定,設(shè)備序列號由4個阿拉伯?dāng)?shù)字組成。連接成功后使用缺省的用戶名和密碼即可登錄設(shè)備。在選用Socket時,主要比較了CAsyncSocket類和CSocket類之間的區(qū)別,其中在CAsyncSocket類中逐個封裝了WinSock API,這個類基于非常了解網(wǎng)絡(luò)通信,目的是為了在MFC中使用WinSock,開發(fā)者有能力處理諸如阻塞、字節(jié)順序和在Unicode與MBCS間轉(zhuǎn)換字符的任務(wù)。提供更方便的接口以自動處理這些任務(wù),CSocket類是由CAsyncSocket類繼承下來的,它提供了比CAsyncSocket類更高的WinSock API接口。CSocket類和CSocketFile類可以與CArchive類合作起來管理發(fā)送和接收的數(shù)據(jù),這使得管理數(shù)據(jù)收發(fā)更加便利。CAsyncSocket類是異步通信,CSocket類是同步通信;前者是非阻塞模式,后者是阻塞模式。CAsyncSocket類異步效率高,但是更容易出錯,而內(nèi)置了多線程機(jī)制的CSocket類能夠保證數(shù)據(jù)的順序交付,提高了效率。在接口軟件的設(shè)計中,最終采用了CSocket類作為核心組件實現(xiàn)與前兆設(shè)備的數(shù)據(jù)收發(fā)管理機(jī)制。

      2 軟件編碼分析

      2.1 通訊協(xié)議分析

      數(shù)據(jù)傳輸協(xié)議采用基于SOCKET連接的HTTP(Hyper Text Transfer Protocol)協(xié)議,支持指令方式和網(wǎng)頁方式。本文中僅使用了指令方式,通信協(xié)議采用的是HTTP 1.1版本,相較于HTTP 1.0,HTTP 1.1支持持久連接,在一個TCP連接上可以傳送多個HTTP請求和響應(yīng),減少了建立和關(guān)閉連接的消耗和延遲,允許客戶端不用等待上一次請求結(jié)果返回就可發(fā)送下一次請求,能有效降低系統(tǒng)交互時間,提高效率??蛻舳税l(fā)送一個請求消息到設(shè)備端包含請求行、請求頭部、空行和請求數(shù)據(jù)4個部分(見圖3)。使用HTTP請求消息結(jié)構(gòu)分析來解析用戶登錄設(shè)備過程,用戶登錄設(shè)備端的協(xié)議定義如圖4所示。

      圖3 HTTP請求消息結(jié)構(gòu)

      圖4 用戶登錄協(xié)議結(jié)構(gòu)

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

      圖5 獲取整體測量數(shù)據(jù)協(xié)議結(jié)構(gòu)

      協(xié)議的主體結(jié)構(gòu)與上一協(xié)議一致,此處不再贅述,主要分析協(xié)議功能和參數(shù)列表,該協(xié)議的命令字是dat,表示功能為獲取觀測數(shù)據(jù),n是獲取數(shù)據(jù)的天數(shù),最大取值為15,只能獲取的觀測數(shù)據(jù)為15天,day0即獲取當(dāng)天的數(shù)據(jù),day1為前一天數(shù)據(jù),以此類推。雖m可以取值到255,但最多到day14為有效參數(shù)。在客戶端發(fā)出請求后,正常執(zhí)行返回信息格式,格式為:$第一個數(shù)據(jù)包信息長度 第一個數(shù)據(jù)包內(nèi)容 第二個數(shù)據(jù)包信息長度 第二個數(shù)據(jù)包內(nèi)容 ……最后一個數(shù)據(jù)包信息長度 最后一個數(shù)據(jù)包內(nèi)容 ack 。其中$為返回信息起始符。信息長度是指數(shù)據(jù)包的具體內(nèi)容的字節(jié)總數(shù),不含“信息長度”本身和以“ ”表示的分隔符。數(shù)據(jù)包內(nèi)容是以天為單位的測量數(shù)據(jù), 為換行符,用于分隔各個信息。若數(shù)據(jù)傳輸參數(shù)指定的某天數(shù)據(jù)不存在,則將對應(yīng)天的數(shù)據(jù)包信息長度置為0,不傳輸該天數(shù)據(jù)包內(nèi)容。若儀器端接收到錯誤指令,返回$err 。

      2.2 核心模塊

      使用了封裝的SocketClient實現(xiàn)數(shù)據(jù)通信,分別設(shè)置了Socket連接、Socket重新連接、Socket斷開連接等函數(shù)。在新建的線程中間接收并分發(fā)數(shù)據(jù)給指定的函數(shù)處理。下例是線程中處理數(shù)據(jù)的代碼:

      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數(shù)據(jù)

      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;

      }

      數(shù)據(jù)發(fā)送模塊使用的發(fā)送函數(shù)的代碼:

      int SocketClient::sendData(char *data, int length)

      {

      hThread1 = CreateThread( // 開啟接收線程

      NULL, // 默認(rèn)安全屬性

      0, // 使用默認(rèn)棧大小

      MyThreadFunction1, // 線程函數(shù)名稱

      this, // 線程函數(shù)參數(shù)

      0, // 使用默認(rèn)創(chuàng)建標(biāo)志

      NULL); // 返回函數(shù)標(biāo)識符

      int res = send(this->sockClient, data, length, 0); //數(shù)據(jù)發(fā)送

      return res;

      }

      圖6 軟件主界面

      2.3 軟件實現(xiàn)

      前兆設(shè)備接口軟件主要分為4個模塊(見圖6),分別是數(shù)據(jù)獲取、設(shè)備控制、設(shè)備監(jiān)視、工作參數(shù)。首先是Socket連接設(shè)備,連接成功后,才能使用賬號信息登錄設(shè)備。之后才能實現(xiàn)對設(shè)備的管理控制。

      2.4 軟件測試

      軟件使用了臺站代碼為51×××、設(shè)備ID為3120IGEA××××的崇州地震臺的GM-4磁通門磁力儀為例,對軟件進(jìn)行測試,該軟件完成了預(yù)期的效果,能夠獲取準(zhǔn)確的設(shè)備狀態(tài)信息、設(shè)備網(wǎng)絡(luò)參數(shù)以及相應(yīng)的各項功能。圖7、圖8為軟件在獲取設(shè)備信息的測試情形。

      圖7 設(shè)備狀態(tài)信息獲取

      圖8 設(shè)備網(wǎng)絡(luò)參數(shù)獲取

      3 認(rèn)識與討論

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

      猜你喜歡
      前兆臺網(wǎng)數(shù)據(jù)包
      地球物理臺網(wǎng)儀器維修信息管理的研究與實現(xiàn)
      地震研究(2021年1期)2021-04-13 01:05:30
      推進(jìn)報臺網(wǎng)深度融合 做強(qiáng)區(qū)級融媒體中心
      傳媒評論(2018年10期)2019-01-17 01:33:16
      哪些現(xiàn)象是地震前兆
      SmartSniff
      西藏地震應(yīng)急流動臺網(wǎng)淺析
      西藏科技(2016年9期)2016-09-26 12:21:39
      MRG9000媒資衛(wèi)士在市級電視臺全臺網(wǎng)的應(yīng)用
      右肝區(qū)不適或疼痛是肝癌表現(xiàn)的前兆嗎
      肝博士(2015年2期)2015-02-27 10:49:46
      基于Libpcap的網(wǎng)絡(luò)數(shù)據(jù)包捕獲器的設(shè)計與實現(xiàn)
      騰沖地電場震前的前兆異常分析
      地震研究(2014年3期)2014-02-27 09:30:57
      全國前兆臺網(wǎng)“九五”系統(tǒng)臺站接入的設(shè)計與實施*
      地震研究(2013年3期)2013-12-14 09:30:56
      保德县| 大邑县| 油尖旺区| 濮阳市| 包头市| 无棣县| 穆棱市| 越西县| 长白| 基隆市| 苍梧县| 临夏县| 满城县| 蓬溪县| 阿图什市| 德兴市| 高唐县| 东宁县| 布尔津县| 九龙城区| 平乐县| 故城县| 阜平县| 玉屏| 和龙市| 汉沽区| 丘北县| 普格县| 澳门| 万荣县| 巫溪县| 远安县| 武穴市| 石台县| 定兴县| 昂仁县| 闽清县| 新竹县| 元江| 凭祥市| 长岛县|