劉敬彪,翁 杰,于海濱
(杭州電子科技大學電子信息學院, 杭州310018)
隨著衛(wèi)星通訊、衛(wèi)星遙感、水聲遙測以及數(shù)據(jù)同化等技術(shù)的不斷發(fā)展與成熟,海洋環(huán)境監(jiān)測已進入從空間、沿岸、水面及水下對海洋環(huán)境進行立體監(jiān)測的時代。海洋浮標是一種現(xiàn)代化的海洋觀測設(shè)施。它具有全天候、全天時穩(wěn)定可靠地收集海洋環(huán)境資料的能力,并能實現(xiàn)數(shù)據(jù)的自動采集、自動標示和自動發(fā)送。海洋浮標與衛(wèi)星、飛機、調(diào)查船、潛水器及聲波探測設(shè)備一起,組成了現(xiàn)代海洋環(huán)境主體監(jiān)測系統(tǒng),為探測海洋的奧秘,立下了不朽功勛。
海洋浮標,一般分為水上和水下兩部分,水上部分裝有多種氣象要素傳感器,分別測量風速、風向、氣溫、氣壓和溫度等氣象要素;水下部分有多種水文要素傳感器以及海洋環(huán)境化學參數(shù)測量傳感器,分別測量波浪、海流、潮位、海溫、鹽度、pH值、葉綠素、營養(yǎng)鹽、濁度等。
各種傳感器將采集到的信號,通過儀器自動處理,由發(fā)射機定時發(fā)出。地面接收站將收到的信號經(jīng)過處理后,就得到了人們所需要的資料。通過對這些資料的掌握,會給人們的生產(chǎn)和生活帶來極大的便利。如知道了海流流向,航海時便盡可能順流而行;知道了風暴區(qū)域,航海時則可避開繞行;知道了潮位的異常升高,便可及時防備突發(fā)事件。
海洋資料浮標的實時數(shù)據(jù)傳輸系統(tǒng)是浮標的重要組成部分。從我國開始研制海洋資料浮標以來,實時數(shù)據(jù)傳輸系統(tǒng)先后采用過多種數(shù)據(jù)通訊方式[1],包括短波通訊、INMARSAT-C衛(wèi)星通訊以及GPRS/CDMA通訊等。各種通訊方式各有優(yōu)點和局限性,短波通訊抗干擾能力差,誤碼率高,數(shù)據(jù)接收率低;INMARSAT-C衛(wèi)星通訊可靠性高,數(shù)據(jù)接收率達95%以上,但通訊費用較高,不適合大數(shù)據(jù)量傳輸;GPRS/CDMA通訊費用較低,但通訊信號受到浮標到岸邊距離的限制。我們根據(jù)浮標系統(tǒng)數(shù)據(jù)傳輸?shù)募夹g(shù)要求,采用銥星數(shù)據(jù)通訊傳輸大數(shù)據(jù)量的實時資料。
本文第1節(jié)介紹系統(tǒng)組成。第2節(jié)給出電子系統(tǒng)整體設(shè)計。第3節(jié)給出通信系統(tǒng)設(shè)計。第4節(jié)給出控制系統(tǒng)軟件設(shè)計。第5節(jié)得出結(jié)論。
本文設(shè)計的浮標電子與通信系統(tǒng)是海洋定點垂直剖面監(jiān)控系統(tǒng)的子系統(tǒng)。整個監(jiān)控系統(tǒng)還包括水下數(shù)據(jù)采集子系統(tǒng)。浮標電子與通信系統(tǒng)的核心部分是基于ARM的嵌入式處理器和Linux操作系統(tǒng)的水下數(shù)據(jù)處理和控制系統(tǒng)。浮標系統(tǒng)根據(jù)已定的協(xié)議,接收到電磁耦合模塊傳過來的數(shù)據(jù),并保存在大容量存儲器中。考慮到如果用有線通信方式,則由于通信距離不斷變化會導(dǎo)致傳輸線路設(shè)計困難、通信的可靠性都難以保障。而電磁耦合通信正是利用電磁感應(yīng)原理來傳輸數(shù)據(jù)的,它的設(shè)計電路簡單可靠,體積小,成本低,可以實現(xiàn)在水下的近距離無線傳輸。圖1是整個監(jiān)測控制系統(tǒng)工作流程圖,電磁耦合模塊包括接收和發(fā)送兩部分。
圖1 監(jiān)測控制系統(tǒng)工作流程圖
波浪能通過錨纜傳遞轉(zhuǎn)化為垂直剖面測量系統(tǒng)水下主體部分(小浮力浮球)下行的動能。系統(tǒng)將充分利用大、小浮球的浮力慣性實現(xiàn)抽纜(相當于水下主體部分的下行)功能,當需上行時,只需打開鎖閥。在依靠小浮球浮力上行過程中采集各環(huán)境參數(shù)變量。
整個一次數(shù)據(jù)采集、存儲,送到水上通訊平臺,最后海洋環(huán)境數(shù)據(jù)送到監(jiān)測平臺周期為24 h,也就是每隔24 h采集各剖面環(huán)境量。垂直剖面觀測深度為300 m。整個系統(tǒng)維護周期約為三個月一次。
在整個測量系統(tǒng)中,控制系統(tǒng)是核心單元。水下監(jiān)測數(shù)據(jù)采集平臺的控制塊在儀器倉內(nèi)。它負責指揮和協(xié)調(diào)系統(tǒng)各部分工作狀態(tài)。包括控制海洋各剖面數(shù)據(jù)的采集、存儲、數(shù)據(jù)處理、傳輸?shù)?。本文描述的水上通訊平臺的控制部分主要接收電磁耦合模塊傳過來的各個采集量,以及獲取浮標電壓值和浮標姿態(tài)等信息,然后通過銥星衛(wèi)星[2]發(fā)送給監(jiān)控中心。
浮標電子與通信系統(tǒng)采用太陽能電池和蓄電池組合供電。平臺的主體是浮標部分。為提高可靠性,有的浮標采用兩個獨立的供電系統(tǒng),每個系統(tǒng)都有蓄電池和太陽能電池板,都能為整個浮標供電。這種備份盡管不是必需的,但它提高了浮標的可靠性等級。浮標控制系統(tǒng)的CPU采用AT91SAM9260,一路串口按序接收電磁耦合發(fā)送模塊傳過來的各個傳感器的采集數(shù)據(jù),并保存在SD大容量存儲卡中(如圖2)。存于卡中的各路傳感器采集的數(shù)據(jù)通過銥星衛(wèi)星發(fā)送, ARM9的COM2口接銥星SBD 9601模塊,用來與監(jiān)控中心進行通信。
圖2 浮體平臺結(jié)構(gòu)圖
同時,浮標上裝有錨燈,內(nèi)有傳感器檢測光線,自動點亮,給監(jiān)測帶來方便。同時CPU通過I/O獲取錨燈狀態(tài)信息。
AT91SAM9260通過自帶的A/D讀取電池的電壓值和傾角傳感器獲得的浮標姿態(tài)信息。
浮標上裝有GPS天線,用于定位。
通信系統(tǒng)是為了滿足監(jiān)測數(shù)據(jù)能及時有效地傳送給監(jiān)控中心進行觀測。根據(jù)浮標系統(tǒng)數(shù)據(jù)傳輸?shù)募夹g(shù)要求,本系統(tǒng)采用銥星數(shù)據(jù)通訊傳輸大數(shù)據(jù)量的實時資料。
浮標通信系統(tǒng)的結(jié)構(gòu)圖如圖3所示。
圖3 浮標通信系統(tǒng)組成
具體的衛(wèi)星通信模塊是由是由銥星公司推出9601SBD[3-4],體 積 小, 長 度、寬 度 和 厚 度 分 別 為106 mm, 56.2 mm和13 mm,重量117 g。9601不需要SIM卡,每次最多可以發(fā)送340字節(jié)信息,可以接收270 字節(jié)信息,當有信息收到時能夠發(fā)出振鈴。工作溫度-35°~70°,工作電壓5 V。該模塊通過RS232接口實現(xiàn)SBD(突發(fā)短數(shù)據(jù))業(yè)務(wù),默認的波特率是19 200 bit/s,可以通過AT+IPR指令設(shè)置??梢赃x擇的波特率bit/s范圍包括:1 200、2 400、4 800、9 600、19 200、38 400等??蛇x數(shù)據(jù)長度7位或8位,默認為8位。其他包括一個停止位和無奇偶校驗位。銥星SBD的待機平均電流為66 mA,信息發(fā)送中的平均電流<=350 mA,能夠滿足海洋浮標設(shè)備低功耗的要求。
該模塊通過點對點的方式實現(xiàn)數(shù)據(jù)收發(fā),即浮標平臺和監(jiān)控平臺各有一個9601SBD MODEN。通過發(fā)送“AT”指令來實現(xiàn)通信。海洋環(huán)境監(jiān)測數(shù)據(jù)通過安裝在浮標頂端的銥星天線發(fā)射出去。
控制系統(tǒng)采用了AT91SAM9260作為CPU,它支持主流的Linux、Windows XP等操作系統(tǒng)。目標板上移植了Linux操作系統(tǒng)來進行任務(wù)管理和調(diào)度,改變了傳統(tǒng)的在類似硬件平臺下采用MSDOS單用戶、單任務(wù)操作系統(tǒng)難以完成較為復(fù)雜的分布式多任務(wù)應(yīng)用的缺點。在數(shù)據(jù)采集系統(tǒng)中, Linux系統(tǒng)可以同時處理多個傳感器發(fā)送來的較為復(fù)雜的控制任務(wù),從而提高系統(tǒng)的整體響應(yīng)速度及并發(fā)處理能力。
構(gòu)成嵌入式Linux系統(tǒng)至少需要下面3個基本元素[5]:引導(dǎo)程序, Linux微內(nèi)核和初始化進程。如果要讓它有更多的功能,還可加上文件系統(tǒng)、GUI和設(shè)計精簡的應(yīng)用程序,并將其放在diskonchip中啟動。
在Linux操作系統(tǒng)下,有三類主要的設(shè)備文件類型:字符設(shè)備、塊設(shè)備和網(wǎng)絡(luò)設(shè)備。字符設(shè)備和塊設(shè)備的主要區(qū)別是在對字符設(shè)備發(fā)出讀/寫請求時,實際的硬件I/O一般緊接著發(fā)生;塊設(shè)備則不然,它利用一塊系統(tǒng)內(nèi)存做緩沖區(qū),當用戶進程對設(shè)備請求能滿足用戶的要求時,就返回請求的數(shù)據(jù);如果不能,就調(diào)用請求函數(shù)來進行實際的I/O操作。塊設(shè)備是主要針對磁盤等慢速設(shè)備設(shè)計的,以免耗費過多的CPU時間來等待。用戶進程通過設(shè)備文件來與實際的硬件打交道。每個設(shè)備文件都有其文件屬性(c/b),表示是字符設(shè)備還是塊設(shè)備。每個文件都有兩個設(shè)備號, 第一個是主設(shè)備號,標志驅(qū)動程序;第二個是從設(shè)備號,標志使用同一個設(shè)備驅(qū)動程序的不同的硬件設(shè)備。設(shè)備文件的主設(shè)備號必須與設(shè)備驅(qū)動程序在登記時申請的主設(shè)備號一致,否則用戶進程將無法訪問到驅(qū)動程序。
Linux操作系統(tǒng)將所有設(shè)備作為文件來處理[6],他們可以使用文件、I/O相關(guān)函數(shù)來處理,這樣就方便了對設(shè)備的處理。例如:串口文件位于/dev目 錄下, 串 口 1 為/dev/ttyS0, 串 口 2 為/dev/ttyS1。打開串口用標準的文件打開函數(shù)操作。如:int fd=open(Dev, O_RDWR);Dev是設(shè)備文件,返回-1則表示打開失敗,成功則返回大于0的值。
其中幾個主要函數(shù)如下:
set_speed(fd, 115200) //設(shè)置 串口 波特 率函數(shù), fd對應(yīng) 的串口文件
set_Parity(fd, 8, 1, 'N')” //設(shè)置 串口接 收數(shù) 據(jù)格 式, 8位 數(shù)據(jù)位, 1位停止位, 無校驗
OpenDev("/dev/ttyS1")//打開串口1
w rite(fd, buff, nread) //往串口buff寫nread字節(jié)數(shù) 據(jù)
nread=read(fd, buff, 512)//讀串 口緩 沖區(qū)512字 節(jié)數(shù) 據(jù), 返回讀取的實際個數(shù)
num=fwrite(buff, sizeof//往fp對應(yīng)的文件寫nread字節(jié)
(char), nread, fp)
send_AT(AT_CMD[ 0] , //銥星MODEN發(fā)送AT指令
iridium)
close(fd) //關(guān)閉文件(包括普通文件和設(shè)備文件)
對串口的操作[7]需要用到的頭文件有:
#include <stdio.h> //標準輸入輸出定義
#include <fcntl.h> //對文件控制的函數(shù)
#include <stdlib.h> //標準函數(shù)庫定義
#include <unistd.h> //Unix標準函數(shù)定義
#include <sys/types.h>//系統(tǒng)函數(shù)定義
#include <sys/stat.h> //系統(tǒng)調(diào)用的函數(shù)頭文件
#include <termios.h> //POSIX終端控制定義
#include <errno.h> //錯誤號定義
#include <pthread.h> //線程庫定義
浮標電子系統(tǒng)接收電磁耦合通信模塊(RS232)傳送過來的數(shù)據(jù),并將傳感器采集到的海洋環(huán)境數(shù)據(jù)保存到大容量的SD卡中。具體的流程圖如圖4。
圖4 浮標電子系統(tǒng)程序流程圖
接收完水下數(shù)據(jù)采集系統(tǒng)傳送的數(shù)據(jù)并保存后,打開與銥星9601SBD MODEN連接的串口。并打開保存于卡中的文件。發(fā)送AT指令,在得到應(yīng)答信號后發(fā)送數(shù)據(jù),每次最多只能發(fā)送340字節(jié)。浮標通信系統(tǒng)流程圖如圖5。
圖5 浮標通信系統(tǒng)流程圖
系統(tǒng)在實驗室PC機調(diào)試助手模擬數(shù)據(jù)發(fā)送,通過電磁耦合接收、發(fā)送模塊成功將數(shù)據(jù)送到水上浮標系統(tǒng)的ARM中并保存到大容量的SD卡中,實現(xiàn)了浮標系統(tǒng)與水下數(shù)據(jù)采集系統(tǒng)的數(shù)據(jù)傳送。隨后讀取文件中保存的數(shù)據(jù),打開9601SBD MODEN,發(fā)送給另一臺PC。PC機端的9601SBD MODEN接收數(shù)據(jù),并在上位機上[8]動態(tài)的顯示收到的數(shù)據(jù)。在水下進行測試過程中,控制電路工作正常,水上浮體平臺數(shù)據(jù)能正常接收、存儲,傾角傳感器、電池電壓值能通過A/D采集。且監(jiān)測數(shù)據(jù)通過銥星衛(wèi)星成功發(fā)送給監(jiān)控中心。
[ 1] 張曙偉,王秀芬,齊勇.銥星數(shù)據(jù)通信在海洋資料浮標上的應(yīng)用[J] .山東科學, 2006, 19(5):16-19.
[ 2] 劉解華,楊東靚,邢她棟,等.基于PC 104工控機/GPS/銥星通信的海洋監(jiān)測系統(tǒng)[ J] .計算機測量與控制, 2005, 13(11):1161-1163.
[ 3] 張治平, 張秉豪.衛(wèi)星通信技術(shù)在石油測井作業(yè)中的應(yīng)用[J].CNSSWorld of China, 2008, 3:42-45.
[ 4] 龔文剛.新型海洋資料浮標數(shù)據(jù)采集控制系統(tǒng)研究與概念設(shè)計[J] .海洋技術(shù), 1996, 15(4):79-89.
[ 5] 孫天澤,袁文菊,張海峰編著.嵌入式設(shè)計及Linux驅(qū)動開發(fā)指南-基于ARM9處理器[M].北京:電子工業(yè)出版社, 2006.
[ 6] 于磊,曾剛.POSIX多線程程序設(shè)計[ M] .北京:中國電力出版社, 2003.
[ 7] 羅苑棠,德.嵌入式Linux應(yīng)用系統(tǒng)開發(fā)實例精講[ M] .北京:電子工業(yè)出版社, 2007.
[ 8] 孫鑫,余安萍.VC++深入詳解[ M] .北京:電子工業(yè)出版社,2007.