1. J2ME概述
??? 隨著JAVA技術(shù)的不斷發(fā)展,,JAVA自身也根據(jù)市場(chǎng)進(jìn)行了版本的細(xì)分。Java2分為針對(duì)企業(yè)級(jí)應(yīng)用的J2EE(Java 2 Enterprise Edition),、針對(duì)普通PC應(yīng)用的J2SE(Java 2 Standard Edition)和針對(duì)嵌入式設(shè)備及消費(fèi)類(lèi)電子產(chǎn)品的J2ME(Java 2 Micro Edition)三個(gè)版本,。
??? Sun公司將 J2ME 定義為“一種以廣泛的消費(fèi)性產(chǎn)品為目標(biāo)的的高度優(yōu)化的Java運(yùn)行時(shí)環(huán)境,包括尋呼機(jī),、移動(dòng)電話(huà),、可視電話(huà)、數(shù)字機(jī)頂盒和汽車(chē)導(dǎo)航系統(tǒng),?!?自從 1999 年 6 月在 JavaOne Developer Conference 上聲明之后,J2ME為小型設(shè)備帶來(lái)了Java語(yǔ)言的跨平臺(tái)功能,,允許移動(dòng)無(wú)線(xiàn)設(shè)備共享應(yīng)用程序" title="應(yīng)用程序">應(yīng)用程序,。有了J2ME,Sun已經(jīng)使Java平臺(tái)能夠適應(yīng)集成了或基于小型計(jì)算設(shè)備的用戶(hù)產(chǎn)品,。
2.?J2ME總體架構(gòu)
??? J2ME 使用“配置” (configuration)和“框架” (profile)定制Java運(yùn)行時(shí)環(huán)境(JRE),。作為一個(gè)完整的JRE,J2ME由配置和框架組成,,配置決定了使用的JVM,,而框架通過(guò)添加特定于域的類(lèi)來(lái)定義應(yīng)用程序。配置將基本運(yùn)行時(shí)環(huán)境定義為一組核心類(lèi)和一個(gè)運(yùn)行在特定類(lèi)型設(shè)備上的特定JVM,??蚣芏x了應(yīng)用程序,它還特別向J2ME配置中添加特定于域的類(lèi),定義設(shè)備的某種作用,。下面的圖表描述了不同的虛擬機(jī),、配置和框架之間的關(guān)系。它同時(shí)把 J2SE API 和它的Java虛擬機(jī)進(jìn)行了比較,。雖然J2SE虛擬機(jī)通常被稱(chēng)為一種JVM,,但是J2ME虛擬機(jī)、KVM和CVM都是JVM的子集,。KVM和CVM均可被看作是一種Java虛擬機(jī) -- 它們是J2SE JVM的壓縮版,,并且只應(yīng)用于J2ME技術(shù)。
2.1 配置概述
??? 配置將基本運(yùn)行時(shí)環(huán)境定義為一組核心類(lèi)和一個(gè)運(yùn)行在特定類(lèi)型設(shè)備上的特定JVM,。雖然還可能在將來(lái)定義其他的配置,,但當(dāng)前J2ME只存在兩種配置:
??? (1)連接的有限設(shè)備配置 (CLDC): 主要與KVM一起用于內(nèi)存有限的16位或32位設(shè)備。這是用于開(kāi)發(fā)小型J2ME應(yīng)用程序的配置(虛擬機(jī)),。(從開(kāi)發(fā)的角度來(lái)看)它的大小限制讓它比CDC更有趣、更具挑戰(zhàn)性,。CLDC同時(shí)還是用于開(kāi)發(fā)繪圖工具應(yīng)用程序的配置,。
??? 使用CLDC開(kāi)發(fā)的J2ME應(yīng)用程序的目標(biāo)設(shè)備通常具有以下特征:
·可供Java平臺(tái)使用的160到512KB的總內(nèi)存
·功率有限,常常是電池供電
·通常是無(wú)線(xiàn)連網(wǎng),,連接不穩(wěn)定并且?guī)捰邢?BR>·用戶(hù)接口混亂,,程度參差不齊;有時(shí)根本就沒(méi)有接口
CLDC支持的設(shè)備包括無(wú)線(xiàn)電話(huà),、尋呼機(jī),、主流個(gè)人數(shù)字助手 (PDA),以及小型零售支付終端,。
??? (2)連接的設(shè)備配置(CDC):它與C虛擬機(jī)(CVM)一起使用,,用于要求內(nèi)存超過(guò)2兆的32 位體系結(jié)構(gòu)。
??? 使用CDC開(kāi)發(fā)的J2ME應(yīng)用程序的目標(biāo)設(shè)備通常具有以下特征:
·使用32位處理器
·2兆字節(jié)或更多可供Java平臺(tái)使用的總內(nèi)存
CDC 支持的設(shè)備包括常駐網(wǎng)關(guān),、智能電話(huà)和通訊器,、互聯(lián)網(wǎng)電視機(jī)頂盒、PDA,、小型零售終端以及汽車(chē)導(dǎo)航系統(tǒng),。
2.2 框架概述
??? 框架定義了應(yīng)用程序所支持的設(shè)備類(lèi)型。它還特別向J2ME配置添加了特定于域的類(lèi)來(lái)定義設(shè)備的某種作用,??蚣芙⒃谂渲玫捻敳俊D壳耙呀?jīng)為J2ME定義了兩種框架:KJava和移動(dòng)信息設(shè)備框架 (MIDP),,它們也被建立在CDLC之上,。這兩種框架適用于小型設(shè)備。
2.3 KVM介紹
??? CLDC和MIDP通常運(yùn)行在SUN的K虛擬機(jī)(KVM)之上,,KVM是一個(gè)專(zhuān)門(mén)為小型的,、資源受限的設(shè)備所設(shè)計(jì)的緊湊的,、便捷的Java虛擬機(jī)。KVM的高端設(shè)計(jì)目標(biāo)是創(chuàng)建一個(gè)新的擁有以下特點(diǎn)的Java虛擬機(jī):
·小型的,,虛擬機(jī)核心的靜態(tài)內(nèi)存占有量從60KB開(kāi)始,,依賴(lài)于編譯選項(xiàng)和目標(biāo)平臺(tái)。
·清晰的,,具有良好的注釋和高度的可移植性,。
·模塊化,可定制,。
·在不犧牲其他設(shè)計(jì)目標(biāo)的前提下盡量完善和高速,。
??? KVM中的“K”代表“千(Kilo)”,這樣命名是因?yàn)樗膬?nèi)存容量是用幾十KB來(lái)衡量的(而桌面系統(tǒng)是用兆(M)甚至千兆(G)來(lái)衡量的)。KVM適合于帶有不超過(guò)幾百KB內(nèi)存的16/32位微處理器,。它的典型應(yīng)用是數(shù)字蜂窩電話(huà),、傳呼機(jī)、PDA,、便攜式音頻/視頻設(shè)備和小型的零售支付終端,。
??? KVM實(shí)現(xiàn)所需要的最小總內(nèi)存空間大約是128KB,包括虛擬機(jī),、最小的庫(kù)和運(yùn)行Java程序所需要的堆空間,。一個(gè)更加典型的實(shí)現(xiàn)需要總共256KB的內(nèi)存空間,其中32KB作為應(yīng)用運(yùn)行時(shí)的堆空間,,60KB到80KB用于虛擬機(jī)本身,,剩余的為類(lèi)庫(kù)保留。易失內(nèi)存(如DRAM)和非易失內(nèi)存(如ROM或閃存)之間的比率相依賴(lài)于實(shí)現(xiàn),、設(shè)備,、采用的配置等而變化。KVM在目標(biāo)設(shè)備中真正的任務(wù)會(huì)有很大的不同,。在一些實(shí)現(xiàn)中,,KVM常常是位于本地軟件棧之上使設(shè)備具有在其上下載和運(yùn)行動(dòng)態(tài)、交互,、安全的Java程序的能力,。在另一些實(shí)現(xiàn)中,KVM被用于底層的同時(shí)也用于Java編程語(yǔ)言實(shí)現(xiàn)底層系統(tǒng)軟件和設(shè)備應(yīng)用,。
2.4 MIDlets介紹
??? MID框架的核心是MIDlet應(yīng)用程序,。這個(gè)應(yīng)用程序繼承了MIDlet類(lèi),以允許應(yīng)用程序管理軟件對(duì)MIDlet進(jìn)行控制,、用關(guān)鍵詞檢索屬性以及對(duì)狀態(tài)變化進(jìn)行通知和請(qǐng)求,。 所有MIDlet 都繼承MIDlet類(lèi) — 運(yùn)行時(shí)環(huán)境(應(yīng)用程序管理器)和MIDlet應(yīng)用程序代碼之間的接口。MIDlet類(lèi)提供了用于調(diào)用、暫停,、重新啟動(dòng)和終止MIDlet應(yīng)用程序的API,。應(yīng)用程序管理軟件可以在運(yùn)行時(shí)環(huán)境內(nèi)管理多個(gè)MIDlet 的活動(dòng)。此外,,MIDlet可以自己發(fā)起一些狀態(tài)變化,,并把這些變化通知給應(yīng)用程序管理軟件。
??? MIDP? API(Application Program Interface) 類(lèi)分為兩種:
??? (1)用于用戶(hù)界面的 MIDP API:設(shè)計(jì)這些API是為了能以一系列屏幕顯示為基礎(chǔ)與用戶(hù)進(jìn)行交互操作,,每一屏幕顯示把適量的數(shù)據(jù)顯示給用戶(hù),。這些API允許應(yīng)用程序決定下一屏顯示什么、執(zhí)行什么計(jì)算和使用網(wǎng)絡(luò)服務(wù)的何種請(qǐng)求,。
??? (2)用于處理數(shù)據(jù)庫(kù)的MIDP API:這些API負(fù)責(zé)組織和操作設(shè)備數(shù)據(jù)庫(kù),,這個(gè)數(shù)據(jù)庫(kù)由調(diào)用多個(gè)MIDlet的記錄信息組成。底層的CLDC API用于處理字符串,、對(duì)象和整數(shù),。此外這些API還提供了Java 2 API的一個(gè)子集,用于處理I/O和網(wǎng)絡(luò)通信,。
3.“虛擬實(shí)驗(yàn)室" title="虛擬實(shí)驗(yàn)室">虛擬實(shí)驗(yàn)室”概述
??? 在研究如何用手機(jī)對(duì)電機(jī)進(jìn)行控制的過(guò)程中,,發(fā)展出了“虛擬實(shí)驗(yàn)室”技術(shù)。這實(shí)際上就是通過(guò)手機(jī)控制步進(jìn)" title="步進(jìn)">步進(jìn)電動(dòng)機(jī)和直流伺服" title="直流伺服">直流伺服電動(dòng)機(jī)的旋轉(zhuǎn)角度和旋轉(zhuǎn)方向,。就伺服電動(dòng)機(jī)而言,我們能通過(guò)手機(jī)查看它的開(kāi)關(guān)(ON/OFF)狀態(tài)和當(dāng)前速度(轉(zhuǎn)/分),,還能測(cè)量機(jī)械的時(shí)間遲延,。
??? 首要的事情就是在手機(jī)和計(jì)算機(jī)之間建立連接。如圖1所示,,手機(jī)首先通過(guò)MIDlet與服務(wù)器建立HTTP連接,,然后服務(wù)器與預(yù)定計(jì)算機(jī)的一個(gè)端口建立套接連接。數(shù)據(jù)流就可以通過(guò)這個(gè)端口輸入輸出,。然后服務(wù)器的程序通過(guò)Java本地接口(JNI)呼叫預(yù)定計(jì)算機(jī)里的本地碼,,接著本地碼結(jié)合從接口傳來(lái)的機(jī)器的參數(shù)進(jìn)行運(yùn)算,并把運(yùn)算結(jié)果返回給服務(wù)器,,最后服務(wù)器發(fā)送數(shù)據(jù)給手機(jī)并通過(guò)MIDlet顯示出來(lái),。
3.1 步進(jìn)電動(dòng)機(jī)控制
??? 這里使用4極直流步進(jìn)電動(dòng)機(jī)。用戶(hù)通過(guò)手機(jī)輸入旋轉(zhuǎn)角度與方向,,然后轉(zhuǎn)動(dòng)這么多角度所需要的步數(shù)被計(jì)算出來(lái),,并且通過(guò)打印端口把信號(hào)發(fā)送出去。因?yàn)閺牟⑿锌趥鱽?lái)的信號(hào)太微弱,,所以必須進(jìn)行放大才能使電動(dòng)機(jī)運(yùn)轉(zhuǎn)起來(lái),。如圖2所示,這里用了ULN2003 IC來(lái)進(jìn)行信號(hào)的放大。
??? 下面的圖3所示的就是用來(lái)控制步進(jìn)電動(dòng)機(jī)的手機(jī)輸出界面,。
?
3.2 直流伺服電動(dòng)機(jī)控制
??? 這里使用了12V的直流伺服電動(dòng)機(jī),。它的開(kāi)或關(guān)是通過(guò)繼電器進(jìn)行選擇的。繼電器的定額是6V,,5A,,100ohm。從并行口傳來(lái)的信號(hào)通過(guò)一個(gè)功率晶體管SL100去控制繼電器,。(如圖4所示)
??? 伺服電動(dòng)機(jī)配置了一個(gè)光感應(yīng)裝置(見(jiàn)圖5),。當(dāng)感應(yīng)器收到從縫隙里進(jìn)入的光后就會(huì)輸出5V電壓,功率管會(huì)對(duì)這個(gè)電壓產(chǎn)生沖激響應(yīng),,同時(shí)程序會(huì)自動(dòng)使某個(gè)對(duì)應(yīng)于轉(zhuǎn)速的參數(shù)增加1,。于是就能測(cè)出電動(dòng)機(jī)的轉(zhuǎn)速。如圖6所示,,手機(jī)可以對(duì)伺服電動(dòng)機(jī)的開(kāi)關(guān)狀態(tài),、當(dāng)前轉(zhuǎn)速及時(shí)間遲延進(jìn)行監(jiān)控。
4.總結(jié)
??? 由于J2ME的應(yīng)用,,通過(guò)移動(dòng)設(shè)備對(duì)步進(jìn)電動(dòng)機(jī)和伺服電動(dòng)機(jī)進(jìn)行控制已經(jīng)獲得了成功,。此外,通過(guò)相似的技術(shù)并結(jié)合Internet對(duì)機(jī)器手臂或遠(yuǎn)程設(shè)像機(jī)等進(jìn)行遠(yuǎn)程控制也是很有發(fā)展?jié)摿Φ摹?BR>參考資料
[1]C.Enrique Ortiz and Eric Giguere,2001-Mobile Information Device Profile for Java2 Edition(J2ME):Professional Developer’s Guide-John Wiley & Sons;1stEdition
[2]John W.Muchow,2001-Core J2ME Technology-Prentice Hall PTR; 1stEdition
[3]盧軍.J2ME應(yīng)用程序開(kāi)發(fā)" title="程序開(kāi)發(fā)">程序開(kāi)發(fā)—手機(jī),、PDA程序開(kāi)發(fā)捷徑.北京:中國(guó)鐵道出版社,2002