吳 杰,陳永冰,鐘 斌,周 崗
(海軍工程大學電氣工程學院,武漢 430033)
隨著我國經濟建設的飛速發展,海上運輸業務量日益擴大,船舶航行安全評估、航行管理等工作中需要掌握實船航行數據。隨著網絡和通信技術快速發展,遠距離無線數據傳輸經過多年的開發與實際運用,已逐步成熟,為在航船舶數據無線傳輸提供了方便。
無線數據的傳輸有多種方案,比如藍牙、WiFi、ZigBee等,可以滿足近距離通訊的需要。在航船舶與陸基數據服務器之間距離較遠,GPRS信號在遠離海岸時無法覆蓋,就需要對無信號覆蓋海域航行過程中的數據進行預先存儲在 SD卡中,在船舶靠岸連接到GPRS網絡后再對SD中的航行數據進行發送。本文旨在搭建在航船舶數據終端和陸基數據服務器中心的數據鏈路。
在船舶數據終端,采用 STM32控制器為控制核心,SIM900A作為數據收發模塊。GPRS數據傳輸是基于TCP/IP協議之上的,數據包在船舶數據終端與GPRS服務器之間,這就意味著所有的數據報文都要基于TCP/IP包。STM32將已存儲在SD卡上的數據按服務器要求通過串口發送給SIM900A模塊,SIM900A將自動把數據打包成TCP/IP包,再經由GPRS網絡和Internet在線的陸基服務器主機建立通信鏈路并發送出數據。數據傳輸的鏈路如圖1所示。
在硬件設計方面主要包括主控電路部分、通信模塊電路和供電電路部分以及相關接口的設計。圖2是硬件結構框圖。

圖1 數據傳輸鏈路原理圖

圖2 船舶數據終端硬件總體結構框圖
本系統采用32位微控制器STM32F107作為控制核心。該處理器采用 ARM 公司最新的 V7體系架構的內核 Cortex-M3,它的速度比 ARM7快三分之一,功耗低四分之三,同時集成了分支預測,硬件除法,單周期乘法等功能,極大地提升了處理器的數據處理能力,同時采用最新的Thumb-2指令集,有效地降低了代碼的密度,提升了程序的執行效率。STM32F107有豐富的片上資源和I/O接口,不但簡化了系統硬件,且STM32不同型號產品在引腳和軟件上具有完美的兼容性。其最高運行速度可達72 MHz,具有256k字節的Flash、64 k字節的RAM,大大提高了程序運行速度。豐富的I/O接口使其通信能力增加,包括3個SPI接口、5個USART串行接口、2個I2S口、2個I2C口。另外STM32F107擁有全速USB(OTG)接口、兩路 CAN接口,以及以太網10/100MAC模塊。
在船舶數據終端的硬件電路中以STM32F107為核心處理器,在其外圍除了布設電源、晶振和復位等基本電路外,根據船舶的實際情況,又添加了下列相關電路。
1)串口電路。傳感器等采集系統收集來的參數數據是經過串口總線與微處理器通信的,本系統采用了工業中廣泛使用的RS485半雙工異步通信總線,在串口電路設計中采用了隔離型RS485收發器,保證串口通訊的穩定和數據收發的準確。
2)加速度計電路。船舶在海上的航行狀況和航行的海況有很大的關聯,而船舶的縱橫搖角度是反映船舶航行穩定性的重要數據,而這些數據不容易直接獲取,這里設計通過一個加速度計電路來采集,為了采集加速度參數數據,本系統設計中使用了 ADXL345芯片。這是一款體積小,功耗低的可以測量x,y,z三個方向的加速度計,能夠測量-16g~+16g范圍的加速度。能夠測量傾斜中的靜態重力加速度和運動中的動態加速度,且測量精度能達到分級別。再根據傾角和加速度的關系換算出縱橫搖角度的量。
3)存儲電路。GPRS網絡無法覆蓋遠離海岸的區域,為了解決無網絡情況下的數據處理問題防止數據的丟失,這里采用在船舶數據終端加上一個數據存儲電路,將航行參數數據保存記錄在存儲設備中。在船舶返港和靠海岸時,GPRS網絡可以連通的情況下,再將之前存儲的數據通過數據鏈路發送到陸基服務器中心。

