嵌入式網(wǎng)絡(luò)數(shù)據(jù)轉(zhuǎn)換系統(tǒng)的研究與開(kāi)發(fā)
關(guān)鍵詞 網(wǎng)絡(luò)數(shù)據(jù)轉(zhuǎn)換 TINI Java DP83846A DS80C400
為了達(dá)到利用Internet強(qiáng)大的網(wǎng)絡(luò)功能,實(shí)現(xiàn)遠(yuǎn)程監(jiān)控的目的,需要研究合理的網(wǎng)絡(luò)接人方案。利用基于TINI平臺(tái)的嵌入式系統(tǒng),搭建不同設(shè)備接人計(jì)算機(jī)網(wǎng)絡(luò)的橋梁。利用嵌入式系統(tǒng)強(qiáng)大的軟硬件功能,可以支持不同的設(shè)備,實(shí)現(xiàn)接入方案的通用性。由于嵌入式系統(tǒng)具備較好的數(shù)據(jù)處理能力,不僅可以作為簡(jiǎn)單的網(wǎng)絡(luò)接口,還可以擴(kuò)展接人設(shè)備的網(wǎng)絡(luò)功能,甚至于還可以對(duì)通信的數(shù)據(jù)進(jìn)行加密等處理。
嵌入式系統(tǒng)包括專(zhuān)用的硬件和軟件部分,硬件提供性能的支持,而軟件則為用戶(hù)提供廣泛的靈活性。嵌入式系統(tǒng)的軟件包括其自身的操作系統(tǒng)和編程環(huán)境。Java所具有的各種特性使它成為嵌入式設(shè)備理想的軟件開(kāi)發(fā)工具。針對(duì)Java有很多免費(fèi)開(kāi)放的資源,Java獨(dú)立于硬件平臺(tái),具備可移植性。這一切都可以降低嵌入式設(shè)備開(kāi)發(fā)和使用的成本。其中TINI平臺(tái)就是一種具備Java開(kāi)發(fā)功能的嵌入式系統(tǒng)。
1 系統(tǒng)硬件組成
基于TINI數(shù)據(jù)轉(zhuǎn)換系統(tǒng)的硬件系統(tǒng)如圖1所示。系統(tǒng)與外界的接口主要是RS232的串口和RJ45的以太網(wǎng)接口,其功能就是將串口設(shè)備接人到局域網(wǎng)絡(luò)甚至于Interne。
2 網(wǎng)絡(luò)數(shù)據(jù)轉(zhuǎn)換系統(tǒng)的Java程序
2.1 軟件開(kāi)發(fā)工具包――TlNI SDK
為了在編程中實(shí)現(xiàn)對(duì)硬件的訪(fǎng)問(wèn),Dallas公司開(kāi)發(fā)的TINI SDK將DS80C400中的硬件部分虛擬為Java的類(lèi)。通過(guò)調(diào)用相關(guān)的方法來(lái)實(shí)現(xiàn)對(duì)硬件的操作。SDK中包含Dallas公司開(kāi)發(fā)的嵌入式操作系統(tǒng)。它是多任務(wù)、多線(xiàn)程、具有跨平臺(tái)的能力、擁有高度優(yōu)化的Java運(yùn)行環(huán)境的操作系統(tǒng)。
在TINI SDK的支持下開(kāi)發(fā)應(yīng)用程序,主要采用Java進(jìn)行,通常不直接面對(duì)匯編語(yǔ)言,但是TINI運(yùn)行環(huán)境提供了使用本地方法的機(jī)制。為了優(yōu)化嚴(yán)格要求速度的通道或訪(fǎng)問(wèn)底層硬件,可以使用本地語(yǔ)言(主要是匯編語(yǔ)言)來(lái)編寫(xiě)子程序,這樣增加了系統(tǒng)的靈活性。
利用SDK中提供的API可以簡(jiǎn)化編程。利用SDK中提供的JavaKit和TINIConvertor等工具,在PC上進(jìn)行程序的開(kāi)發(fā)調(diào)試工作,生成適用于TINI運(yùn)行環(huán)境的目標(biāo)應(yīng)用程序。通過(guò)JayaKit向TINI硬件存儲(chǔ)器中裝載TINI的運(yùn)行環(huán)境(包括TINI的操作系統(tǒng)),配置好網(wǎng)絡(luò)參數(shù),即可通過(guò)FTP、TELNET等下載用戶(hù)程序到TINI硬件上并控制運(yùn)行。TINI的Java虛擬機(jī)將Java字節(jié)碼轉(zhuǎn)換成為機(jī)器硬件系統(tǒng)能夠執(zhí)行的代碼。
2.2系統(tǒng)程序的設(shè)計(jì)方法
為了實(shí)現(xiàn)串口數(shù)據(jù)和以太網(wǎng)絡(luò)數(shù)據(jù)之間的交換,設(shè)計(jì)了基于TINI系統(tǒng)的網(wǎng)絡(luò)數(shù)據(jù)轉(zhuǎn)換程序。該程序的主要功能是,從串口設(shè)備讀取數(shù)據(jù),將所得到的數(shù)據(jù)進(jìn)行TcP/IP協(xié)議封裝,通過(guò)RJ45的接口發(fā)送到上位機(jī),與上位機(jī)的服務(wù)器程序進(jìn)行交互;同時(shí),將上位機(jī)發(fā)送給TINI的數(shù)據(jù)轉(zhuǎn)發(fā)到RS232的串口,進(jìn)而可通過(guò)網(wǎng)絡(luò)遠(yuǎn)程監(jiān)控現(xiàn)場(chǎng)的串口設(shè)備。本設(shè)計(jì)中,TINI印刷電路板上有兩個(gè)串口,分別定義為串口O和串口4。單片機(jī)內(nèi)部集成UART,串口0用來(lái)串口啟動(dòng)TINl,下載TINI運(yùn)行環(huán)境,以及作為T(mén)INI的輸出終端。本程序中,利用串口4和上位機(jī)服務(wù)器程序交互。
數(shù)據(jù)轉(zhuǎn)換由兩個(gè)進(jìn)程來(lái)實(shí)現(xiàn),它們分別是SerialWriter和SerialReader。SerialWritel的功能是從上位機(jī)服務(wù)器讀取數(shù)據(jù)流,再把數(shù)據(jù)寫(xiě)到串口輸出數(shù)據(jù)流;SeriaReader的功能是把串口緩沖區(qū)中的可用數(shù)據(jù)讀到輸入緩沖區(qū),通過(guò)向網(wǎng)絡(luò)輸出流寫(xiě)數(shù)據(jù)把串口數(shù)據(jù)發(fā)送到網(wǎng)絡(luò)服務(wù)器,并且更新串口數(shù)據(jù)量;同時(shí)監(jiān)視這兩個(gè)進(jìn)程有無(wú)異常。如果捕捉到異常,便關(guān)閉數(shù)據(jù)流并中斷維持線(xiàn)程,結(jié)束程序。
SerialToEthernet本身繼承了一個(gè)線(xiàn)程類(lèi)。它是一個(gè)維持線(xiàn)程,功能是判斷系統(tǒng)通信狀態(tài)。如果正常,則每隔6 s打印輸出數(shù)據(jù)流量;如果連接的服務(wù)器被關(guān)閉,則關(guān)閉串口socket及相關(guān)的流。它的線(xiàn)程程序中,是一個(gè)有系統(tǒng)運(yùn)行狀態(tài)標(biāo)志控制的循環(huán),維持程序運(yùn)行,每一次循環(huán)中首先使該進(jìn)程睡眠6 000 ms,然后打印輸出此時(shí)的數(shù)據(jù)流量。程序的流程如圖2、圖3、圖4所示。
3 系統(tǒng)調(diào)試方案
系統(tǒng)調(diào)試的主要目的是模擬現(xiàn)場(chǎng)設(shè)備與以太網(wǎng)之間的數(shù)據(jù)轉(zhuǎn)換,將PC機(jī)通過(guò)串口與以太網(wǎng)接口與系統(tǒng)相連,接線(xiàn)方式如圖5所示;用PC機(jī)模擬現(xiàn)場(chǎng)的設(shè)備,同時(shí),利用PC機(jī)作為上位機(jī)監(jiān)控系統(tǒng)運(yùn)行。
實(shí)驗(yàn)中除了運(yùn)行SerialToEthernet外,還準(zhǔn)備了兩個(gè)簡(jiǎn)單的用戶(hù)程序,用于系統(tǒng)調(diào)試,分別是HelloWorld和Blinky。
第一步,下載運(yùn)行HelloWorld。其功能是在以JavaKit作為T(mén)INI的系統(tǒng)輸出終端(類(lèi)似于PC機(jī)的顯示器),打印輸出“Hello World”的字符串,用于檢驗(yàn)串口O。
第二步,下載運(yùn)行Blinky。它的功能是與P3.5相連的LED不停閃爍,用于檢驗(yàn)I/0口的功能。
第三步,下載運(yùn)行SerialToEthernet,同時(shí)運(yùn)行上位機(jī)上服務(wù)器程序TINlServer。TINI系統(tǒng)上運(yùn)行Serial-ToEthernet,用于實(shí)現(xiàn)數(shù)據(jù)轉(zhuǎn)發(fā)功能。為了驗(yàn)證上位機(jī)與TINI問(wèn)的串口通信,上位機(jī)上運(yùn)行串口調(diào)試程序,從而用上位機(jī)模擬實(shí)際的現(xiàn)場(chǎng)串口設(shè)備。運(yùn)行串口調(diào)試程序時(shí),在其中把串口設(shè)為與TINI的串口參數(shù)相同,發(fā)送模式設(shè)為連續(xù)發(fā)送。在這樣的模擬情況下,從串口調(diào)試程序窗口輸入的數(shù)據(jù),通過(guò)串口發(fā)送給TINI系統(tǒng),經(jīng)過(guò)TINI的轉(zhuǎn)發(fā),通過(guò)RJ45接口發(fā)往上位機(jī)。上位機(jī)運(yùn)行服務(wù)器程序TINIServer,它將TINI發(fā)來(lái)的數(shù)據(jù)不經(jīng)處理直接通過(guò)輸出流發(fā)送給TINI。經(jīng)過(guò)TINI的轉(zhuǎn)發(fā),數(shù)據(jù)再次由串口返回上位機(jī),顯示在串口調(diào)試程序的“接收區(qū)”中。數(shù)據(jù)流向如圖6所示。
4 結(jié)論
與傳統(tǒng)的工業(yè)控制數(shù)據(jù)轉(zhuǎn)換系統(tǒng)相比,TINI更加廉價(jià),更加緊湊,消耗功率更低,并且易于維護(hù)。此外,TINI還支持許多底層的通信接口,具有足夠的靈活性,可以適應(yīng)不同聯(lián)網(wǎng)的要求。基于TINI的網(wǎng)絡(luò)數(shù)據(jù)轉(zhuǎn)換系統(tǒng)方案是低成本而且可靠的。利用Java編程可以提高嵌入式系統(tǒng)軟件開(kāi)發(fā)的效率。在本系統(tǒng)的開(kāi)發(fā)過(guò)程中。利用Java軟件很方便地實(shí)現(xiàn)對(duì)底層硬件的訪(fǎng)問(wèn);利用Java自身的特性,可以實(shí)現(xiàn)強(qiáng)大的網(wǎng)絡(luò)功能。
對(duì)于設(shè)備來(lái)說(shuō),通過(guò)本系統(tǒng)可以利用現(xiàn)有的網(wǎng)絡(luò)擴(kuò)展其功能;同時(shí)也可以利用以太網(wǎng)絡(luò)實(shí)現(xiàn)對(duì)設(shè)備的遠(yuǎn)程診斷控制,實(shí)現(xiàn)更加廣泛意義上的網(wǎng)絡(luò)化。
評(píng)論