吳 杰,陳永冰,鐘 斌,周 崗
(海軍工程大學(xué)電氣工程學(xué)院,武漢 430033)
隨著我國經(jīng)濟建設(shè)的飛速發(fā)展,海上運輸業(yè)務(wù)量日益擴大,船舶航行安全評估、航行管理等工作中需要掌握實船航行數(shù)據(jù)。隨著網(wǎng)絡(luò)和通信技術(shù)快速發(fā)展,遠(yuǎn)距離無線數(shù)據(jù)傳輸經(jīng)過多年的開發(fā)與實際運用,已逐步成熟,為在航船舶數(shù)據(jù)無線傳輸提供了方便。
無線數(shù)據(jù)的傳輸有多種方案,比如藍(lán)牙、WiFi、ZigBee等,可以滿足近距離通訊的需要。在航船舶與陸基數(shù)據(jù)服務(wù)器之間距離較遠(yuǎn),GPRS信號在遠(yuǎn)離海岸時無法覆蓋,就需要對無信號覆蓋海域航行過程中的數(shù)據(jù)進(jìn)行預(yù)先存儲在 SD卡中,在船舶靠岸連接到GPRS網(wǎng)絡(luò)后再對SD中的航行數(shù)據(jù)進(jìn)行發(fā)送。本文旨在搭建在航船舶數(shù)據(jù)終端和陸基數(shù)據(jù)服務(wù)器中心的數(shù)據(jù)鏈路。
在船舶數(shù)據(jù)終端,采用 STM32控制器為控制核心,SIM900A作為數(shù)據(jù)收發(fā)模塊。GPRS數(shù)據(jù)傳輸是基于TCP/IP協(xié)議之上的,數(shù)據(jù)包在船舶數(shù)據(jù)終端與GPRS服務(wù)器之間,這就意味著所有的數(shù)據(jù)報文都要基于TCP/IP包。STM32將已存儲在SD卡上的數(shù)據(jù)按服務(wù)器要求通過串口發(fā)送給SIM900A模塊,SIM900A將自動把數(shù)據(jù)打包成TCP/IP包,再經(jīng)由GPRS網(wǎng)絡(luò)和Internet在線的陸基服務(wù)器主機建立通信鏈路并發(fā)送出數(shù)據(jù)。數(shù)據(jù)傳輸?shù)逆溌啡鐖D1所示。
在硬件設(shè)計方面主要包括主控電路部分、通信模塊電路和供電電路部分以及相關(guān)接口的設(shè)計。圖2是硬件結(jié)構(gòu)框圖。
圖1 數(shù)據(jù)傳輸鏈路原理圖
圖2 船舶數(shù)據(jù)終端硬件總體結(jié)構(gòu)框圖
本系統(tǒng)采用32位微控制器STM32F107作為控制核心。該處理器采用 ARM 公司最新的 V7體系架構(gòu)的內(nèi)核 Cortex-M3,它的速度比 ARM7快三分之一,功耗低四分之三,同時集成了分支預(yù)測,硬件除法,單周期乘法等功能,極大地提升了處理器的數(shù)據(jù)處理能力,同時采用最新的Thumb-2指令集,有效地降低了代碼的密度,提升了程序的執(zhí)行效率。STM32F107有豐富的片上資源和I/O接口,不但簡化了系統(tǒng)硬件,且STM32不同型號產(chǎn)品在引腳和軟件上具有完美的兼容性。其最高運行速度可達(dá)72 MHz,具有256k字節(jié)的Flash、64 k字節(jié)的RAM,大大提高了程序運行速度。豐富的I/O接口使其通信能力增加,包括3個SPI接口、5個USART串行接口、2個I2S口、2個I2C口。另外STM32F107擁有全速USB(OTG)接口、兩路 CAN接口,以及以太網(wǎng)10/100MAC模塊。
在船舶數(shù)據(jù)終端的硬件電路中以STM32F107為核心處理器,在其外圍除了布設(shè)電源、晶振和復(fù)位等基本電路外,根據(jù)船舶的實際情況,又添加了下列相關(guān)電路。
1)串口電路。傳感器等采集系統(tǒng)收集來的參數(shù)數(shù)據(jù)是經(jīng)過串口總線與微處理器通信的,本系統(tǒng)采用了工業(yè)中廣泛使用的RS485半雙工異步通信總線,在串口電路設(shè)計中采用了隔離型RS485收發(fā)器,保證串口通訊的穩(wěn)定和數(shù)據(jù)收發(fā)的準(zhǔn)確。
2)加速度計電路。船舶在海上的航行狀況和航行的海況有很大的關(guān)聯(lián),而船舶的縱橫搖角度是反映船舶航行穩(wěn)定性的重要數(shù)據(jù),而這些數(shù)據(jù)不容易直接獲取,這里設(shè)計通過一個加速度計電路來采集,為了采集加速度參數(shù)數(shù)據(jù),本系統(tǒng)設(shè)計中使用了 ADXL345芯片。這是一款體積小,功耗低的可以測量x,y,z三個方向的加速度計,能夠測量-16g~+16g范圍的加速度。能夠測量傾斜中的靜態(tài)重力加速度和運動中的動態(tài)加速度,且測量精度能達(dá)到分級別。再根據(jù)傾角和加速度的關(guān)系換算出縱橫搖角度的量。
3)存儲電路。GPRS網(wǎng)絡(luò)無法覆蓋遠(yuǎn)離海岸的區(qū)域,為了解決無網(wǎng)絡(luò)情況下的數(shù)據(jù)處理問題防止數(shù)據(jù)的丟失,這里采用在船舶數(shù)據(jù)終端加上一個數(shù)據(jù)存儲電路,將航行參數(shù)數(shù)據(jù)保存記錄在存儲設(shè)備中。在船舶返港和靠海岸時,GPRS網(wǎng)絡(luò)可以連通的情況下,再將之前存儲的數(shù)據(jù)通過數(shù)據(jù)鏈路發(fā)送到陸基服務(wù)器中心。
圖3 主控芯片及外圍電路框圖
本設(shè)計采用GPRS作為遠(yuǎn)程數(shù)據(jù)傳輸網(wǎng)絡(luò),實現(xiàn)在航船舶航行數(shù)據(jù)的發(fā)送。選取SIMCOM公司的緊湊型產(chǎn)品 SIM900模塊作為本課題的GPRS控制模塊。它不僅是一款兩頻段GSM/GPRS無線模塊,而且內(nèi)部具有 TCP/IP協(xié)議,可以將數(shù)據(jù)通過IP協(xié)議的格式發(fā)送到網(wǎng)絡(luò)。不僅縮短了軟件開發(fā)周期,而且減少了軟件設(shè)計的繁瑣。
SIM900A采用工業(yè)標(biāo)準(zhǔn)接口,工作頻率為GSM/GPRS850/900/1800/1900 MHz,可以低功耗實現(xiàn)語音、SMS、數(shù)據(jù)和傳真信息的傳輸。SIM900A模塊的原理圖如下:
圖4 SIM900A 模塊電路
SIM900A模塊與STM32是通過USART連接的,實現(xiàn)數(shù)據(jù)的交換和通信,硬件設(shè)計也較簡單。SIM900A模塊與STM32對應(yīng)的連接端口是RXD與USART2_TXD,TXD與USART2_RXD,用以實現(xiàn)數(shù)據(jù)傳輸。其中SIM900上的引腳10 RXD口是用于接收STM32傳來的數(shù)據(jù),最終數(shù)據(jù)通過SIM900A外接的天線發(fā)送出去到服務(wù)器,引腳9 TXD口是用于向STM32發(fā)送數(shù)據(jù)。
圖5 SIM900A與STM32控制器連接示意圖
在主電路中,主控芯片 STM32F107的工作電壓為3.3 V,通信芯片SIM900 A的工作電壓為4 V,為了使模塊各個部分正常運行,必須對兩者分別進(jìn)行供電,設(shè)計的電源供電電路如下:
圖6 電源電路
要實現(xiàn)在航船舶航行數(shù)據(jù)的發(fā)送,就要求在終端和服務(wù)器之間建立一個穩(wěn)定可靠的數(shù)據(jù)通道??紤]到應(yīng)用規(guī)模適中,而且數(shù)據(jù)的實時性要求不高,選擇采用無固定公網(wǎng)IP主機配合最新版內(nèi)網(wǎng)穿透的花生殼域名解析軟件來搭建數(shù)據(jù)鏈路,將處于網(wǎng)絡(luò)覆蓋中的船舶上的航行數(shù)據(jù)按要求傳輸?shù)疥懟?wù)器上。
經(jīng)過多方案測試,這種數(shù)據(jù)鏈路的搭建方式還可以用于無線設(shè)備上網(wǎng)的電腦服務(wù)器上,由于移動GPRS網(wǎng)絡(luò)可看作成一個巨大的內(nèi)網(wǎng),而最新的花生殼內(nèi)網(wǎng)版經(jīng)過測試可以穿透這個移動無線網(wǎng)絡(luò),而后再與 Internet在線的服務(wù)器進(jìn)行通信和數(shù)據(jù)的傳輸。
圖7 花生殼域名服務(wù)軟件
通過域名的方式來連接服務(wù)器,首先需要有一個固定域名,比較后選用花生殼這款軟件。在花生殼網(wǎng)站上注冊一個個人賬號,會免費獲得一個域名。在經(jīng)過注冊登陸后,獲得了一個免費域名為:ctxc0805.xicp.net。圖7是花生殼域名服務(wù)軟件的界面,可以看到陸基數(shù)據(jù)服務(wù)器電腦的內(nèi)網(wǎng)IP和一個固定的域名以及相應(yīng)的端口號。下面我們將用這個域名來進(jìn)行實驗測試。
微處理器STM32對通信模塊SIM900A的控制是通過AT指令來實現(xiàn)的。AT指令是通信模塊識別控制指令,其基本格式為:AT+命令字符及相關(guān)設(shè)置參數(shù),模塊識讀后返回相應(yīng)的參數(shù)和信息。在本設(shè)計中各模塊上電之后,STM32控制器通過USART2串口向SIM900A模塊發(fā)送預(yù)先在程序中編入的AT指令,執(zhí)行模塊的初始化、波特率設(shè)置、數(shù)據(jù)格式設(shè)置和配置連接的相關(guān)參數(shù)。具體相關(guān)AT指令如下:
1)AT+CPIN?,該指令用于查詢SIM卡的狀態(tài),主要是 PIN 碼,如果該指令返回:+CPIN:READY,則表明 SIM卡狀態(tài)正常,返回其他值,則有可能是無SIM卡或者 SIM卡不可用。
2)AT+CIPMUX=0,這條命令是用來設(shè)置SIM900A模塊工作在單鏈接方式的,本文中船舶數(shù)據(jù)終端是和服務(wù)器一對一連接的,故設(shè)置單鏈接模式。
3)AT+CIPMODE=0,這條命令是用來選擇TCP/IP應(yīng)用模式的,如果參數(shù)為0,那么以非透明的方式來應(yīng)用,如果參數(shù)為 1,那么以透明方式來應(yīng)用。本文這里是以非透明的方式來用。
4)AT+IPR="9600",設(shè)置數(shù)據(jù)通信波特率為9600。
5)AT+CGCLASS="B",設(shè)置移動臺類別為B,即模塊支持包交換和電路交換模式,但不能同時支持。
6)AT+CGDCONT=1,"IP","CMNET",設(shè)置PDP上下文標(biāo)志為 1,采用互聯(lián)網(wǎng)協(xié)議(IP),接入點為"CMNET"。
7)AT+CLPORT="TCP","1201",即設(shè)置TCP連接的本地端口號為1201。
8)AT+CIPSTART="TCP","ctxc0805.xicp.net","57425"通過申請的固定域名連接服務(wù)器,連接成功后SIM900A返回"CONNECT OK"。此時船舶數(shù)據(jù)終端就已經(jīng)成功連接到指定的域名為"ctxc0805.xicp.net"的 TCP服務(wù)器也就是陸基的數(shù)據(jù)服務(wù)器電腦,接入的端口號 57425。這些相關(guān)的AT指令操作都是軟件運行完成的:
sim900a_send_cmd("AT+CIPCLOSE=1","CL OSE OK",100);//關(guān)閉連接。
sim900a_send_cmd("AT+CIPSHUT","SHUT OK",100);//關(guān)閉移動場景。
if(sim900a_send_cmd("AT+CGCLASS="B"","OK",1000))return1;//設(shè)置移動臺類別為B。
if(sim900a_send_cmd("AT+CGDCONT=1,"I P","CMNET"","OK",1000))return 2;
if(sim900a_send_cmd("AT+CGATT=1","OK",500))return 3;//附著GPRS服務(wù)。
if(sim900a_send_cmd("AT+CIPCSGP=1,"C MNET"","OK",500))return 4;//設(shè)置GPRS連接模式。
為了更加直觀描述 STM32對通信模塊SIM900A的控制流程和鏈路的建立過程,這里使用串口助手來模擬數(shù)據(jù)鏈路的連接過程和數(shù)據(jù)的發(fā)送情況。完成上述相關(guān)指令的串口發(fā)送后,向TCP SERVER發(fā)送數(shù)據(jù)“Test DATA”,在串口調(diào)試工具發(fā)送如下指令:AT+CIPSEND返回符號">"在發(fā)送框內(nèi)輸入“Test DATA”手動發(fā)送,在手動發(fā)送“TEST DATA”后,以十六進(jìn)制發(fā)送1A結(jié)束,返回SEND OK。此時已經(jīng)把測試的數(shù)據(jù)“Test DATA”發(fā)送出去,可以在數(shù)據(jù)服務(wù)器上的網(wǎng)絡(luò)調(diào)試助手上看到從通信模塊 SIM900A發(fā)來的數(shù)據(jù)“Test DATA”。整個運行流程及測試結(jié)果如下圖所示。
若要關(guān)閉已經(jīng)連接的數(shù)據(jù)通道,發(fā)送指令A(yù)T+CIPCLOSE,用于關(guān)閉TCP/UDP連接。發(fā)送:AT+CIPCLOSE=1,即可快速關(guān)閉當(dāng)前TCP/UDP連接。
船舶的航行環(huán)境多變無疑會對數(shù)據(jù)鏈路的狀態(tài)帶來影響,GPRS網(wǎng)絡(luò)狀態(tài)的差異會在數(shù)據(jù)鏈路上產(chǎn)生掉線和重連的情形。TCP鏈接的建立涉及到的 AT命令 AT+CIPSTART,該指令有兩個返回值,分別是模塊的IP地址和端口號。首先將AT+CIPSTART指令返回的當(dāng)前模塊的IP地址和端口號存放到一個Buf中,然后將這個Buf寫入到串口 2中,如果之后能夠讀取到返回值“CONNECT OK”,就表示TCP鏈接已經(jīng)建立好。
TCP鏈接的關(guān)閉涉及到的 AT命令是AT+CIPCLOSE,該指令沒有返回值,可以直接將該指令寫到串口 2中,如果檢測到“CLOSE OK”,就表示TCP鏈接已經(jīng)被關(guān)閉。STM32在檢測Buf的內(nèi)容可以判斷TCP連接是否已經(jīng)建立或者是服務(wù)器控制模塊下線。
若意外掉線的情況下,就需要模塊自動重連,重連需要用到DCD引腳,當(dāng)TCP連接建立之后,DCD引腳電平就會由高電平變?yōu)榈碗娖?,所以DCD引腳的電平狀態(tài)可以用于指示 TCP的連接狀況。在程序中,設(shè)置時鐘在上升沿檢測 DCD引腳的狀態(tài)值,當(dāng)該引腳的電平值由高電平變?yōu)榈碗娖綍r,就表示模塊已經(jīng)掉線,然后模塊就開始重新登陸,重新搭建數(shù)據(jù)鏈路。
圖8 數(shù)據(jù)鏈路發(fā)送數(shù)據(jù)測試
本設(shè)計結(jié)合ARM芯片STM32F107、通信模塊SIM900A以及域名服務(wù)軟件花生殼,設(shè)計了一個便于遠(yuǎn)航船舶數(shù)據(jù)采集的通信鏈路??紤]了硬件和相關(guān)網(wǎng)絡(luò)服務(wù)的成本,解決了便攜式電腦的在無線上網(wǎng)環(huán)境下無固定IP作為服務(wù)器的問題。實驗結(jié)果表明,整個數(shù)據(jù)鏈路通信狀況良好,能滿足測試數(shù)據(jù)的發(fā)送。鏈路系統(tǒng)穩(wěn)定可靠且功耗較低,運行成本低廉,對方便快捷采集在航船舶相關(guān)數(shù)據(jù)起了促進(jìn)作用。
[1]金子瑜,張聲傳,房茂金,等.智能家居系統(tǒng)研究與實現(xiàn)[J].自動化與儀表,2011,26(9):47-50.
[2]陳學(xué)泉,關(guān)宇東.嵌入式 TCP/IP協(xié)議單片機技術(shù)在網(wǎng)絡(luò)通信中的應(yīng)用.電子技術(shù)應(yīng)用,2002,(8):48-49.
[3]李濤,馬殷元,楊東,等.基于STM32的GPRS遠(yuǎn)程監(jiān)測終端設(shè)計[J].電子世界,2012,6:126-127.
[4]徐志,何明華,林武,等.一類基于軟件載波的學(xué)習(xí)型遙控器的設(shè)計與實現(xiàn)[J].現(xiàn)代電子技術(shù),2009,(2):36-38.
[5]李斌,高恭嫻.學(xué)習(xí)型紅外遙控器的設(shè)計[J].微型機與應(yīng)用,2010,(1): 13-15.
[6]尹東至.基于 GSM/GPS的汽車防盜系統(tǒng)設(shè)計的[D].武漢:武漢理工大學(xué),2007.
[7]劉曉杰.汽車 GPRS防盜報警系統(tǒng)的研究與設(shè)計[D].大連:大連理工大學(xué),2010.
[8]王建偉.基于ARM與GPRS的智能控制系統(tǒng)的研究[J].儀表技術(shù),2008,(7):45-47.