圖3 主控芯片及外圍電路框圖
本設計采用GPRS作為遠程數據傳輸網絡,實現在航船舶航行數據的發送。選取SIMCOM公司的緊湊型產品 SIM900模塊作為本課題的GPRS控制模塊。它不僅是一款兩頻段GSM/GPRS無線模塊,而且內部具有 TCP/IP協議,可以將數據通過IP協議的格式發送到網絡。不僅縮短了軟件開發周期,而且減少了軟件設計的繁瑣。
SIM900A采用工業標準接口,工作頻率為GSM/GPRS850/900/1800/1900 MHz,可以低功耗實現語音、SMS、數據和傳真信息的傳輸。SIM900A模塊的原理圖如下:

圖4 SIM900A 模塊電路
SIM900A模塊與STM32是通過USART連接的,實現數據的交換和通信,硬件設計也較簡單。SIM900A模塊與STM32對應的連接端口是RXD與USART2_TXD,TXD與USART2_RXD,用以實現數據傳輸。其中SIM900上的引腳10 RXD口是用于接收STM32傳來的數據,最終數據通過SIM900A外接的天線發送出去到服務器,引腳9 TXD口是用于向STM32發送數據。

圖5 SIM900A與STM32控制器連接示意圖
在主電路中,主控芯片 STM32F107的工作電壓為3.3 V,通信芯片SIM900 A的工作電壓為4 V,為了使模塊各個部分正常運行,必須對兩者分別進行供電,設計的電源供電電路如下:

圖6 電源電路
要實現在航船舶航行數據的發送,就要求在終端和服務器之間建立一個穩定可靠的數據通道。考慮到應用規模適中,而且數據的實時性要求不高,選擇采用無固定公網IP主機配合最新版內網穿透的花生殼域名解析軟件來搭建數據鏈路,將處于網絡覆蓋中的船舶上的航行數據按要求傳輸到陸基服務器上。
經過多方案測試,這種數據鏈路的搭建方式還可以用于無線設備上網的電腦服務器上,由于移動GPRS網絡可看作成一個巨大的內網,而最新的花生殼內網版經過測試可以穿透這個移動無線網絡,而后再與 Internet在線的服務器進行通信和數據的傳輸。

