,, ,
(1.中國船舶重工集團(tuán)公司第723研究所,江蘇 揚(yáng)州 225001;2.江蘇科技大學(xué) 電子信息學(xué)院,江蘇 鎮(zhèn)江 212003)
航標(biāo)是航道的基礎(chǔ)助航設(shè)施,直接影響船舶的航行安全。但航標(biāo)的傳統(tǒng)管理模式落后,已經(jīng)無法適應(yīng)日益繁忙的航道運(yùn)輸所提出的高質(zhì)量安全航行的需求。這里結(jié)合內(nèi)河航道航標(biāo)管理現(xiàn)狀,設(shè)計(jì)出一種經(jīng)濟(jì)、可靠的航標(biāo)無線監(jiān)控系統(tǒng)。
由于本系統(tǒng)是用于航標(biāo)的實(shí)時(shí)監(jiān)控,所以要求采集終端所在的位置定位信息以及各種電壓電流量等模擬信號(hào)通過GPRS[1]網(wǎng)絡(luò)經(jīng)由Internet傳送到遠(yuǎn)方的監(jiān)控中心,系統(tǒng)的組成見圖1。
圖1 系統(tǒng)組成框
圖中嵌入式處理器采用s3c44b0,片外擴(kuò)展4 Mb的FLASH存儲(chǔ)器,用于存儲(chǔ)啟動(dòng)代碼bootloader、uClinux操作系統(tǒng)內(nèi)核和文件系統(tǒng)、編譯通過的應(yīng)用程序等需要斷電后保存的數(shù)據(jù)[3]。而16 Mb的sdram存儲(chǔ)器也就是針對(duì)PC機(jī)上所說的內(nèi)存,操作系統(tǒng)運(yùn)行于其上。終端有兩個(gè)串口,串口1(對(duì)應(yīng)uClinux的設(shè)備“ttyS0”)接收GPS(global positioning system)全球定位系統(tǒng)模塊接收到的定位數(shù)據(jù),串口2(對(duì)應(yīng)uClinux的設(shè)備“ttyS1”)接siemens公司生產(chǎn)的GPRS modem MC35。系統(tǒng)把采集到的位置信息以及A/D控制器采集到的模擬量經(jīng)過處理,通過串口2的GPRS MODEM發(fā)送至接于互聯(lián)網(wǎng)的監(jiān)控中心。發(fā)送過程采用TCP/IP協(xié)議,而在數(shù)據(jù)鏈路層,相對(duì)于以太網(wǎng)的HDLC協(xié)議,GPRS采用PPP(pointer to pointer protocol)協(xié)議。
GPRS采用分組交換的形式,可提供最大170 kb/s 的數(shù)據(jù)傳輸速率。
1) 永遠(yuǎn)在線。不同的網(wǎng)絡(luò)用戶共享同一組GPRS通信信道,但只有某一用戶需要發(fā)送和接收數(shù)據(jù)時(shí)才會(huì)占用信道資源,沒有數(shù)據(jù)傳輸時(shí)還與網(wǎng)絡(luò)保持虛連接。這種信道復(fù)用的特點(diǎn),特別適用于突發(fā)的、頻繁的、小量的數(shù)據(jù)傳輸。
2) 計(jì)費(fèi)方式靈活。采用按流量計(jì)費(fèi),收費(fèi)相對(duì)較便宜。
3) 動(dòng)態(tài)分配IP地址。通過GPRS撥號(hào)ISP后,系統(tǒng)每次分配給終端的都是動(dòng)態(tài)IP地址因此移動(dòng)終端每次都必須先向internet主機(jī)發(fā)起主動(dòng)連接。
uClinux系統(tǒng)是由標(biāo)準(zhǔn)的linux系統(tǒng)簡化而來,專門應(yīng)用于沒有MMU(內(nèi)存管理單元)的CPU上,對(duì)內(nèi)存的訪問是直接的,對(duì)內(nèi)存空間沒有保護(hù),不像標(biāo)準(zhǔn)linux那樣采用虛擬內(nèi)存的方法。大多數(shù)uClinux采用romfs作為文件系統(tǒng),它是一種只讀的文件系統(tǒng),相對(duì)于標(biāo)準(zhǔn)linux占用的內(nèi)存更少。另外uClinux精簡了linux的函數(shù)庫,采用uClibc作為標(biāo)準(zhǔn)的函數(shù)庫,所有這些措施都使uClinux更加適用于如arm7這類內(nèi)存較小的CPU上[2]。
在GPRS無線數(shù)據(jù)傳輸終端中要實(shí)現(xiàn)無線數(shù)據(jù)傳輸,要用到兩個(gè)協(xié)議TCP/IP(或UDP/IP)和PPP協(xié)議,其中TCP/IP是事實(shí)上的互聯(lián)網(wǎng)標(biāo)準(zhǔn)協(xié)議,LINUX系統(tǒng)在網(wǎng)絡(luò)應(yīng)用方面是其一大特色,已經(jīng)包含了對(duì)TCP/IP的支持,只需在編譯內(nèi)核中選中即可。GPRS MODEM要實(shí)現(xiàn)連接互聯(lián)網(wǎng),必須先登錄到中國移動(dòng)的網(wǎng)關(guān)支持節(jié)點(diǎn)GGSN,GGSN把獲得的動(dòng)態(tài)IP地址分配給終端。MODEM與網(wǎng)關(guān)GGSN的通訊必須采用PPP協(xié)議。PPP協(xié)議位于ISO/OSI七層協(xié)議的數(shù)據(jù)鏈路層,是網(wǎng)絡(luò)層和物理層的接口。它是一種在串行鏈路上傳輸數(shù)據(jù)報(bào)的協(xié)議。一般的撥號(hào)上網(wǎng)都采用這個(gè)協(xié)議,通過串口實(shí)現(xiàn),由3部分組成[4]:
1) 一種在串行線路上封裝數(shù)據(jù)報(bào)的方法。
2) 一個(gè)用于建立、配置和測(cè)試數(shù)據(jù)鏈路連接的鏈路控制協(xié)議LCP(link control protocol)。
3) 一套用來建立和配置不同網(wǎng)絡(luò)層協(xié)議的網(wǎng)絡(luò)控制協(xié)議NCP(network control protocol)。
GPRS MODEM在撥號(hào)后首先要與GPRS網(wǎng)關(guān)進(jìn)行通信鏈路的協(xié)商,即協(xié)商點(diǎn)到點(diǎn)的各種鏈路參數(shù)配置。協(xié)商過程遵守LCP,采用 PAP/CHAT認(rèn)證。IPCP協(xié)議用于設(shè)置網(wǎng)絡(luò)協(xié)議環(huán)境,并分配IP地址。一旦協(xié)商完成,鏈路已經(jīng)創(chuàng)建,IP地址也將分配,然后兩者就按照協(xié)商的標(biāo)準(zhǔn)進(jìn)行IP報(bào)文的傳輸。
PPP撥號(hào)在uClinux操作系統(tǒng)中分兩部分處理,一部分在內(nèi)核中完成,主要完成PPP消息的封包、拆包,所以在編譯操作系統(tǒng)內(nèi)核時(shí)需選中對(duì)PPP協(xié)議的支持。另一部分稱之為PPP守護(hù)進(jìn)程pppd, PPP守護(hù)進(jìn)程提供基本的LCP協(xié)議,完成PPP鏈路的建立、斷開、帳戶認(rèn)證和IP地址的設(shè)定等工作,如果內(nèi)核源代碼中沒有包含PPP源碼包,需要從網(wǎng)上下載ppp-2.4.1(或ppp-2.3.8)源碼包,然后交叉編譯,生成能在目標(biāo)系統(tǒng)運(yùn)行的pppd和chat程序。本項(xiàng)目系統(tǒng)內(nèi)核中包含ppp包,所以編譯時(shí)只要選中即可。pppd 和chat兩者調(diào)用的關(guān)系是:
1) 由pppd程序調(diào)用chat會(huì)話程序。
2) chat會(huì)話程序負(fù)責(zé)撥號(hào),啟動(dòng)服務(wù)器端的pppd程序,然后chat會(huì)話程序結(jié)束。
3) 由pppd程序繼續(xù)chat會(huì)話程序的工作,驗(yàn)證身份,與服務(wù)器端的pppd程序進(jìn)行握手,建立PPP連接。
本項(xiàng)目撥號(hào)上網(wǎng)實(shí)現(xiàn)過程中需要用到兩個(gè)撥號(hào)腳本文件:ppp-on和ppp-on-dialer。在這2個(gè)腳本中,分別調(diào)用pppd和chat程序,但由于uClinux默認(rèn)的shell是使用一種叫sash的簡單shell,功能不夠強(qiáng),無法執(zhí)行腳本文件,所以在編譯內(nèi)核過程中,需先將默認(rèn)的sash替換成msh——種在uClinux下可以運(yùn)行的、功能更強(qiáng)的shell。下面是本項(xiàng)目撥號(hào)過程中所用到的腳本:
1) ppp-on
#!/bin/sh
TELEPHONE=*99***1# # 中國移動(dòng)的撥號(hào)號(hào)碼
ACCOUNT= # 撥號(hào)帳號(hào),GPRS撥號(hào)為空
PASSWORD= # 密碼為空
LOCAL_IP=0.0.0.0
REMOTE_IP=0.0.0.0
NETMASK=255.255.255.0
export TELEPHONE ACCOUNT PASSWORD
DIALER_SCRIPT=/etc/ppp/ppp-on-dialer
exec /usr/bin/pppd debug lock nocrtscts modem /dev/ttyS1 115200
asyncmap 20A0000 escape FF kdebug 0 $LOCAL_IP:$REMOTE_IP
noipdefault netmask $NETMASK defaultroute connect $DIALER_SCRIPT
其中比較重要的參數(shù)是nocrtscts,表示串口沒有硬件握手,因?yàn)樵O(shè)計(jì)的開發(fā)板串口/dev/ttyS1不帶硬件握手功能。串口和GPRS MODEM的通訊波特率是115 200 b/s。
2) ppp-on-dialer
#!/bin/sh
exec /usr/bin/chat-v
TIMEOUT 200
ECHO ON
ABORT ‘ BUSY ’
ABORT ‘ NO ANSWER ’
ABORT ‘ NO CARRIER ’
ABORT ‘ RINGING RINGING ’
SAY “Press CTRL+C to close the connection at any stage ”
SAY “ defining PDP context ”
‘’ AT
‘OK’ AT+CGDCONT=1,“IP”,“CMNET”,“”,0,0’
‘OK’ ‘AT+CGACT=1,1’
TIMEOUT 30
‘OK’ ‘ATD *99***1#’
CONNECT ‘’
其中值得注意的是撥號(hào)初始化指令各個(gè)MODEM可能不同,本終端采用SIEMENS公司的MC35,所以文件中的AT指令都按照它的來寫。腳本文件的格式要嚴(yán)格遵循腳本的標(biāo)準(zhǔn)例如不能用空格鍵,須用tab鍵等,否則可能會(huì)造成撥號(hào)失敗。另外還要配置中國移動(dòng)DNS服務(wù)器。撥號(hào)成功后會(huì)由GGSN服務(wù)器動(dòng)態(tài)分配一個(gè)IP地址,至此GPRS 終5端就連接到互聯(lián)網(wǎng)上。
有多種方式實(shí)現(xiàn)撥號(hào)上網(wǎng),可在命令行下執(zhí)行撥號(hào)命令,但嵌入式系統(tǒng)一般都要在無人干預(yù)下運(yùn)行撥號(hào)程序,為此,可在uClinux啟動(dòng)腳本/etc/rc文件里加上撥號(hào)的命令,這樣,系統(tǒng)一啟動(dòng)就將自動(dòng)運(yùn)行撥號(hào)上網(wǎng)程序,實(shí)現(xiàn)上網(wǎng)。本項(xiàng)目采用的方式是在程序里調(diào)用system()函數(shù),執(zhí)行撥號(hào)上網(wǎng)腳本。
在終端應(yīng)用程序設(shè)計(jì)中,考慮到程序需要并發(fā)執(zhí)行,采用多線程來處理。不采用多進(jìn)程是基于以下兩個(gè)原因:
1) uClinux操作系統(tǒng)是用vfork調(diào)用來代替?zhèn)鹘y(tǒng)unix系統(tǒng)的fork調(diào)用[3],父進(jìn)程創(chuàng)建子進(jìn)程后阻塞,子進(jìn)程一般情況下調(diào)用exec()函數(shù)以加載可執(zhí)行程序并運(yùn)行,這時(shí)父進(jìn)程恢復(fù)運(yùn)行。本項(xiàng)目中主程序要求父子進(jìn)程之間能通訊,但是vfork()調(diào)用中子進(jìn)程執(zhí)行的是可執(zhí)行程序,所以無法實(shí)現(xiàn)父子進(jìn)程通訊,故本工程不適合用多進(jìn)程。
2) 父子進(jìn)程由于是使用獨(dú)立的代碼段、數(shù)據(jù)段和堆棧等,進(jìn)程間直接通訊幾乎不可能,只能借助于進(jìn)程間通訊來完成互相之間的數(shù)據(jù)共享,無疑增加了程序的復(fù)雜性。主程序流程圖如圖2所示。
圖2 應(yīng)用程序流程圖
航標(biāo)遙測(cè)遙控系統(tǒng)可保證科學(xué)地、有計(jì)劃地對(duì)航標(biāo)進(jìn)行日常管理、維護(hù)以及遇損時(shí)及時(shí)修復(fù),大大降低維修人員勞動(dòng)強(qiáng)度及費(fèi)用開支,為航標(biāo)的管理從粗放型向技術(shù)型、集約型的轉(zhuǎn)變提供了必要的技術(shù)支持。目前該系統(tǒng)已在漢江航道局航標(biāo)管理系統(tǒng)中應(yīng)用,通過一段時(shí)間的應(yīng)用,對(duì)系統(tǒng)整體的實(shí)時(shí)性、準(zhǔn)確性、安全性、可靠性、穩(wěn)定性進(jìn)行了驗(yàn)證,基本實(shí)現(xiàn)了預(yù)期的目標(biāo)。
[1] 鐘章隊(duì),蔣文怡,李紅君,等.GPRS通用分組無線業(yè)務(wù)[M].北京:人民郵電出版社,2001.
[2] 李 巖,容盤符.基于S3C44B0X嵌入式uClinux系統(tǒng)原理及應(yīng)用[M].北京:清華大學(xué)出版社,2005.
[3] 朱瑋瑋,楊建明.uClinux——一種嵌入式Linux系統(tǒng)[J].艦船電子工程,2003(4):47-50.