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)類電子產(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)電話、可視電話、數(shù)字機(jī)頂盒和汽車導(dǎo)航系統(tǒng)。” 自從 1999 年 6 月在 JavaOne Developer Conference 上聲明之后,J2ME為小型設(shè)備帶來(lái)了Java語(yǔ)言的跨平臺(tái)功能,允許移動(dòng)無(wú)線設(shè)備共享應(yīng)用程序" title="應(yīng)用程序">應(yīng)用程序。有了J2ME,Sun已經(jīng)使Java平臺(tái)能夠適應(yīng)集成了或基于小型計(jì)算設(shè)備的用戶產(chǎn)品。
2.?J2ME總體架構(gòu)
??? J2ME 使用“配置” (configuration)和“框架” (profile)定制Java運(yùn)行時(shí)環(huán)境(JRE)。作為一個(gè)完整的JRE,J2ME由配置和框架組成,配置決定了使用的JVM,而框架通過添加特定于域的類來(lái)定義應(yīng)用程序。配置將基本運(yùn)行時(shí)環(huán)境定義為一組核心類和一個(gè)運(yùn)行在特定類型設(shè)備上的特定JVM。框架定義了應(yīng)用程序,它還特別向J2ME配置中添加特定于域的類,定義設(shè)備的某種作用。下面的圖表描述了不同的虛擬機(jī)、配置和框架之間的關(guān)系。它同時(shí)把 J2SE API 和它的Java虛擬機(jī)進(jìn)行了比較。雖然J2SE虛擬機(jī)通常被稱為一種JVM,但是J2ME虛擬機(jī)、KVM和CVM都是JVM的子集。KVM和CVM均可被看作是一種Java虛擬機(jī) -- 它們是J2SE JVM的壓縮版,并且只應(yīng)用于J2ME技術(shù)。
2.1 配置概述
??? 配置將基本運(yùn)行時(shí)環(huán)境定義為一組核心類和一個(gè)運(yùn)行在特定類型設(shè)備上的特定JVM。雖然還可能在將來(lái)定義其他的配置,但當(dāng)前J2ME只存在兩種配置:
??? (1)連接的有限設(shè)備配置 (CLDC): 主要與KVM一起用于內(nèi)存有限的16位或32位設(shè)備。這是用于開發(fā)小型J2ME應(yīng)用程序的配置(虛擬機(jī))。(從開發(fā)的角度來(lái)看)它的大小限制讓它比CDC更有趣、更具挑戰(zhàn)性。CLDC同時(shí)還是用于開發(fā)繪圖工具應(yīng)用程序的配置。
??? 使用CLDC開發(fā)的J2ME應(yīng)用程序的目標(biāo)設(shè)備通常具有以下特征:
·可供Java平臺(tái)使用的160到512KB的總內(nèi)存
·功率有限,常常是電池供電
·通常是無(wú)線連網(wǎng),連接不穩(wěn)定并且?guī)捰邢?BR>·用戶接口混亂,程度參差不齊;有時(shí)根本就沒有接口
CLDC支持的設(shè)備包括無(wú)線電話、尋呼機(jī)、主流個(gè)人數(shù)字助手 (PDA),以及小型零售支付終端。
??? (2)連接的設(shè)備配置(CDC):它與C虛擬機(jī)(CVM)一起使用,用于要求內(nèi)存超過2兆的32 位體系結(jié)構(gòu)。
??? 使用CDC開發(fā)的J2ME應(yīng)用程序的目標(biāo)設(shè)備通常具有以下特征:
·使用32位處理器
·2兆字節(jié)或更多可供Java平臺(tái)使用的總內(nèi)存
CDC 支持的設(shè)備包括常駐網(wǎng)關(guān)、智能電話和通訊器、互聯(lián)網(wǎng)電視機(jī)頂盒、PDA、小型零售終端以及汽車導(dǎo)航系統(tǒng)。
2.2 框架概述
??? 框架定義了應(yīng)用程序所支持的設(shè)備類型。它還特別向J2ME配置添加了特定于域的類來(lái)定義設(shè)備的某種作用??蚣芙⒃谂渲玫捻敳?。目前已經(jīng)為J2ME定義了兩種框架:KJava和移動(dòng)信息設(shè)備框架 (MIDP),它們也被建立在CDLC之上。這兩種框架適用于小型設(shè)備。
2.3 KVM介紹
??? CLDC和MIDP通常運(yùn)行在SUN的K虛擬機(jī)(KVM)之上,KVM是一個(gè)專門為小型的、資源受限的設(shè)備所設(shè)計(jì)的緊湊的、便捷的Java虛擬機(jī)。KVM的高端設(shè)計(jì)目標(biāo)是創(chuàng)建一個(gè)新的擁有以下特點(diǎn)的Java虛擬機(jī):
·小型的,虛擬機(jī)核心的靜態(tài)內(nèi)存占有量從60KB開始,依賴于編譯選項(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適合于帶有不超過幾百KB內(nèi)存的16/32位微處理器。它的典型應(yīng)用是數(shù)字蜂窩電話、傳呼機(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ī)本身,剩余的為類庫(kù)保留。易失內(nèi)存(如DRAM)和非易失內(nèi)存(如ROM或閃存)之間的比率相依賴于實(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類,以允許應(yīng)用程序管理軟件對(duì)MIDlet進(jìn)行控制、用關(guān)鍵詞檢索屬性以及對(duì)狀態(tài)變化進(jìn)行通知和請(qǐng)求。 所有MIDlet 都繼承MIDlet類 — 運(yùn)行時(shí)環(huán)境(應(yīng)用程序管理器)和MIDlet應(yīng)用程序代碼之間的接口。MIDlet類提供了用于調(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) 類分為兩種:
??? (1)用于用戶界面的 MIDP API:設(shè)計(jì)這些API是為了能以一系列屏幕顯示為基礎(chǔ)與用戶進(jìn)行交互操作,每一屏幕顯示把適量的數(shù)據(jù)顯示給用戶。這些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)行控制的過程中,發(fā)展出了“虛擬實(shí)驗(yàn)室”技術(shù)。這實(shí)際上就是通過手機(jī)控制步進(jìn)" title="步進(jìn)">步進(jìn)電動(dòng)機(jī)和直流伺服" title="直流伺服">直流伺服電動(dòng)機(jī)的旋轉(zhuǎn)角度和旋轉(zhuǎn)方向。就伺服電動(dòng)機(jī)而言,我們能通過手機(jī)查看它的開關(guān)(ON/OFF)狀態(tài)和當(dāng)前速度(轉(zhuǎn)/分),還能測(cè)量機(jī)械的時(shí)間遲延。
??? 首要的事情就是在手機(jī)和計(jì)算機(jī)之間建立連接。如圖1所示,手機(jī)首先通過MIDlet與服務(wù)器建立HTTP連接,然后服務(wù)器與預(yù)定計(jì)算機(jī)的一個(gè)端口建立套接連接。數(shù)據(jù)流就可以通過這個(gè)端口輸入輸出。然后服務(wù)器的程序通過Java本地接口(JNI)呼叫預(yù)定計(jì)算機(jī)里的本地碼,接著本地碼結(jié)合從接口傳來(lái)的機(jī)器的參數(shù)進(jìn)行運(yùn)算,并把運(yùn)算結(jié)果返回給服務(wù)器,最后服務(wù)器發(fā)送數(shù)據(jù)給手機(jī)并通過MIDlet顯示出來(lái)。
3.1 步進(jìn)電動(dòng)機(jī)控制
??? 這里使用4極直流步進(jìn)電動(dòng)機(jī)。用戶通過手機(jī)輸入旋轉(zhuǎn)角度與方向,然后轉(zhuǎn)動(dòng)這么多角度所需要的步數(shù)被計(jì)算出來(lái),并且通過打印端口把信號(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ī)。它的開或關(guān)是通過繼電器進(jìn)行選擇的。繼電器的定額是6V,5A,100ohm。從并行口傳來(lái)的信號(hào)通過一個(gè)功率晶體管SL100去控制繼電器。(如圖4所示)
??? 伺服電動(dòng)機(jī)配置了一個(gè)光感應(yīng)裝置(見圖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ī)的開關(guān)狀態(tài)、當(dāng)前轉(zhuǎn)速及時(shí)間遲延進(jìn)行監(jiān)控。
4.總結(jié)
??? 由于J2ME的應(yīng)用,通過移動(dòng)設(shè)備對(duì)步進(jìn)電動(dòng)機(jī)和伺服電動(dòng)機(jī)進(jìn)行控制已經(jīng)獲得了成功。此外,通過相似的技術(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)用程序開發(fā)" title="程序開發(fā)">程序開發(fā)—手機(jī)、PDA程序開發(fā)捷徑.北京:中國(guó)鐵道出版社,2002