圖7 花生殼域名服務軟件
通過域名的方式來連接服務器,首先需要有一個固定域名,比較后選用花生殼這款軟件。在花生殼網站上注冊一個個人賬號,會免費獲得一個域名。在經過注冊登陸后,獲得了一個免費域名為:ctxc0805.xicp.net。圖7是花生殼域名服務軟件的界面,可以看到陸基數據服務器電腦的內網IP和一個固定的域名以及相應的端口號。下面我們將用這個域名來進行實驗測試。
微處理器STM32對通信模塊SIM900A的控制是通過AT指令來實現的。AT指令是通信模塊識別控制指令,其基本格式為:AT+命令字符及相關設置參數,模塊識讀后返回相應的參數和信息。在本設計中各模塊上電之后,STM32控制器通過USART2串口向SIM900A模塊發送預先在程序中編入的AT指令,執行模塊的初始化、波特率設置、數據格式設置和配置連接的相關參數。具體相關AT指令如下:
1)AT+CPIN?,該指令用于查詢SIM卡的狀態,主要是 PIN 碼,如果該指令返回:+CPIN:READY,則表明 SIM卡狀態正常,返回其他值,則有可能是無SIM卡或者 SIM卡不可用。
2)AT+CIPMUX=0,這條命令是用來設置SIM900A模塊工作在單鏈接方式的,本文中船舶數據終端是和服務器一對一連接的,故設置單鏈接模式。
3)AT+CIPMODE=0,這條命令是用來選擇TCP/IP應用模式的,如果參數為0,那么以非透明的方式來應用,如果參數為 1,那么以透明方式來應用。本文這里是以非透明的方式來用。
4)AT+IPR="9600",設置數據通信波特率為9600。
5)AT+CGCLASS="B",設置移動臺類別為B,即模塊支持包交換和電路交換模式,但不能同時支持。
6)AT+CGDCONT=1,"IP","CMNET",設置PDP上下文標志為 1,采用互聯網協議(IP),接入點為"CMNET"。
7)AT+CLPORT="TCP","1201",即設置TCP連接的本地端口號為1201。
8)AT+CIPSTART="TCP","ctxc0805.xicp.net","57425"通過申請的固定域名連接服務器,連接成功后SIM900A返回"CONNECT OK"。此時船舶數據終端就已經成功連接到指定的域名為"ctxc0805.xicp.net"的 TCP服務器也就是陸基的數據服務器電腦,接入的端口號 57425。這些相關的AT指令操作都是軟件運行完成的:
sim900a_send_cmd("AT+CIPCLOSE=1","CL OSE OK",100);//關閉連接。
sim900a_send_cmd("AT+CIPSHUT","SHUT OK",100);//關閉移動場景。
if(sim900a_send_cmd("AT+CGCLASS="B"","OK",1000))return1;//設置移動臺類別為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服務。
if(sim900a_send_cmd("AT+CIPCSGP=1,"C MNET"","OK",500))return 4;//設置GPRS連接模式。
為了更加直觀描述 STM32對通信模塊SIM900A的控制流程和鏈路的建立過程,這里使用串口助手來模擬數據鏈路的連接過程和數據的發送情況。完成上述相關指令的串口發送后,向TCP SERVER發送數據“Test DATA”,在串口調試工具發送如下指令:AT+CIPSEND返回符號">"在發送框內輸入“Test DATA”手動發送,在手動發送“TEST DATA”后,以十六進制發送1A結束,返回SEND OK。此時已經把測試的數據“Test DATA”發送出去,可以在數據服務器上的網絡調試助手上看到從通信模塊 SIM900A發來的數據“Test DATA”。整個運行流程及測試結果如下圖所示。
若要關閉已經連接的數據通道,發送指令AT+CIPCLOSE,用于關閉TCP/UDP連接。發送:AT+CIPCLOSE=1,即可快速關閉當前TCP/UDP連接。
船舶的航行環境多變無疑會對數據鏈路的狀態帶來影響,GPRS網絡狀態的差異會在數據鏈路上產生掉線和重連的情形。TCP鏈接的建立涉及到的 AT命令 AT+CIPSTART,該指令有兩個返回值,分別是模塊的IP地址和端口號。首先將AT+CIPSTART指令返回的當前模塊的IP地址和端口號存放到一個Buf中,然后將這個Buf寫入到串口 2中,如果之后能夠讀取到返回值“CONNECT OK”,就表示TCP鏈接已經建立好。
TCP鏈接的關閉涉及到的 AT命令是AT+CIPCLOSE,該指令沒有返回值,可以直接將該指令寫到串口 2中,如果檢測到“CLOSE OK”,就表示TCP鏈接已經被關閉。STM32在檢測Buf的內容可以判斷TCP連接是否已經建立或者是服務器控制模塊下線。
若意外掉線的情況下,就需要模塊自動重連,重連需要用到DCD引腳,當TCP連接建立之后,DCD引腳電平就會由高電平變為低電平,所以DCD引腳的電平狀態可以用于指示 TCP的連接狀況。在程序中,設置時鐘在上升沿檢測 DCD引腳的狀態值,當該引腳的電平值由高電平變為低電平時,就表示模塊已經掉線,然后模塊就開始重新登陸,重新搭建數據鏈路。

圖8 數據鏈路發送數據測試
本設計結合ARM芯片STM32F107、通信模塊SIM900A以及域名服務軟件花生殼,設計了一個便于遠航船舶數據采集的通信鏈路。考慮了硬件和相關網絡服務的成本,解決了便攜式電腦的在無線上網環境下無固定IP作為服務器的問題。實驗結果表明,整個數據鏈路通信狀況良好,能滿足測試數據的發送。鏈路系統穩定可靠且功耗較低,運行成本低廉,對方便快捷采集在航船舶相關數據起了促進作用。
[1]金子瑜,張聲傳,房茂金,等.智能家居系統研究與實現[J].自動化與儀表,2011,26(9):47-50.
[2]陳學泉,關宇東.嵌入式 TCP/IP協議單片機技術在網絡通信中的應用.電子技術應用,2002,(8):48-49.
[3]李濤,馬殷元,楊東,等.基于STM32的GPRS遠程監測終端設計[J].電子世界,2012,6:126-127.
[4]徐志,何明華,林武,等.一類基于軟件載波的學習型遙控器的設計與實現[J].現代電子技術,2009,(2):36-38.
[5]李斌,高恭嫻.學習型紅外遙控器的設計[J].微型機與應用,2010,(1): 13-15.
[6]尹東至.基于 GSM/GPS的汽車防盜系統設計的[D].武漢:武漢理工大學,2007.
[7]劉曉杰.汽車 GPRS防盜報警系統的研究與設計[D].大連:大連理工大學,2010.
[8]王建偉.基于ARM與GPRS的智能控制系統的研究[J].儀表技術,2008,(7):45-47.