基于Windows Mobile的無(wú)線通信系統(tǒng)的研究與實(shí)現(xiàn)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
1 引言
根據(jù)江陰蘇南港集裝箱碼頭的發(fā)展形勢(shì)、理貨業(yè)務(wù)的發(fā)展需求以及碼頭集裝箱吞吐量的不斷增長(zhǎng)的情況,通過(guò)對(duì)蘇南港口的業(yè)務(wù)流程進(jìn)行深入調(diào)查,利用GPRS無(wú)線數(shù)據(jù)網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)實(shí)時(shí)采集,結(jié)合碼頭的應(yīng)用現(xiàn)狀和今后的業(yè)務(wù)發(fā)展的需求所進(jìn)行的無(wú)線通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn),使用了智能手機(jī),并結(jié)合基于Windows Mobile 操作系統(tǒng)的J2ME語(yǔ)言實(shí)現(xiàn)了系統(tǒng)的客戶(hù)端。
2 整體設(shè)計(jì)
2.1 系統(tǒng)組網(wǎng)方案
現(xiàn)在非常成熟的GPRS網(wǎng)絡(luò)的最大傳輸速率可高達(dá)171. 2 Kb/ s,現(xiàn)已成熟的EGPRS的速率約是GPRS的三倍,它能使影像和移動(dòng)多媒體應(yīng)用的數(shù)據(jù)速率達(dá)到473Kbps,完全滿(mǎn)足碼頭的數(shù)據(jù)傳輸速度,并且它具有組網(wǎng)靈活、擴(kuò)展容易、運(yùn)行費(fèi)用低,維護(hù)簡(jiǎn)單、性?xún)r(jià)比高等優(yōu)點(diǎn)。
圖1 系統(tǒng)總體結(jié)構(gòu)
對(duì)本系統(tǒng)來(lái)說(shuō),采用GPRS技術(shù)適用于碼頭作業(yè)中連續(xù)的、突發(fā)性的和頻繁的數(shù)據(jù)傳輸,能滿(mǎn)足手持移動(dòng)終端眾多時(shí)系統(tǒng)對(duì)突發(fā)性數(shù)據(jù)傳輸進(jìn)行處理的要求。因此,本設(shè)計(jì)中,各監(jiān)控點(diǎn)使用了GPRS透明數(shù)據(jù)傳輸終端,通過(guò)移動(dòng)GPRS網(wǎng)絡(luò)與監(jiān)控中心相連,并采用APN接入點(diǎn)方式。各數(shù)據(jù)采集點(diǎn)使用移動(dòng)通信公司統(tǒng)一的STK卡,同時(shí)監(jiān)控中心對(duì)各點(diǎn)進(jìn)行登記,保存相關(guān)資料以便識(shí)別和維護(hù)處理。各信息采集點(diǎn)運(yùn)行監(jiān)控系統(tǒng)軟件,支持24小時(shí)實(shí)時(shí)在線,實(shí)現(xiàn)信息點(diǎn)24小時(shí)傳送采集的信息數(shù)據(jù)。系統(tǒng)的總體結(jié)構(gòu)如圖1所示。
2.2 系統(tǒng)總體工作原理
港口裝卸生產(chǎn)現(xiàn)場(chǎng)信息自動(dòng)傳輸系統(tǒng)的基本技術(shù)是無(wú)線終端,它是一種集無(wú)線通信與計(jì)算機(jī)網(wǎng)絡(luò)功能于一體的新型通信系統(tǒng)。無(wú)線終端的應(yīng)用圍繞港口基本作業(yè)過(guò)程進(jìn)行設(shè)計(jì)、數(shù)據(jù)采集、計(jì)劃執(zhí)行,是數(shù)據(jù)庫(kù)的信息源頭。管理人員通過(guò)中央控制臺(tái)的電腦屏幕直接監(jiān)控指揮集裝箱裝卸作業(yè),集卡和機(jī)械司機(jī)、碼頭裝卸作業(yè)人員通過(guò)手持或車(chē)載無(wú)線終端同中央控制臺(tái)聯(lián)系,實(shí)時(shí)傳遞集裝箱的裝卸信息,管理人員在中央控制臺(tái)可以及時(shí)掌握整個(gè)碼頭集裝箱的運(yùn)作情況。
2.3 系統(tǒng)的通信流程
圖2 服務(wù)器與手持終端通信
系統(tǒng)采用的是客戶(hù)/服務(wù)器通信模式(C/S),服務(wù)器端利用ServerSocket創(chuàng)建偵聽(tīng)特定端口的Socket,為了實(shí)現(xiàn)通信,服務(wù)器端要開(kāi)啟偵聽(tīng)服務(wù)、發(fā)送和接收服務(wù)。在終端設(shè)定了客戶(hù)端的套接字(socket),并將其目的地址連接到服務(wù)器所在的IP地址與相應(yīng)的端口,當(dāng)終端人員登錄時(shí),啟動(dòng)此socket,搜尋并連接到服務(wù)器,如果成功,則會(huì)正確進(jìn)入下一步。圖2表明了服務(wù)器和智能手機(jī)終端利用ServerSocket和Socket來(lái)通信的過(guò)程。
3 技術(shù)路線
3.1 Windows Mobile系統(tǒng)特性
運(yùn)用在智能手機(jī)上的操作系統(tǒng)主要有四種:Symbian 、Linux OS 、Windows Mobile、Windows CE。相比較而言,Windows Mobile更加適用于智能手機(jī):
首先從產(chǎn)品開(kāi)發(fā)的角度來(lái)講,Windows Mobile更適合在智能手機(jī)上運(yùn)行,并且正在以前所未有的速度普及開(kāi)來(lái)。[!--empirenews.page--]
其次,由于沿用了微軟Windows操作系統(tǒng)的界面,界面和操作都和電腦上的Windows十分接近,對(duì)于使用者來(lái)說(shuō)十分熟悉又上手。
第三,針對(duì)中國(guó)用戶(hù)而言,中文操作系統(tǒng)已經(jīng)比較成熟。目前,多普達(dá)、摩托羅拉、三星等都已經(jīng)生產(chǎn)了針對(duì)該系統(tǒng)的智能手機(jī),并且從市場(chǎng)的發(fā)展趨勢(shì)來(lái)看,基于Windows Mobile操作系統(tǒng)的智能手機(jī)將是主流。
因此,在本次系統(tǒng)的設(shè)計(jì)中,智能手機(jī)終端采用了Windows Mobile操作系統(tǒng)。
3.2 Java在Windows Mobile中的應(yīng)用
Java語(yǔ)言分為三個(gè)版本:J2SE,J2EE,J2ME。其中J2ME版本是適用于智能無(wú)線設(shè)備和小型計(jì)算設(shè)備的J2SE的簡(jiǎn)化版,它能夠適應(yīng)這些設(shè)備微型、移動(dòng)和無(wú)線的特點(diǎn)。
對(duì)于安裝了Windows Mobile操作系統(tǒng)的智能手機(jī)來(lái)說(shuō),根據(jù)不同品牌、不同型號(hào)的智能手機(jī)來(lái)看,在運(yùn)行Java程序上也有所不同。對(duì)于不直接支持Java的智能手機(jī)來(lái)說(shuō),就需要借助第三方的Java虛擬機(jī)來(lái)運(yùn)行程序,常見(jiàn)的Java虛擬機(jī)有JMM和DMIDP2等。而對(duì)于支持Java擴(kuò)展的智能手機(jī)來(lái)說(shuō),只要將編寫(xiě)好的J2ME程序打包后,就能在手機(jī)上運(yùn)行。本設(shè)計(jì)選擇的智能手機(jī)是多普達(dá)S1,它本身是支持Java的,因此不需要另外尋找Java虛擬機(jī)來(lái)運(yùn)行J2ME程序,只需要下載一個(gè)RESCO資源管理器,然后將要運(yùn)行的程序?qū)?yīng)的工程(包括jad文件)進(jìn)行打包,下載至智能手機(jī)中。最后打開(kāi)RESCO資源管理器,找到所要運(yùn)行的Java程序,點(diǎn)擊其中的jar文件就可以運(yùn)行了。
4 系統(tǒng)的具體實(shí)現(xiàn)
4.1 服務(wù)器端程序的實(shí)現(xiàn)
由于服務(wù)器端需要接受和處理的數(shù)據(jù)量較大,并且是運(yùn)行在計(jì)算機(jī)上的,所以,服務(wù)器端的程序是用J2EE編寫(xiě)的。
智能手機(jī)是通過(guò)設(shè)置專(zhuān)線APN來(lái)連接服務(wù)器的,服務(wù)器通過(guò)繼承Thread類(lèi)創(chuàng)建線程ServerImpl實(shí)現(xiàn)其功能,并通過(guò)生成固定端口的服務(wù)器Socket來(lái)接收終端的請(qǐng)求,實(shí)時(shí)偵聽(tīng),對(duì)來(lái)自于終端的數(shù)據(jù)進(jìn)行相應(yīng)處理,完成任務(wù)后,用close()關(guān)閉套接字,最后關(guān)閉服務(wù)器退出。
服務(wù)器的初始化程序?yàn)椋?nbsp;
private void initServer(){
try{
receiveMessages=new Vector();
//創(chuàng)建存放接收消息數(shù)組對(duì)象
sendMessages=new Vector();
//創(chuàng)建存放發(fā)送消息數(shù)組對(duì)象
sender=new SendImpl(); //生成SendImpl類(lèi)的對(duì)象
receiver=new ReceiveImpl();
//生成ReceiveImpl類(lèi)的對(duì)象
listener=new ListenImpl();
clients=new Vector();
serverSocket=new ServerSocket(8000);
//生成服務(wù)器端口
listener.setListenSocket(clients);
//實(shí)現(xiàn)對(duì)客戶(hù)端的偵聽(tīng)
listener.setServerSocket(serverSocket);
//設(shè)置服務(wù)器套接字
sender.setSockets(clients);
receiver.setSockets(clients);
sender.setMessages(sendMessages);
receiver.setMessages(receiveMessages);
//設(shè)置消息對(duì)象
}catch(BindException b){
System.out.println("Server 已經(jīng)啟動(dòng)");
System.exit(0);//結(jié)束程序
}
}
4.2 客戶(hù)端的程序?qū)崿F(xiàn)
在創(chuàng)建J2ME程序之前,首先要對(duì)J2ME進(jìn)行配置。針對(duì)智能手機(jī)的特點(diǎn),應(yīng)當(dāng)選擇的是CLDC(連接有限設(shè)備)和MIDP1.0的配置。
4.2.1 連接程序的實(shí)現(xiàn)
程序的主題部分中,與服務(wù)器的連接過(guò)程是關(guān)鍵。程序代碼如下:
private boolean connect() {
try {
System.out.println("連接到服務(wù)器");
connect=(SocketConnection)Connector.open("socket://localhost:8000");
//與服務(wù)器建立連接
System.out.println("此終端的地址為:"+adrthis);
in = connect.openInputStream();
//輸入數(shù)據(jù)
out = connect.openOutputStream();
//輸出數(shù)據(jù)
return true;
} catch (Exception e) {
//拋出異常[!--empirenews.page--]
e.printStackTrace();
System.out.println("不能連接到服務(wù)器");
return false;
}
}
4.2.2 界面程序的實(shí)現(xiàn)
為MIDlet所做的用戶(hù)界面設(shè)計(jì)取決于小型計(jì)算設(shè)備的限制。豐富的用戶(hù)界面含有各類(lèi)用戶(hù)界面元素,具有最小用戶(hù)界面的設(shè)備則擁有這些元素的一個(gè)子集,具體由該設(shè)備使用的profile決定。例如主頁(yè)面的程序主要用到的就是List,它是若干條選項(xiàng)的列表,用戶(hù)可以從中選擇一項(xiàng)。此外,對(duì)于程序中事件的應(yīng)用程序,還要建立監(jiān)聽(tīng)。這里用Command對(duì)象來(lái)為用戶(hù)提供一組選項(xiàng)供選擇,并且在每個(gè)屏幕必須有一個(gè)CommandListener監(jiān)視用忽在屏幕上的操作事件。具體程序代碼如下:
public MainGPRS() {
ok = new Command("OK",Command.OK,1);
exit = new Command("exit",Command.EXIT,1);
//定義按鈕控件
aList =
new List("作業(yè)路徑",Choice.IMPLICIT);
//定義一個(gè)Implict List
aList.append("1.裝卸船作業(yè)",null); aList.append("2.冷藏抄溫",null);
aList.append("3.正面吊作業(yè)",null); aList.append("4.堆高機(jī)作業(yè)",null)
aList.append("5.軌道吊作業(yè)",null);
//創(chuàng)建對(duì)按鈕控件的監(jiān)聽(tīng)
aList.addCommand(ok);
aList.setCommandListener(this);aList.addCommand(exit);
}
protected void startApp() throws MIDletStateChangeException {
//獲得設(shè)備的display
aDisplay = Display.getDisplay(this);
//設(shè)置當(dāng)前的顯示界面
aDisplay.setCurrent(aList);
}
5 系統(tǒng)的總體實(shí)現(xiàn)效果
圖3、圖4列舉了兩個(gè)系統(tǒng)在運(yùn)行過(guò)程中所獲得的用戶(hù)圖形界面,以表明程序?qū)崿F(xiàn)的效果。
圖3 作業(yè)選擇界面 圖4 登錄界面
以上介紹無(wú)線通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn),主要是在智能手機(jī)上的應(yīng)用。此程序設(shè)計(jì)的通信系統(tǒng)已經(jīng)應(yīng)用到了江陰蘇南港集裝箱碼頭,并且使得碼頭工作人員的工作效率得到了很大的提高,也使集裝箱信息能實(shí)時(shí)得到采集。隨著現(xiàn)在各個(gè)碼頭集裝箱碼頭吞吐量的不斷增大,這種手持通信系統(tǒng)將會(huì)在其它的碼頭得到推廣。