??? 計(jì)算機(jī)控制系統(tǒng)與國(guó)際互聯(lián)網(wǎng)絡(luò)Internet的融合可以使人們能夠通過(guò)現(xiàn)有的數(shù)據(jù)網(wǎng)存取、監(jiān)測(cè)和控制多種設(shè)備。當(dāng)傳統(tǒng)的控制系統(tǒng)發(fā)展為現(xiàn)場(chǎng)總線控制網(wǎng)絡(luò)(Infranet)時(shí),構(gòu)建Infranet到Internet的網(wǎng)絡(luò)結(jié)構(gòu)就成為可能,一旦Infranet和Internet相結(jié)合,控制網(wǎng)絡(luò)就可利用Internet上豐富的資源,從而為控制領(lǐng)域日益發(fā)展的遠(yuǎn)程控制鋪平了道路。
1.Internet中網(wǎng)絡(luò)遠(yuǎn)程控制系統(tǒng)體系結(jié)構(gòu)?
??? 所謂遠(yuǎn)程控制是指本地計(jì)算機(jī)通過(guò)網(wǎng)絡(luò)系統(tǒng),主要是Internet,實(shí)現(xiàn)對(duì)遠(yuǎn)端的生產(chǎn)過(guò)程的監(jiān)視和控制。能夠?qū)崿F(xiàn)遠(yuǎn)程控制的計(jì)算機(jī)軟硬件系統(tǒng)稱為遠(yuǎn)程控制系統(tǒng)?,F(xiàn)場(chǎng)總線系統(tǒng)接入Internet,在一定條件下,便可通過(guò)Internet控制這些生產(chǎn)系統(tǒng)和現(xiàn)場(chǎng)設(shè)備的運(yùn)行狀況及各種參數(shù),即不必親臨現(xiàn)場(chǎng),通過(guò)網(wǎng)絡(luò)實(shí)現(xiàn)對(duì)遠(yuǎn)程被控對(duì)象的控制,以節(jié)省大量的交通、人力。還可以根據(jù)需要,建立起地區(qū)級(jí)的、國(guó)家級(jí)的乃至世界級(jí)的控制中心,便于大型企業(yè)集團(tuán)對(duì)所屬工廠的整體管理,從而提高經(jīng)濟(jì)效益。對(duì)于制造商來(lái)說(shuō),可以對(duì)自己產(chǎn)品進(jìn)行及時(shí)維護(hù),對(duì)產(chǎn)品性能進(jìn)行及時(shí)跟蹤調(diào)查以便進(jìn)一步改進(jìn)設(shè)計(jì)。
??? 遠(yuǎn)程控制的原理:遠(yuǎn)程控制實(shí)質(zhì)上是通過(guò)遠(yuǎn)程控制軟件使本地計(jì)算機(jī)與遠(yuǎn)程計(jì)算機(jī)之間進(jìn)行的點(diǎn)對(duì)點(diǎn)間的信息傳遞過(guò)程。在進(jìn)行遠(yuǎn)程控制之前,首先要在本地計(jì)算機(jī)和遠(yuǎn)程計(jì)算機(jī)上安裝遠(yuǎn)程控制程序。當(dāng)對(duì)遠(yuǎn)程計(jì)算機(jī)進(jìn)行遠(yuǎn)程控制時(shí),本地計(jì)算機(jī)首先向遠(yuǎn)程計(jì)算機(jī)發(fā)出控制請(qǐng)求,遠(yuǎn)程計(jì)算機(jī)收到控制請(qǐng)求后,先驗(yàn)證本地計(jì)算機(jī)是否有訪問(wèn)的權(quán)限,如果驗(yàn)證通過(guò),遠(yuǎn)程計(jì)算機(jī)向本地計(jì)算機(jī)發(fā)出接受信號(hào),這樣就可以通過(guò)本地計(jì)算機(jī)來(lái)控制遠(yuǎn)程計(jì)算機(jī)了。
??? 要實(shí)現(xiàn)遠(yuǎn)程控制,第一要有一個(gè)能夠穩(wěn)定運(yùn)行的現(xiàn)場(chǎng)總線的控制系統(tǒng);第二要有一個(gè)能夠通過(guò)Internet進(jìn)行遠(yuǎn)程訪問(wèn)的數(shù)據(jù)通信系統(tǒng);第三要有遠(yuǎn)程控制系統(tǒng)的各個(gè)組成部分間建立的虛擬通信關(guān)系,通過(guò)Internet接通遠(yuǎn)程異地控制網(wǎng)絡(luò),并利用公用數(shù)據(jù)網(wǎng)絡(luò)豐富的軟硬件資源,以便通過(guò)Internet來(lái)控制生產(chǎn)現(xiàn)場(chǎng)。
??? 根據(jù)遠(yuǎn)程控制網(wǎng)絡(luò)的任務(wù)和要求,可以考慮整個(gè)系統(tǒng)采用B/S(瀏覽器/服務(wù)器)結(jié)構(gòu),因?yàn)锽/S結(jié)構(gòu)便于信息的發(fā)布,它可以很方便地將現(xiàn)場(chǎng)數(shù)據(jù)發(fā)向Internet,同時(shí)簡(jiǎn)化了客戶端的信息處理,只要在遠(yuǎn)程客戶端裝上Internet瀏覽軟件,即可查閱現(xiàn)場(chǎng)數(shù)據(jù),而Internet瀏覽軟件操作簡(jiǎn)單,無(wú)需培訓(xùn)。系統(tǒng)的總體結(jié)構(gòu)如圖1所示。
圖1? 基于Internet的遠(yuǎn)程控制系統(tǒng)總體結(jié)構(gòu)框圖
??? 遠(yuǎn)程控制所支持的網(wǎng)絡(luò)方式有:LAN、WAN、撥號(hào)上網(wǎng)的方式、Internet方式。遠(yuǎn)程控制一般是通過(guò)一定的軟件或命令,使用NetBEUI、NetBIOS、IPX/SPX、TCP/IP等協(xié)議來(lái)實(shí)現(xiàn)的。當(dāng)然,這里所說(shuō)的遠(yuǎn)程計(jì)算機(jī),只能是一定距離范圍內(nèi)的計(jì)算機(jī)。
2.Java技術(shù)在網(wǎng)絡(luò)遠(yuǎn)程控制中的應(yīng)用?
??? 本文所研究的基于Java的網(wǎng)絡(luò)控制系統(tǒng)的實(shí)現(xiàn)主要表現(xiàn)在下面幾個(gè)方面:基于J2ME技術(shù)的無(wú)線網(wǎng)絡(luò)控制;JNI技術(shù)在計(jì)算機(jī)控制實(shí)時(shí)采集系統(tǒng)中的應(yīng)用;Java串行通信技術(shù)及其對(duì)PLC、單片機(jī)、變頻器等的控制;在Intranet中基于Java的虛擬現(xiàn)實(shí)技術(shù)及其在計(jì)算機(jī)控制系統(tǒng)仿真研究中的應(yīng)用??驁D如圖2所示:
?
2.1? J2ME技術(shù)
??? 雖然從Java 1.0發(fā)表后,Java就被廣泛的應(yīng)用在桌上型應(yīng)用程序以及Applet的開(kāi)發(fā)上,但從Java 1.1開(kāi)始,Java又回到了它的設(shè)計(jì)初衷——嵌入式系統(tǒng)和消費(fèi)類(lèi)電子產(chǎn)品上了。當(dāng)時(shí),Sun Microsystems發(fā)表了針對(duì)嵌入式系統(tǒng)和消費(fèi)類(lèi)電子產(chǎn)品的Embedded Java與Personal Java(簡(jiǎn)稱Pjava)兩項(xiàng)Java規(guī)范。其中,Embedded Java是為資源十分有限且沒(méi)有顯示設(shè)備的裝置設(shè)計(jì)的;Personal Java則是為能夠與Internet聯(lián)網(wǎng),并擁有顯示系統(tǒng)(如彩色LCD)的消費(fèi)類(lèi)電子產(chǎn)品設(shè)計(jì)的。
??? Sun公司為了使Java語(yǔ)言進(jìn)入嵌入式系統(tǒng)和消費(fèi)類(lèi)電子產(chǎn)品領(lǐng)域,在Java 2中推出了J2ME。摩托羅拉是J2ME的主要支持者,第一個(gè)在手機(jī)上移植了KVM,又領(lǐng)導(dǎo)全球手機(jī)廠家制定了MIDP規(guī)范。在2000年的Java One大會(huì)上,摩托羅拉總裁宣布:摩托羅拉的主要手機(jī)都將支持J2ME。
??? 與WAP相比,在傳輸層,J2ME提供了一組面向應(yīng)用程序的高層協(xié)議,包括HTTP和TCP(或UDP)等,實(shí)際的傳輸可以基于其它方式(如CSD或GPRS等)。在應(yīng)用層,J2ME提供了全功能的Java開(kāi)發(fā)環(huán)境,可以用Client/Server方式訪問(wèn)Internet上的所有數(shù)據(jù)。如果需要,軟件開(kāi)發(fā)商甚至可以開(kāi)發(fā)出HTML Browser。
??? J2ME具有很多Java技術(shù)特性,主要有:可以在各種支持Java的設(shè)備上運(yùn)行;代碼短??;充分利用Java語(yǔ)言的優(yōu)勢(shì);安全性好;用J2ME實(shí)現(xiàn)的應(yīng)用可以方便的升級(jí)到J2SE和J2EE。為了支持用戶和嵌入式市場(chǎng)提出的靈活性和可定制的要求,J2ME在設(shè)計(jì)中非常注重模塊伸縮性。J2ME在設(shè)備原有的操作系統(tǒng)上建造了三層軟件,即JVM層、配置層、框架層,實(shí)現(xiàn)模塊化和伸縮性。
2.2? JNI技術(shù)
??? 對(duì)于底層的硬件系統(tǒng)的狀態(tài),純粹的Java語(yǔ)言當(dāng)然是無(wú)法得知,要想得知底層的硬件系統(tǒng)的狀態(tài),必須借助于Java的JNI技術(shù):
??? 本機(jī)方法Java Native Interface(JNI)是Java平臺(tái)的強(qiáng)大特征之一。使用本地方法的應(yīng)用程序可以與用其他編程語(yǔ)言(例如C和C++)編寫(xiě)的本地代碼,也可以與Java語(yǔ)言編寫(xiě)的代碼取得一致。當(dāng)然,JNI允許程序員充分利用Java平臺(tái)的功能,因?yàn)镴NI是Java平臺(tái)的一部分。
??? JNI增強(qiáng)了JDK的功能,將Java語(yǔ)言與其它編程語(yǔ)言聯(lián)合使用,主要運(yùn)用于以下方面:
??? (1)Java編程者可能需要訪問(wèn)特殊的操作系統(tǒng)設(shè)備或聲卡、調(diào)制解調(diào)器等外圍設(shè)備使可用功能盡量讓人滿意,而這些設(shè)備不能通過(guò)JDK來(lái)訪問(wèn)。
??? (2)Java程序可能需要具有與第三方中間件和通信系統(tǒng)(例如Lotus Notes等等)或?qū)S玫钠髽I(yè)軟件系統(tǒng)(例如SAP R/3、Bean等)之間的接口,而這些企業(yè)的應(yīng)用軟件的解決方法帶有它們自己的專(zhuān)用接口API,這些專(zhuān)用接口通常是使用C或C++來(lái)編寫(xiě)的,因此需要使用Java本地方法。
??? (3)可以無(wú)縫集成大量的已存在的程序而不需要考慮用戶接口。
??? (4)實(shí)時(shí)Java系統(tǒng)中的某些時(shí)間高度緊張的操作可能需要利用匯編程序來(lái)進(jìn)行這樣使用JNI是唯一的選擇。
2.3 串口通信技術(shù)?
??? 在科研和工業(yè)應(yīng)用中,串口是常用的計(jì)算機(jī)與外部串行設(shè)備之間的數(shù)據(jù)傳輸通道。串行通信方便易行,應(yīng)用十分廣泛。Java語(yǔ)言本身并不能直接對(duì)串行通信進(jìn)行編程控制,但是我們可以先使用其它語(yǔ)言(例如C/C++)編寫(xiě)好對(duì)硬件控制的方法,然后借助于Java的本地方法調(diào)用來(lái)達(dá)到控制串行通信的目的。由Sun公司推出的javax.comm類(lèi)庫(kù)已經(jīng)做好了這部分工作,我們只需要調(diào)用javax.comm API,就可以編寫(xiě)出Java串行通信程序,非常方便方便。
javax.comm類(lèi)庫(kù)提供了6個(gè)類(lèi),分為3個(gè)層次,如表1所示。
??? 類(lèi)庫(kù)提供的功能:
??? (1)搜索系統(tǒng)中的可用端口。由CommPortIdentifier.getPortIdentifiers()靜態(tài)方法返回一個(gè)CommPortIdentifier對(duì)象,里面包含系統(tǒng)中所有可用的端口信息。CommPortIdentifie對(duì)象是javax.comm類(lèi)庫(kù)中最重要的對(duì)象,所有對(duì)端口的操作都是基于該對(duì)象進(jìn)行的。
??? (2)用上層類(lèi)通過(guò)CommPortIdentifie對(duì)象打開(kāi)端口,并且聲明對(duì)端口的所有權(quán)。
??? (3)協(xié)調(diào)多個(gè)應(yīng)用程序之間對(duì)端口的所有權(quán)沖突。它通過(guò)事件消息來(lái)告知相關(guān)的應(yīng)用程序,并使得當(dāng)前占用端口的應(yīng)用程序放棄所有權(quán)。如果打開(kāi)端口失敗,程序?qū)伋鯬ortInUseException異常。
??? (4)實(shí)現(xiàn)通訊端口的同步和異步I/O。底層類(lèi)(例如SerialPort)都提供有管理通訊端口I/O的方法。
2.4? 虛擬現(xiàn)實(shí)技術(shù)
??? 創(chuàng)建虛擬現(xiàn)實(shí)環(huán)境可以用以下兩種方法,Java 3D和VRML與Java結(jié)合。
2.4.1 Java 3D?
???? Java 3D API可以用來(lái)編寫(xiě)?yīng)毩⒌娜S圖象應(yīng)用程序和基于Web的3D Applets,它提供了產(chǎn)生和操作3D幾何對(duì)象和用于描述幾何特性的高層構(gòu)件,使得開(kāi)發(fā)者可以用構(gòu)件來(lái)描述廣大的虛擬現(xiàn)實(shí)。
??? Java 3D包含了一種相當(dāng)完整而且有機(jī)的立即模式,它的設(shè)計(jì)使所有用Java 3D API編寫(xiě)的應(yīng)用程序?qū)崿F(xiàn)了跨平臺(tái)操作的能力。Java 3D的立即模式提供了通用立即模式層特性的最佳折中,同時(shí)還能得到滿意的性能。
??? Java 3D提供了復(fù)雜的基于視點(diǎn)模型的虛擬現(xiàn)實(shí),但從典型的應(yīng)用角度看,Java 3D的視點(diǎn)模型是很簡(jiǎn)單的。如果一項(xiàng)應(yīng)用想在現(xiàn)存的使用基于攝像機(jī)來(lái)建立鏡頭的參數(shù)即刻。但是,Java 3D視點(diǎn)模型不能置于現(xiàn)存的基于攝像機(jī)的視點(diǎn)模型之上。
??? Java 3D能夠支持六自由度的跟蹤模型。AWT提供了最普通的桌面交互外設(shè):鼠標(biāo)和鍵盤(pán),Java 3D同樣使用它們,而不是另選一種不兼容的I/O模型。Java 3D提供了能力位,保證了節(jié)點(diǎn)對(duì)象的大部分可修改狀態(tài),它們的默認(rèn)值對(duì)于現(xiàn)場(chǎng)圖景是不授權(quán)路徑的。當(dāng)今的絕大部分3D環(huán)境是運(yùn)行時(shí)環(huán)境,而不是編輯環(huán)境。如果應(yīng)用程序只識(shí)別那些會(huì)改變的對(duì)象,Java 3D就能對(duì)大部分的圖形進(jìn)行優(yōu)化操作,于是Java 3D提供了能力位,使得應(yīng)用程序可以定義這樣的重要信息。???
2.4.2 Java與VRML?
??? VRML的動(dòng)畫(huà)效果其實(shí)就是依靠一個(gè)給定的時(shí)間傳感器和一系列各種各樣的內(nèi)插節(jié)點(diǎn)來(lái)控制場(chǎng)景中各種動(dòng)畫(huà)效果。其基本的方法就是時(shí)間傳感器給出一個(gè)控制動(dòng)畫(huà)效果的時(shí)鐘,這個(gè)時(shí)鐘包含了動(dòng)畫(huà)效果的開(kāi)始時(shí)間、停止時(shí)間、時(shí)間間隔和是否循環(huán)等動(dòng)畫(huà)控制參數(shù),然后通過(guò)這個(gè)時(shí)鐘的輸出在虛擬世界中驅(qū)動(dòng)各種內(nèi)插節(jié)點(diǎn)產(chǎn)生各種相應(yīng)的動(dòng)畫(huà)效果,而在內(nèi)插節(jié)點(diǎn)中將給出各種動(dòng)畫(huà)效果的關(guān)鍵點(diǎn)和關(guān)鍵值,VRML瀏覽器將自動(dòng)地根據(jù)這些關(guān)鍵點(diǎn)通過(guò)線性插值的方法來(lái)完成整個(gè)動(dòng)畫(huà)過(guò)程。另外,在VRML中虛擬世界和用戶之間的交互是通過(guò)一系列檢測(cè)器來(lái)實(shí)現(xiàn)的,通過(guò)這些檢測(cè)器節(jié)點(diǎn),使瀏覽器感知用戶的各種操作,這樣用戶就可以和VRML虛擬世界中的三維對(duì)象進(jìn)行直接交互。
??? 利用時(shí)間傳感器和內(nèi)插節(jié)點(diǎn)創(chuàng)造的動(dòng)畫(huà)效果在虛擬空間中都是自發(fā)進(jìn)行的,也就是說(shuō)和瀏覽者沒(méi)有任何的交互性可言,各種動(dòng)畫(huà)效果只是有給定的時(shí)間傳感器來(lái)控制。所以我們使用Java技術(shù)來(lái)改變這一弱勢(shì)。
??? 外部創(chuàng)作接口(External Authoring Interface,EAI)是由SGI公司的Chris Marrin設(shè)計(jì)并提出來(lái)的,主要目的是增強(qiáng)VRML場(chǎng)景與外部環(huán)境通信聯(lián)系和融合能力的一個(gè)高層次的Java類(lèi)包,它使得一個(gè)外部程序使用VRML的事件模型可以訪問(wèn)和控制VRML場(chǎng)景中的節(jié)點(diǎn)。這里的外部程序主要是指和VRML虛擬場(chǎng)景嵌在同一個(gè)網(wǎng)頁(yè)中的Java Applet程序。在VRML的事件模型中,一個(gè)給定節(jié)點(diǎn)的出事件(EventOut)可以被路由(Route)到另一個(gè)節(jié)點(diǎn)的入事件(EventIn)。當(dāng)出事件對(duì)象產(chǎn)生了一個(gè)事件,入事件對(duì)象就會(huì)得到通知并處理接收到的事件。如果一個(gè)腳本節(jié)點(diǎn)中有一個(gè)指向給定節(jié)點(diǎn)的域,它就可以對(duì)該節(jié)點(diǎn)直接發(fā)送入事件,并可以讀取該節(jié)點(diǎn)的任何一個(gè)出事件的最后發(fā)送值。
??? 通過(guò)使用EAI,用戶不再僅僅局限于作為一個(gè)觀眾,而是可以參與、介入到虛擬場(chǎng)景的構(gòu)建過(guò)程中去。用戶借助自己豐富的想象力,可以去更改所看到的VRML場(chǎng)景、修改場(chǎng)景的物體、改變這些物體的表現(xiàn)形式、設(shè)計(jì)場(chǎng)景中的動(dòng)畫(huà)、定義場(chǎng)景中各個(gè)角色的行為方式。
3.結(jié)束語(yǔ)?
??? 本文從J2ME、JNI、javax.comm和Java3D及Java與VRML結(jié)合等幾方面,粗略地探討了Java技術(shù)在基于Web的遠(yuǎn)程控制中的應(yīng)用。在后續(xù)的研究中,將具體地研究各個(gè)部分的具體編程實(shí)現(xiàn)。在具體實(shí)現(xiàn)時(shí),將會(huì)設(shè)計(jì)Java安全性技術(shù)。另外,如何使用Java技術(shù)中的Jini技術(shù)構(gòu)建分布式網(wǎng)絡(luò)控制,如何將Smart Card等嵌入式技術(shù)運(yùn)用于嵌入式控制網(wǎng)絡(luò)等問(wèn)題也將進(jìn)行深入研究。