中國船舶重工集團公司第七一○研究所 朱玲羚
?
基于嵌入式系統(tǒng)的心跳檢測技術(shù)研究
中國船舶重工集團公司第七一○研究所 朱玲羚
【摘要】介紹了一種基于嵌入式的心跳檢測系統(tǒng),主要由兩部分組成,基于ARM的Linux操作環(huán)境和Windows開發(fā)環(huán)境。該系統(tǒng)遵循TCP/UDP協(xié)議,通過在Linux和Windows環(huán)境下分別搭建服務(wù)器和客戶端,實現(xiàn)對系統(tǒng)的資源管理。該系統(tǒng)具有高可用性及較強的推廣應(yīng)用價值。
【關(guān)鍵詞】心跳檢測;嵌入式;網(wǎng)絡(luò)通信
隨著電子信息工程及網(wǎng)絡(luò)技術(shù)的發(fā)展,遠程控制與檢測技術(shù)也隨之被運用于不同領(lǐng)域。在無法確保網(wǎng)絡(luò)的可靠性前提下,需要通過軟件的方法進行網(wǎng)絡(luò)通信狀態(tài)的檢測和判斷,心跳包機制就是在這種背景下產(chǎn)生的。心跳包機制實際就是一個自定義協(xié)議的、特定的、循環(huán)發(fā)送的數(shù)據(jù)包,主要用于判斷網(wǎng)絡(luò)節(jié)點是否還在鏈接[1]。目前這種方法已經(jīng)廣泛應(yīng)用于網(wǎng)絡(luò)通信服務(wù)、網(wǎng)絡(luò)平臺的故障檢測等相關(guān)領(lǐng)域。
在工程應(yīng)用中,心跳檢測系統(tǒng)能對集群系統(tǒng)進行管理和檢測,通過高可用性設(shè)計減少系統(tǒng)的出錯概率,并在系統(tǒng)出現(xiàn)故障時及時響應(yīng),結(jié)合具體情況設(shè)計應(yīng)急處理方案實現(xiàn)系統(tǒng)恢復(fù)或替代。以保障關(guān)鍵數(shù)據(jù)和業(yè)務(wù)系統(tǒng)的運行穩(wěn)定性和可持續(xù)訪問性。
心跳檢測機制是檢測系統(tǒng)中各個節(jié)點是否正常運行的有效機制,通過心跳機制可以檢測在任一時間內(nèi)是否有節(jié)點發(fā)生故障,并確定哪些節(jié)點發(fā)生故障。當前比較流行的心跳網(wǎng)絡(luò)有兩種方式,第一種為串行心跳線方式,它采用串行心跳線,直接進行心跳包的點對點傳輸。另一種心跳網(wǎng)絡(luò)為以太網(wǎng)方式,此種方式的心跳包在以太網(wǎng)的基礎(chǔ)上進行傳輸[2]。本設(shè)計心跳包的傳輸量并不是很大,且以太網(wǎng)方式價格比較低廉,易于在實際環(huán)境中進行推廣,故采用以太網(wǎng)方式來實現(xiàn)。
具體實現(xiàn)方法為:系統(tǒng)通過心跳網(wǎng)絡(luò)進行周期性的信息發(fā)送,即節(jié)點周期性服務(wù)器發(fā)送心跳包,表明當前系統(tǒng)狀態(tài),心跳包中可包括節(jié)點名稱、節(jié)點IP、附加信息及節(jié)點傳感器采集到的數(shù)據(jù),例如溫度、濕度等。若服務(wù)器沒有在規(guī)定的時間段內(nèi)收到某個節(jié)點的心跳包,則可判斷此節(jié)點出現(xiàn)系統(tǒng)故障??蛻舳丝稍诓煌攸c訪問系統(tǒng)信息。
本文利用ARM的豐富資源搭建Linux系統(tǒng)。在心跳檢測實現(xiàn)過程中,主要使用基于TCP/IP協(xié)議棧Socket編程,多進程與進程間通信,多線程與線程間通信等技術(shù)。
2.1 系統(tǒng)框圖與機制
本系統(tǒng)是基于TCP網(wǎng)絡(luò)通信模式,在這種模式下,一般有兩種架構(gòu)可供選擇:C/S和B/S架構(gòu)。由于本文選用C/S架構(gòu)的Socket服務(wù)器端,設(shè)計了單服務(wù)器-多客戶端模型。如圖1所示。
在本系統(tǒng)框圖中,服務(wù)器的主要功能如下:
1)檢測連接本服務(wù)器的節(jié)點,接收獲得的數(shù)據(jù)報文,包括該節(jié)點的類型,是Linux操作系統(tǒng)還是Windows操作系統(tǒng)或其他。
2)分析節(jié)點發(fā)來的數(shù)據(jù),包括對該報文的類型識別,解密處理和校驗處理,并顯示該節(jié)點的配置信息及附加數(shù)據(jù)。
圖1 系統(tǒng)框圖
客戶端的主要功能如下:
1)登陸訪問服務(wù)器,可在不同地點的嵌入式設(shè)備上登陸訪問,檢測服務(wù)器工作狀態(tài)。
2)獲取服務(wù)器上的節(jié)點數(shù)據(jù),了解節(jié)點設(shè)備的運行情況。
節(jié)點的主要功能如下:
1)獲取本節(jié)點的配置數(shù)據(jù)和附加數(shù)據(jù),包括本節(jié)點的主機名和IP地址、心跳包數(shù)據(jù)、傳感器數(shù)據(jù)等。
2)通過Socket向服務(wù)器IP發(fā)送本節(jié)點的數(shù)據(jù)包信息,證節(jié)點的數(shù)據(jù)傳輸安全可靠,與服務(wù)器采用相同的加解密算法和校驗算法。
2.2 服務(wù)器設(shè)計
由以上設(shè)計模式,本服務(wù)器是基于Win32環(huán)境下的MFC進行開發(fā),使用Windows提供的Socket結(jié)構(gòu)建立網(wǎng)絡(luò)通信。Socket套接字來源于Unix系統(tǒng),可以認為是一種特殊的I/O接口,還可以當作一種文件描述符,常用于進程間通信。通過Socket套接字不僅能實現(xiàn)本地計算機上進程之間的通信,使用網(wǎng)絡(luò)之后,還能夠和遠端不同計算機上的進程進行通信。
1)設(shè)計流程
首先,服務(wù)器使用Socket前需要設(shè)置Socket的配置參數(shù),這些配置參數(shù)主要包括Socket的版本和本地地址信息。成功配置好Socket參數(shù)后,服務(wù)器端即開始等待監(jiān)聽。
2)數(shù)據(jù)處理
服務(wù)器每次接收完一次數(shù)據(jù)后,需要對該數(shù)據(jù)進行分析。為了數(shù)據(jù)傳輸?shù)陌踩院屯暾?,本設(shè)計使用嵌套數(shù)據(jù)包的方法規(guī)定數(shù)據(jù)的結(jié)構(gòu)。如圖2、圖3所示。
圖2 數(shù)據(jù)包結(jié)構(gòu)
2.3 客戶端設(shè)計
設(shè)計客戶端的目的,在于能在不同的地點訪問當前整個系統(tǒng)的信息,如各連接節(jié)點的狀態(tài),節(jié)點的報文數(shù)據(jù),服務(wù)器的運行狀態(tài)等等,這些都能通過登錄客戶端來實現(xiàn)??蛻舳艘部梢栽诙喾N嵌入式系統(tǒng)上登陸,且可以實現(xiàn)多個IP地址同時登陸。
圖3 客戶端顯示窗口
在圖3中,登錄客戶端后,可以顯示當前連接節(jié)點的數(shù)目和狀態(tài),還包括該節(jié)點所附帶的信息。狀態(tài)包括該節(jié)點所屬IP和連接狀態(tài),點開該圖標后,表示該節(jié)點不僅有心跳報文,而且還攜帶一些附加信息。
圖4 節(jié)點信息
在節(jié)點信息中,可以包含該節(jié)點的傳感器數(shù)據(jù),如溫度、濕度等等。
2.4 節(jié)點設(shè)計
由于本設(shè)計基于嵌入式系統(tǒng),節(jié)點可以是Windows操作系統(tǒng)、Linux操作系統(tǒng)或者其他環(huán)境。雖然節(jié)點類型多樣化,但是服務(wù)器與節(jié)點之間所規(guī)定的數(shù)據(jù)個數(shù)與協(xié)議相同,只有按照完全相同的通信協(xié)議和數(shù)據(jù)格式,節(jié)點才可以成功連接至服務(wù)器,服務(wù)器才可能成功獲取節(jié)點的數(shù)據(jù)報文。
對于Windows操作系統(tǒng)節(jié)點端,與服務(wù)器一樣,通過使用Socket套接字來操作網(wǎng)口,在發(fā)送數(shù)據(jù)時按照服務(wù)器所規(guī)定的數(shù)據(jù)格式發(fā)送即可;對于Linux操作系統(tǒng)節(jié)點端,只是所操作的Socket庫有所不同,通信協(xié)議不變,只需按照服務(wù)器所規(guī)定的數(shù)據(jù)格式發(fā)送就能將本節(jié)點的數(shù)據(jù)發(fā)送至服務(wù)器;對于未來可能開發(fā)的安卓節(jié)點,iOS節(jié)點,都是基于此思想來設(shè)計的。在此,就不將各節(jié)點分別展開,只介紹其核心思想和數(shù)據(jù)包的組成結(jié)構(gòu)。
1)設(shè)計流程
首先,服務(wù)器需要使用Socket前需要設(shè)置Socket的配置參數(shù),這些配置參數(shù)主要包括Socket的版本和服務(wù)器地址信息。配置好Socket參數(shù)后,需要配置本地地址信息,地址信息包括地址家族,端口號和IP地址,這里配置的IP地址是服務(wù)器的IP地址,在發(fā)送數(shù)據(jù)前,要先與服務(wù)器連接成功,然后再發(fā)送數(shù)據(jù)。
2)數(shù)據(jù)組成
在節(jié)點中,為區(qū)別不同的節(jié)點,在節(jié)點向服務(wù)器發(fā)送數(shù)據(jù)時需要將此節(jié)點類型發(fā)送至服務(wù)器,即在數(shù)據(jù)中至少有一位定義節(jié)點類型。本設(shè)計中,該位是在節(jié)點配置信息的標識符后面的段數(shù)據(jù),在組成數(shù)據(jù)最開始時,首先要進行該段數(shù)據(jù)的類型定義,確定是加密數(shù)據(jù)段還是透明數(shù)據(jù)段。如果是透明數(shù)據(jù),則直接將數(shù)據(jù)段與包頭一起發(fā)送;如果是加密數(shù)據(jù),則需要將加密包頭與加密后的數(shù)據(jù)一起發(fā)送。
為了讓服務(wù)器知道該節(jié)點的類型和基本信息,節(jié)點的配置數(shù)據(jù)包括該節(jié)點的類型,Windows操作系統(tǒng)或Linux操作系統(tǒng)、節(jié)點主機名、節(jié)點IP地址、成功連接時間,附加數(shù)據(jù)包括該節(jié)點采集的傳感器數(shù)據(jù)等。
3.1 調(diào)試
為保證在Windows操作系統(tǒng)和Linux操作系統(tǒng)下運行的節(jié)點,在數(shù)據(jù)收發(fā)過程不會出現(xiàn)亂碼,兩端都默認不使用Unicode字符集。故在VS2010的server端中,設(shè)置如下圖5配置。
圖5 字符集設(shè)置
在處理透明和加密報文時,為判斷該報文包頭是否已正確識別,在MFC中,可以直接利用AfxMessageBox(加密報文)來打印出所要測試的點。如圖6所示。
3.2 測試
在服務(wù)器和節(jié)點都能正常工作后,接下來測試系統(tǒng)的穩(wěn)定性。首先運行服務(wù)器,啟動該服務(wù)器,開始監(jiān)聽該服務(wù)器的網(wǎng)絡(luò)端口。
登陸客戶端,可成功獲取多個節(jié)點的信息,包括節(jié)點個數(shù)、節(jié)點IP地址、連接狀態(tài)以及傳感器數(shù)據(jù)等。
圖6 調(diào)試點打印
本文在以ARM為核心處理器的實驗平臺上,搭建功能完善、資源豐富的嵌入式Linux操作系統(tǒng),在Linux環(huán)境下,編寫源程序和makefile,搭建客戶端。在Windows操作系統(tǒng)下,使用MFC編寫服務(wù)器與客戶端應(yīng)用程序,為保證通信高效率和安全性,使用了Socket網(wǎng)絡(luò)編程技術(shù),AES數(shù)據(jù)加密算法。滿足客戶端可在嵌入式設(shè)備上運行的條件,實現(xiàn)了通過網(wǎng)絡(luò)發(fā)送加密的心跳報文信息并在服務(wù)器上對進程的運行狀態(tài)進行遠程監(jiān)控。該心跳檢測機制增加了集群系統(tǒng)的智能化程度,可擴展到工業(yè)控制、環(huán)境檢測、軍事應(yīng)用等領(lǐng)域。
參考文獻
[1]胡志坤,何多昌,桂衛(wèi)華等.基于改進心跳包機制的整流遠程監(jiān)控系統(tǒng)[J].計算機應(yīng)用,2008,28(2)﹕363-366.
[2]王海龍.基于實時以太網(wǎng)的心跳協(xié)議[D].大連﹕大連理工大學(xué),2009.