摘 要:為解決深海動力監測中數據管理及接口匹配問題,采用嵌入式Linux平臺,對深海儀器進行必要的管理和維護,接收儀器的實時數據,經驗證數據后通過系統網絡接口將數據按協議發送到岸上基站。這里主要介紹系統硬件的搭建及軟件的設計。經實驗驗證,該系統可以穩定地為岸上基站提供深海動力環境的實時數據。此外提出系統還待完善的幾個問題。
關鍵詞:ARM;嵌入式Linux平臺;深海監測;多線程
中圖分類號:TP368.1文獻標識碼:A
文章編號:1004-373X(2010)02-041-03
Implementation of Data Management Module in Ocean Dynamic Environmental Monitoring System
SONG Zhongqiang,LI Xin
(College of Information Science and Engineering,Ocean University of China,Qingdao,266100,China)
Abstract:To resolve the deep_sea monitoring data management and interface matching problem,this system uses the embedded Linux platform,carries on the essential management and the maintenance to instruments,and receives instruments′ real_time data.After confirming the data through the network is transmitted to the ashore base station according to the protocol.The structures of the system hardware and software design are introduced.The system can provide real_time data for base station from the large number of experiments.System needs to consummate issues are raised.
Keywords:ARM;embedded Linux;deep_sea monitoring;multi_thread
深海動力環境監測技術是一種能對海底表面或近海底進行定點、連續、多要素同步測量的水下監測技術,因為具有長期、原位、實時的觀測能力,使其在深海探測中起到越來越重要的作用[1]。由于深海動力監測需要多種數據的測量,海洋儀器的數據格式通常又不盡相同,這就加大了岸上基站接收數據和處理數據的難度。而數據管理系統在深海動力環境監測中負責實時與海洋儀器通信,將從海洋儀器得到的數據進行融合,再通過統一的數據接口發送到岸上基站,以提高岸上基站的工作效率。
1 整體組成
監測系統的整體組成如圖1所示。由岸上基站、海底網絡、海底接駁盒、各個監測系統組成[2]。動力監測系統包括數據管理系統和三臺儀器。數據管理系統采用低功耗ARM嵌入式系統。儀器1選用RDI公司駿馬系列哨兵型自容式ADCP,具有測量精度高,測量量程大,低功耗等特性[3];儀器2選用 Nortek公司的三維點式流速儀,最高采樣率高達64 Hz,其特有的硬件平臺令數據噪音更低,波動更小,適用于實時監測和自容式應用;儀器3選用SeaBird公司的SBE 19plusV2型CTD,隨著海洋世紀的到來,CTD 測量技術越來越受到世界各國的普遍重視[4],除了測量溫度、鹽度、深度以外,CTD還外掛了兩個傳感器,用來測量濁度和溶解氧。
圖1 整體組成圖
2 數據管理系統組成
2.1 硬件搭建
由于系統與儀器的通信使用串口RS 232協議;系統與岸上基站通信使用TCP/IP協議,同時系統還要對儀器進行必要的管理、維護,所以基于上述要求,系統的CPU采用三星公司的S3C2440。S3C2440是基于ARM920T內核的16/32位RISC 嵌入式微處理器[5],內部集成了3通道UART,8路10位ADC,SD卡接口、網絡接口等。系統的內存為64 MB;2 MB的NORFLASH用來存放引導程序U_Boot;64 MB的NANDFLASH用來存放操作系統、根文件系統、應用程序等;10/100 Mb/s的自適應DM9000網絡芯片;1 GB的SD卡用來存儲暫時性數據以及一些必要的系統文件。一個電流互感器,用來將36~60 V的系統電壓線性轉換為1~3 V,以便CPU的A/D電路可以識別。
2.2 軟件設計
由于系統工作在深海海底,一旦投放系統則維護費用高,維護周期長,從而對應用程序提出了較高的要求,如:程序必須靈活;程序穩定,出現錯誤可以在一定程度上自恢復;可以提供岸上基站與儀器之間透明的連接,使岸上基站可以全面、靈活地控制儀器;具備一定的應急能力。
2.2.1 整體設計
平臺的操作系統為Linux 2.4.20。Linux作為開源軟件,具有開發周期相對較短,內核精簡,功能強大,運行穩定,系統健壯,效率高等特點,已成為嵌入式開發的主流操作系統[6]。應用程序運行在Linux操作系統之上,使得應用程序的穩定性大大提高[7]。應用程序使用嵌入式C編寫。應用程序采用多線程來實現實時、靈活、可控、自恢復等特點。共有4個線程。主線程負責與岸上基站的通信,解釋岸上基站的命令,并翻譯成儀器可識別的命令,同時還負責監視供電電壓。串口接收線程負責三路串口對應三臺儀器,實時地接收儀器的數據。網絡發送線程根據預定的通信協議,實時地將數據發到岸上基站。保護線程負責監視程序的運行情況,捕捉必要的錯誤,當發現致命錯誤時,關閉程序,重新建立程序運行環境。
2.2.2 應急操作
當供電電壓低于正常電壓時,系統會切斷供電電壓,同時儀器切換到自供電模式,使用自身的電池供電。考慮到電池容量的局限性,系統自動切換儀器的工作模式,降低儀器的采樣頻率。完成上述操作后,系統便關閉沒有必要的外設,以節省電能。同樣,當恢復供電時,系統會恢復原來的工作模式。部分流程如圖2所示。
2.2.3 程序的可控性
為了方便操作,每個儀器制定了三種快捷操作模式,并把每種模式要發給儀器的命令做成配置文件存在SD卡中。當程序收到岸上基站的采集命令時,會在SD卡上搜索相應的配置文件,然后根據配置文件向儀器發送命令,同時為岸上基站提供配置文件,更新命令,還可以根據需要更新配置文件。
圖2 電壓檢測流程圖
2.2.4 程序的自恢復
為使程序在出現異常后能自動繼續上次的操作,在SD卡中建立了一個目錄,用于專門存貯工作步驟的文件。當程序啟動時會首先搜索這種文件,由于程序正常退出時會刪除此類文件,所以如果找到這種文件說明程序非正常結束,讀入文件繼續上次的工作。程序通過兩個方面來保證程序的穩定性。
(1) 當操作系統啟動后,會首先執行初始化腳本程序,這個初始化腳本是可以編輯的,它可以滿足不同的用戶[2]。系統添加的腳本如下:
mount /dev/mmc/disc0/part1 /mnt/sdcard/
ifconfig eth0 up
ifconfig eth0 192.168.1.44
./myprogram
reboot
操作系統在完成必要的操作后,首先掛載SD卡,然后啟動網絡。并且設置IP地址,為應用程序創建好網絡和存儲環境,緊接著運行應用程序。正常情況下,命令reboot是得不到執行的,因為應用程序是不會結束的,但是當操作系統捕獲到異常時[8],如某個數被零除時,操作系統會自動終止應用程序的運行,即發生了錯誤,系統記錄錯誤發生的時間及類型,然后執行reboot,重新運行程序。
(2) 保護線程會時刻監視幾個關鍵參數,當參數超出正常范圍后,保護線程主動重啟系統,重新建立執行環境。在正常情況下,主線程會每隔一段時間向保護線程發送一個信號,表示主線程運行良好,當長時間收不到這個信號時,保護線程會認為程序已經進入未知狀態,馬上重啟系統,重新運行程序。
2.2.5 提供岸上基站與單個儀器透明的連接
某些儀器需要現場操作或者需要微調時,程序可以為岸上基站提供一個與特定儀器的連接,使岸上基站可以靈活控制儀器。如ADCP需要一個鹽度值來計算此鹽度下海水中的聲速,由于測試點不同,有可能鹽度也不相同,所以可以使用程序提供的連接對儀器進行微調。
2.2.6 與岸上基站的通信協議
為保證數據的實時性,程序實時地打包收到的數據,然后將其發送到岸上的基站。考慮到通信量不大,并保證通信質量,高層之間的協議采用肯定確認的重傳模式[9],即系統收到儀器的數據發一個包之后就等待岸上基站的應答,如果在約定好的時間內沒有應答就認為通信超時,等到下一次通信,首先發送上次未發送成功的數據,其幀格式如圖3所示。
圖3 幀格式
其中,子網ID和節點ID由岸上基站統一分配;儀器ID表明此幀數據來自哪臺儀器;記錄數是說明此幀共有多少條記錄;幀計數由三個字節組成,表明此幀序號。岸上基站規定每天的幀序號按順序遞增,并且每天的第一幀的序號為1;N字節數據是特定儀器采集的數據;校驗和為前面N+8個字節的累加和,并對256取模。
3 結 語
該系統在試驗室進行了大量的實驗。實驗表明,該程序可以穩定地為岸上基站提供實時數據,程序結構靈活,修改方便。通過總結設計和實驗,根據深海工作的特定要求,系統還可以從以下幾點進行改進:
(1) 系統自恢復能力有限,程序只能捕捉幾種特定的錯誤;
(2) 增加電源管理模塊,以減低系統功耗。
參考文獻
[1]曹志敏.現代海底熱液活動異常條件探測關鍵技術研究[J].高技術通訊,2006,16(5):545_550.
[2]宋坤.海洋動力環境實時立體監控平臺設計[J].海洋技術,2006,25(3):36_40.
[3]馮建軍.ADCP 原理及數據處理方法[J].港工技術,2007,44(3):53_55.
[4]田雨.船體固定式CTD及數據采集技術研究[J].海洋技術,2006,25(3):27_30.
[5]博創科技.嵌入式系統實驗指導書[M].北京:博創科技出版社,2006.
[6]鮑慶.Linux 2.4內核下塊設備驅動程序的接口分析[J].信息工程大學學報,2003(2):29_32.
[7]師娟娟.基于ARM9的嵌入式Linux移植[J].武漢理工大學學報,2008,30(2):205_208.
[8]\\魯比足.Linux設備驅動程序[M].3版.魏永明,譯.北京:中國電力出版社,2006.
[9]龐志勇.紅外無線MODEM的研制[J].計算機工程,2003,29(16):52_53.
[10]陳莉君.Linux操作系統原理與應用[M].北京:清華大學出版社,2006.