利用TINI平臺(tái)設(shè)計(jì)網(wǎng)絡(luò)On/Off開關(guān)(圖)
出處:liangby 發(fā)布于:2007-04-16 20:03:34
系統(tǒng)軟件概述
com.dalsemi.tininet.http.HTTPServer類允許開關(guān)控制應(yīng)用程序充當(dāng)簡(jiǎn)單的web服務(wù)器,將Java程序傳遞給遠(yuǎn)端主機(jī)。在被主機(jī)內(nèi)部瀏覽器執(zhí)行后,該Java程序就建立了一個(gè)與TINI應(yīng)用程序交換命令和狀態(tài)的雙向TCP連接,也為顯示控制和狀態(tài)提供了一個(gè)圖形用戶界面。整個(gè)軟件系統(tǒng)如所示。
系統(tǒng)硬件概述
在中,基于TINIm390/4002模板的開/關(guān)控制電路構(gòu)成了該接口。TINIm390/400模板提供了Ethernet網(wǎng)絡(luò)接口能力,以及通過引腳P5.0(其他引腳也可以等效工作)控制開關(guān)。N溝道MOSFET開關(guān)切換流過繼電器的電流,控制繼電器。用戶可以根據(jù)繼電器和FET的大小要求,供給不同的電壓和電流;如果不需要隔離外部電路與TINI模板的電源,則可以去掉繼電器。在開關(guān)狀態(tài)改變時(shí),二極管抑制繼電器線圈的感生電壓。為了實(shí)現(xiàn)某些新的服務(wù),如網(wǎng)絡(luò)開關(guān)控制。
TINI開關(guān)控制應(yīng)用
由四個(gè)類構(gòu)成了該應(yīng)用的開關(guān)控制和web服務(wù)器接口。PowerSwitch類通過采用TINI類中的com.dalsemi.system.BitPort應(yīng)用程序接口類,直接與硬件接口。WebWorker類直接來自Maxim的Software Developer's Kit(TINI SDK)中的TINIWebServer實(shí)例,負(fù)責(zé)為到來的HTTP連接提供服務(wù)。SwitchWorker類管理Java程序和TINI應(yīng)用之間的所有命令和狀態(tài)通信。TINIWebServer類通過綁定各個(gè)類的操作,來實(shí)現(xiàn)本應(yīng)用。
PowerSwitch類是一個(gè)連接硬件的接口,在其構(gòu)造器內(nèi)為引腳P5.0創(chuàng)建一個(gè)BitPort目標(biāo)。在該類中,可以執(zhí)行兩種函數(shù),開函數(shù)設(shè)定的引腳端口狀態(tài)是接通繼電器線圈的電壓;而關(guān)函數(shù)通過清零端口狀態(tài),來斷開繼電器線圈的電壓。中的單刀雙擲(SPDT)繼電器能夠工作于常閉或常開位置,即在這兩種位置之間切換外部電壓源。開、關(guān)函數(shù)假設(shè)電路工作于常開狀態(tài),且必須能夠被改變至常閉電路狀態(tài)。為了指示開/關(guān)是否對(duì)應(yīng)于BitPort的置位或清零函數(shù),則在該類中引入了一個(gè)外部的Boolean變量(invert),另一個(gè)函數(shù)(setInvert)要求用來初始化invert變量。所示的硬件圖描述的是常開電路。
WebWorker類提供了網(wǎng)絡(luò)和應(yīng)用之間的接口。它簡(jiǎn)單地建立和驅(qū)動(dòng)一個(gè)目標(biāo)(com.dalsemi.tininet.http.HTTPServer),該目標(biāo)依次產(chǎn)生線程,為每個(gè)到來的HTTP連接提供服務(wù)。該類取自上述TINIWebserver實(shí)例,無須作任何修改,可以在網(wǎng)絡(luò)上的任何地方接入。HTTPServer能夠提示輸入密碼,或者接受任何其他形式的控制,僅允許那些授權(quán)的用戶接入。
通過將網(wǎng)絡(luò)和硬件接口組合在一起(所示),TINIServer允許遠(yuǎn)程開關(guān)控制。例如,drive()函數(shù)通過創(chuàng)建一個(gè)WebWorker線程和網(wǎng)頁“index.htm1”,建立此web服務(wù)器。網(wǎng)頁的主要目的是為了在主機(jī)工作站上并執(zhí)行該Java程序。如果提示網(wǎng)頁僅包含靜態(tài)信息,該應(yīng)用就沒有必要?jiǎng)?chuàng)建網(wǎng)頁。提示網(wǎng)頁只需要與包含Java程序的文件目錄一起,拷貝至web服務(wù)器的根目錄下即可。
CODEBASE是一個(gè)在每個(gè)TINI芯片組設(shè)計(jì)中可以改變的網(wǎng)頁參數(shù)。Java程序使用該信息,以返回連接至某個(gè)獨(dú)立的服務(wù)器插件中的TINI應(yīng)用程序??梢詣?chuàng)建并上傳一個(gè)定制的網(wǎng)頁至任何一個(gè)安裝在現(xiàn)場(chǎng)的TINI芯片組參考設(shè)計(jì)。一個(gè)簡(jiǎn)單的方法是由應(yīng)用程序在每次運(yùn)行時(shí),創(chuàng)建該網(wǎng)頁。通過三次寫操作,CreateIndexPage函數(shù)可以創(chuàng)建文件index.html,并將IP地址插入CODEBASE部分。
1)index.write(indexTop.getBytes(),0,indexTop.length());
2)index.write(inetAddress.getLocalHost().getHostAddress().getBytes());
3)index.write(indexBottom.getBytes(),0,indexBottom.lenghth());
次和第三次寫操作是將網(wǎng)頁的靜態(tài)部分拷貝至文件中,而第二次寫操作是將IP地址拷貝至文件的CODEBASE部分。在應(yīng)用程序建立web服務(wù)器和創(chuàng)建網(wǎng)頁后,就啟動(dòng)了web服務(wù)器。它創(chuàng)建一個(gè)服務(wù)器插件,用來處理來自Java程序的進(jìn)入連接,并且在Java程序每次連接TINI應(yīng)用時(shí),調(diào)用ServiceConnection函數(shù)。
ServiceConnection函數(shù)創(chuàng)建了一個(gè)新例程SwitchWorker,并將這個(gè)插件傳給該類。SwitchWorder構(gòu)造器創(chuàng)建一個(gè)新的線程,以處理主機(jī)Java程序和TINI應(yīng)用之間的連接。ServiceConnection函數(shù)也處理下一個(gè)進(jìn)入連接,接著將控制傳給drive函數(shù)。
SwitchWorker類管理Java程序和webserver之間的所有通信,如所示,在連接被斷開之前,它不斷地循環(huán),執(zhí)行下列步驟:
停留在read(),等待一個(gè)來自Java程序的命令字節(jié);
如果命令字節(jié)為0,則斷開開關(guān);如果為1,則閉合開關(guān);
讀入當(dāng)前開關(guān)狀態(tài),回傳至Java程序。
通過分配每個(gè)命令字節(jié)的低7位來表示不同開關(guān)的狀態(tài),如所示,該運(yùn)算法則可以適用于更多的開關(guān)。保留位,用來指示只讀操作。該運(yùn)算法則也可以被擴(kuò)展,以允許在同一時(shí)刻多個(gè)Java程序連接至單個(gè)TINI webserver應(yīng)用。SwitchWorker只是簡(jiǎn)單地保持一個(gè)“監(jiān)聽向量”。每次Java程序發(fā)出一個(gè)修改開關(guān)狀態(tài)的命令,webserver就將其狀態(tài)回傳至當(dāng)前與之連接的所有Java程序。
主機(jī)Java程序
TINI類中的com.dalsemi.tininet.http.HTTPServer類是一種小巧而快速的類,但僅支持HTTP GET操作。由此產(chǎn)生的數(shù)據(jù)只能從TINI應(yīng)用到主機(jī)單向傳遞。然而,該應(yīng)用要求雙向數(shù)據(jù)傳輸。命令由主機(jī)發(fā)送至TINI webserver,而狀態(tài)由webserver發(fā)送至所有相連的主機(jī)。主機(jī)和TINI應(yīng)用之間的通信無協(xié)議開銷,單字節(jié)命令和單字節(jié)狀態(tài)允許極快的控制和狀態(tài)響應(yīng)。
主機(jī)Java程序包括兩個(gè)類,主類(SwitchControl)處理主機(jī)端的網(wǎng)絡(luò)通信和創(chuàng)建網(wǎng)頁上所有的顯示圖形單元,見;另一個(gè)類(Image Button)創(chuàng)建一個(gè)圖形撥動(dòng)按鈕,顯示對(duì)應(yīng)于按鈕狀態(tài)的兩種位圖之一,見。撥動(dòng)按鈕用于開關(guān)的控制和狀態(tài)指示應(yīng)該是足夠的,但Java程序的表現(xiàn)會(huì)因?yàn)g覽器的不同而異,因此,加入簡(jiǎn)單的開/關(guān)按鈕和一個(gè)狀態(tài)文本窗,以適應(yīng)于更多的瀏覽器。ImageButton和開/關(guān)按鈕將完成相同的控制功能,位圖和狀態(tài)窗完成相同的狀態(tài)指示功能而已。在創(chuàng)建圖形單元后,SwitchControl類將創(chuàng)建一個(gè)狀態(tài)監(jiān)測(cè)線程。該線程接著進(jìn)入休眠模式,停留于read(),等待來自于TINI應(yīng)用的狀態(tài)信息。當(dāng)線程向下運(yùn)行時(shí),ImageButton的位圖和狀態(tài)窗被刷新,接著又循環(huán)到程序的頂部,等待下的狀態(tài)字節(jié)。Java程序事件線程驅(qū)動(dòng)actionPerformed函數(shù),該函數(shù)在每次按下圖形按鈕后被調(diào)用。如果調(diào)用是由ImageButton觸發(fā)的,則它翻轉(zhuǎn)當(dāng)前狀態(tài),并向TINI發(fā)出一個(gè)開或關(guān)的命令。如果由開/關(guān)按鈕觸發(fā),則它發(fā)出一個(gè)開/關(guān)命令。ImageButton類只是一個(gè)簡(jiǎn)單的采用AWT(Abstract Window Toolkit)組件編程的范例。
結(jié)論
采用TINI實(shí)時(shí)環(huán)境、Java程序和簡(jiǎn)單的繼電路電路,就可以實(shí)現(xiàn)遠(yuǎn)程控制閉合/關(guān)斷開關(guān)。通過網(wǎng)絡(luò),可以在任何地點(diǎn)控制從照明燈到機(jī)床的各種設(shè)備。
版權(quán)與免責(zé)聲明
凡本網(wǎng)注明“出處:維庫(kù)電子市場(chǎng)網(wǎng)”的所有作品,版權(quán)均屬于維庫(kù)電子市場(chǎng)網(wǎng),轉(zhuǎn)載請(qǐng)必須注明維庫(kù)電子市場(chǎng)網(wǎng),http://udpf.com.cn,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。
如涉及作品內(nèi)容、版權(quán)等問題,請(qǐng)?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- 什么是氫氧燃料電池,氫氧燃料電池的知識(shí)介紹2025/8/29 16:58:56
- SQL核心知識(shí)點(diǎn)總結(jié)2025/8/11 16:51:36
- 等電位端子箱是什么_等電位端子箱的作用2025/8/1 11:36:41
- 基于PID控制和重復(fù)控制的復(fù)合控制策略2025/7/29 16:58:24
- 什么是樹莓派?一文快速了解樹莓派基礎(chǔ)知識(shí)2025/6/18 16:30:52









