鐘金波,李湘湘
(中國科學(xué)院深??茖W(xué)與工程研究所,海南 三亞 572000)
海洋科學(xué)調(diào)查工作近幾年有了突飛猛進(jìn)的發(fā)展,由于海洋環(huán)境的復(fù)雜性和多變性,對于后續(xù)樣品的分析,必須附帶有GPS、風(fēng)速風(fēng)向、溫鹽深(CTD)等數(shù)據(jù)作為支撐。對于科學(xué)家來說,人為記錄數(shù)據(jù)存在以下問題,一是不具備連續(xù)性;二是海洋科考工作強(qiáng)度較大,沒有精力去實(shí)現(xiàn)人為記錄;三是采集這些數(shù)據(jù)的傳感器分布在全船各處,對于在甲板或者在實(shí)驗(yàn)室采集數(shù)據(jù)的科學(xué)家來說不方便手動記錄?;诖?,迫切需要能在實(shí)驗(yàn)室或者甲板工作區(qū)有實(shí)現(xiàn)實(shí)時采集相關(guān)數(shù)據(jù)的接口,而且能實(shí)現(xiàn)數(shù)據(jù)的實(shí)時保存?,F(xiàn)在大多數(shù)的科考船都配置了信息采集系統(tǒng),在物理架構(gòu)上,可以實(shí)現(xiàn)數(shù)據(jù)的采集。從實(shí)船實(shí)驗(yàn)室的采集和使用設(shè)備來看,具有設(shè)備多樣性、接口的需求多樣性、數(shù)據(jù)格式的多樣性、文獻(xiàn)[1]和文獻(xiàn)[2]強(qiáng)調(diào)了數(shù)據(jù)的采集和存儲實(shí)現(xiàn)的可行性,側(cè)重整個數(shù)據(jù)包的采集和存儲,沒有有效手段對數(shù)據(jù)包進(jìn)行針對性的處理,以滿足不同設(shè)備對數(shù)據(jù)格式的不同需求。基于這種需求,“探索一號”船作為國內(nèi)科考船改造的成功典范,自然將該項工作提到了日程,在已有的硬件架構(gòu)上,通過軟件的開發(fā),基于Python編程語言的可擴(kuò)充性、免費(fèi)、開源、可移植性、可擴(kuò)展性、可嵌入性等優(yōu)點(diǎn),可以有針對性地滿足不同設(shè)備對不同數(shù)據(jù)的特殊性需求。
本系統(tǒng)硬件主要包括4個部分。
1)數(shù)據(jù)源設(shè)備層。主要包括分布在駕駛臺的導(dǎo)航設(shè)備和科學(xué)調(diào)查設(shè)備。這些設(shè)備能夠提供各種數(shù)據(jù)源,其中導(dǎo)航數(shù)據(jù)來自GPS、羅經(jīng)、計程儀、測深儀、風(fēng)速風(fēng)向儀等,科學(xué)調(diào)查設(shè)備數(shù)據(jù)包括CTD、多波束等,通過雙絞線以RS422 或者RS232的串口通訊的數(shù)據(jù)格式接入采集設(shè)備。
2)數(shù)據(jù)的采集單元。該設(shè)備布置在駕駛臺,由信號轉(zhuǎn)換單元和串口服務(wù)器2部分組成。信號轉(zhuǎn)換單元主要是將雙絞線的串口數(shù)據(jù)轉(zhuǎn)換成網(wǎng)線輸出的串口數(shù)據(jù),串口服務(wù)器選用的是MOXA 的NPort 563016,其功能是將以雙絞線接入該串口服務(wù)器的COM1、COM2……多個串口的數(shù)據(jù),通過該串口服務(wù)器轉(zhuǎn)換成對應(yīng)的網(wǎng)絡(luò)端口4001、4002……,該串口服務(wù)器可以同時將所需的16 種數(shù)據(jù)傳送給串口服務(wù)器,而且還可以選用32 口的串口服務(wù)器,對于后續(xù)的數(shù)據(jù)擴(kuò)展提供了比較方便的路徑。
3)數(shù)據(jù)的轉(zhuǎn)發(fā)單元。該設(shè)備布置在數(shù)據(jù)處理中心,由2 部分組成,包括串口服務(wù)器、客戶端。串口服務(wù)器選用的是MOXA Nport6650-32 服務(wù)器,其作用是端口的控制,該服務(wù)器選用的是32 端口的服務(wù)器,通過參考NPort_6600_Series_QIG_v6 資料,可以配置不同端口的數(shù)據(jù)傳輸形式,既可以選擇RealCom 的數(shù)據(jù)傳輸模式,也可以選擇TCP Server 的傳輸模式,基于該功能,可以在各實(shí)驗(yàn)室獲取所需要的數(shù)據(jù)格式??蛻舳说淖饔镁褪峭ㄟ^安裝的TJ-IDAS 軟件配置上述服務(wù)器的32 個不同端口的數(shù)據(jù)源,實(shí)現(xiàn)數(shù)據(jù)的采集、轉(zhuǎn)發(fā)。
4)數(shù)據(jù)接收單元。從串口服務(wù)器分別布置2條網(wǎng)線到各實(shí)驗(yàn)室和其他處所,通過分布在各實(shí)驗(yàn)室各區(qū)域的網(wǎng)絡(luò)接口,科學(xué)家可以隨時采集和存儲所需要的數(shù)據(jù)。
系統(tǒng)硬件框架圖如圖1所示。
圖1 系統(tǒng)硬件框架圖
1)通過串口實(shí)現(xiàn)數(shù)據(jù)轉(zhuǎn)發(fā)。由于科學(xué)考察需求的不同,經(jīng)常會有專業(yè)設(shè)備軟件(ADCP、人工地震作業(yè)、Global map 等)需要臨時接入GPS、羅經(jīng)、CTD 等的數(shù)據(jù),所以該系統(tǒng)經(jīng)過2 次重要的升級,第一次是在控制終端實(shí)現(xiàn)數(shù)據(jù)的采集和存儲,在控制終端通過TJ-IDAS程序配置不同的端口。
串口轉(zhuǎn)發(fā)程序配置界面圖如圖2 所示,圖2中,串口號即實(shí)驗(yàn)室實(shí)際的物理端口號,串口類型選擇發(fā)送,在串口數(shù)據(jù)源端口中,選擇所需要分發(fā)的數(shù)據(jù)源,例如GPS、CTD 等,然后在串口參數(shù)中配置波特率、數(shù)據(jù)位、停止位和校驗(yàn)位等相應(yīng)的參數(shù),在對應(yīng)的實(shí)驗(yàn)室接口就可以獲取實(shí)時的串口數(shù)據(jù)。該軟件方案提供了2種工作模式:采集模式和采集并存儲模式。在采集模式下可以實(shí)現(xiàn)數(shù)據(jù)的采集和停止,而且可以實(shí)時查看所有源端口的數(shù)據(jù)格式和報文。在作業(yè)工況下提供采集并存儲模式,可以實(shí)現(xiàn)所有數(shù)據(jù)邊采集邊存儲,也可以實(shí)現(xiàn)對某一所需通道數(shù)據(jù)的采集和存儲,可以更高效地利用數(shù)據(jù)和存儲空間。
圖2 串口轉(zhuǎn)發(fā)程序配置界面圖
該次升級的軟件版本問題在于數(shù)據(jù)種類的增加,串口采集服務(wù)器可以隨時增加不同的數(shù)據(jù)類型,由于從服務(wù)器去各個實(shí)驗(yàn)室采用串口傳輸,一個串口端口只能同時傳輸一種數(shù)據(jù),想要在某一區(qū)域同時接收多種數(shù)據(jù),就需要同時布置多條串口傳輸網(wǎng)線,在實(shí)現(xiàn)上存在很大的困難,是軟件需要再次升級的主要原因。
2)Python 程序的實(shí)現(xiàn)。串口通信在一條物理鏈路上只能同時傳輸一種數(shù)據(jù)形式。由于對多種類型多路數(shù)據(jù)的需求增加,迫切需要能在一條物理鏈路上同時傳輸多種數(shù)據(jù)形式,而通過網(wǎng)絡(luò)通信就可以實(shí)現(xiàn)該功能?;谠撃繕?biāo)需要第二次軟件升級,通過使用Python語言開發(fā)了小程序來實(shí)現(xiàn)同時獲取多種數(shù)據(jù)形式。MOXA Nport6650-32服務(wù)器可以配置其輸出端口的通訊形式,在物理鏈路上實(shí)現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)的通信,只需要在MOXA Nport6650-32服務(wù)器的配置界面上將實(shí)驗(yàn)室的某一端口對應(yīng)的輸出端口配置成TCP Server 模式,就可以在實(shí)驗(yàn)室訪問該串口服務(wù)器。
(1)導(dǎo)入庫。用import語句,導(dǎo)入所需要使用的第三方庫文件,包括網(wǎng)口數(shù)據(jù)的采集socket庫[3-4]、文件讀寫與保存的CSV 庫、datetime 和time庫。socket 是計算機(jī)之間進(jìn)行通信的一種約定或一種方式。通過socket約定,一臺計算機(jī)可以接收其他計算機(jī)的數(shù)據(jù),也可以向其他計算機(jī)發(fā)送數(shù)據(jù)。datetime 庫是Python常用的一個庫,主要用于時間解析和計算。csv 在Python 語言中主要用于文件的讀取與存儲。
①import socket
②import datetime
③import csv
④import time
(2)文件的獲取。通過mysock.connect()命令,可以指定需要訪問的網(wǎng)絡(luò)IP 和端口號,用mysock.recv()命令可以獲取端口的數(shù)據(jù)內(nèi)容,并將該端口獲取的內(nèi)容賦值到a,由于端口獲取的數(shù)據(jù)內(nèi)容雜亂,可以利用′ ′將所有的數(shù)據(jù)按換行符來切割成不同的行賦值給a。
⑤mysock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
⑥mysock.connect((′192.168.1.254′,4001))
⑦out_message=[]
⑧out_gga=[]
⑨while True:
⑩a=mysock.recv(512)
?if len(a)<1:
?break
?a=a.decode("utf-8")
?a=a.split() #把a(bǔ)的數(shù)據(jù)按′ ′切割
(3)數(shù)據(jù)的選擇與截取。為了獲取所需要的數(shù)據(jù)內(nèi)容,可以通過判斷語句“if ′GGA/HDT′in text_split”,并將指定的數(shù)據(jù)增加到out_gga,然后每讀取一條內(nèi)容,就在后面增加讀取該內(nèi)容的時間。
?for text_split in a:
?if "GGA" in text_split: # 切割出來一條,判斷一條
?out_gga.append(text_split)
?now_time= datetime.datetime.now().strftime(′%Y-%m-%d%H:%M:%S′)
?out_gga.append(now_time)
(4)數(shù)據(jù)的保存。用withopen()命令,來建立csv 文件,再通過csv.writer ()命令將獲取的內(nèi)容保存在新建立的csv文件里。
?with open(′gps_out.csv′,′a′,newline=′′)as f:
?writer=csv.writer(f)
?writer.writerow(out_gga)
?f.close()
?print(out_gga)
?out_gga=[]
?out_message=[]
?time.sleep(2)
通過該P(yáng)ython 程序,能夠獲取指定的數(shù)據(jù)內(nèi)容,對于不同的網(wǎng)絡(luò)端口,只需要更改⑥中的IP地址和網(wǎng)絡(luò)端口號,就可以獲取其他數(shù)據(jù)內(nèi)容,比如4002 對應(yīng)的羅經(jīng)數(shù)據(jù),4003 對應(yīng)的計程儀數(shù)據(jù)等。同樣,如果需要截取端口內(nèi)的部分內(nèi)容,也可以通過?的判斷語句來截取。
3)程序的封裝。 通過PyCharm 軟件自帶的PyInstaller 庫的功能[5],將該程序封裝成exe 執(zhí)行程序,可以安裝到不同的電腦上,很方便地實(shí)現(xiàn)不同實(shí)驗(yàn)室不同數(shù)據(jù)的實(shí)時采集和存儲功能。
為了驗(yàn)證該系統(tǒng)的穩(wěn)定性,“探索一號”科考船的TS21 航次中,在地球物理實(shí)驗(yàn)室實(shí)時采集和存儲GPS 數(shù)據(jù),得到比較理想的結(jié)果。在該測試中,選用GPS數(shù)據(jù)作為測試目標(biāo),由于GPS發(fā)過來的數(shù)據(jù)包有很多不同類型的數(shù)據(jù)格式,包括GGA、GLL、RMC 等[6],其大部分?jǐn)?shù)據(jù)都具有重復(fù)性。所以在該測試中,只讀取以S GGA 開頭的語句作為存儲GPS的坐標(biāo),為實(shí)現(xiàn)該目的可以利用在Python編程語句中?的判斷語句“if ′GGA′in text_split”等來實(shí)現(xiàn)。也就是說,從socket讀取的數(shù)據(jù)a不是全部采集保存,只有以GGA 開頭的語句才保存在輸出的文檔里。數(shù)據(jù)樣本保存結(jié)果如圖3所示,通過對比圖3,處理后的語句實(shí)際已包含經(jīng)緯度、時間、航速等重要的數(shù)據(jù),已刪減無用或者重復(fù)的數(shù)據(jù)。只讀取該語句的數(shù)據(jù),不僅滿足科學(xué)家對于GPS數(shù)據(jù)利用的需求,也可以大大節(jié)省存儲空間。
圖3 數(shù)據(jù)樣本保存結(jié)果
在“探索一號”科考船上,已經(jīng)寫好了目前所使用的7種數(shù)據(jù)的語言包,并封裝成不同的小軟件。在實(shí)際使用中,只需要插上網(wǎng)線,將本地電腦設(shè)置成192.168.1.**網(wǎng)段的IP,直接打開對應(yīng)的小軟件,就可以獲取所需要的數(shù)據(jù),并保存在本地電腦里。
綜合多航次的實(shí)際使用情況,該設(shè)計的軟硬件的使用在實(shí)踐上已經(jīng)獲得了科學(xué)家的認(rèn)可,為他們保存了大量的科學(xué)考察數(shù)據(jù)。隨著中國科考事業(yè)的發(fā)展和科考工作的完善,數(shù)據(jù)的采集和存儲將得到更大程度地利用和重視,這種基于Python或者其他語言的數(shù)據(jù)實(shí)時采集與存儲系統(tǒng)的便利性和可復(fù)制性將得到更廣泛的運(yùn)用。