利用TINI平臺(tái)設(shè)計(jì)網(wǎng)絡(luò)On/Off開(kāi)關(guān)(圖)
出處:liangby 發(fā)布于:2007-04-16 20:03:34
系統(tǒng)軟件概述
com.dalsemi.tininet.http.HTTPServer類(lèi)允許開(kāi)關(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模板的開(kāi)/關(guān)控制電路構(gòu)成了該接口。TINIm390/400模板提供了Ethernet網(wǎng)絡(luò)接口能力,以及通過(guò)引腳P5.0(其他引腳也可以等效工作)控制開(kāi)關(guān)。N溝道MOSFET開(kāi)關(guān)切換流過(guò)繼電器的電流,控制繼電器。用戶可以根據(jù)繼電器和FET的大小要求,供給不同的電壓和電流;如果不需要隔離外部電路與TINI模板的電源,則可以去掉繼電器。在開(kāi)關(guān)狀態(tài)改變時(shí),二極管抑制繼電器線圈的感生電壓。為了實(shí)現(xiàn)某些新的服務(wù),如網(wǎng)絡(luò)開(kāi)關(guān)控制。
TINI開(kāi)關(guān)控制應(yīng)用
由四個(gè)類(lèi)構(gòu)成了該應(yīng)用的開(kāi)關(guān)控制和web服務(wù)器接口。PowerSwitch類(lèi)通過(guò)采用TINI類(lèi)中的com.dalsemi.system.BitPort應(yīng)用程序接口類(lèi),直接與硬件接口。WebWorker類(lèi)直接來(lái)自Maxim的Software Developer's Kit(TINI SDK)中的TINIWebServer實(shí)例,負(fù)責(zé)為到來(lái)的HTTP連接提供服務(wù)。SwitchWorker類(lèi)管理Java程序和TINI應(yīng)用之間的所有命令和狀態(tài)通信。TINIWebServer類(lèi)通過(guò)綁定各個(gè)類(lèi)的操作,來(lái)實(shí)現(xiàn)本應(yīng)用。
PowerSwitch類(lèi)是一個(gè)連接硬件的接口,在其構(gòu)造器內(nèi)為引腳P5.0創(chuàng)建一個(gè)BitPort目標(biāo)。在該類(lèi)中,可以執(zhí)行兩種函數(shù),開(kāi)函數(shù)設(shè)定的引腳端口狀態(tài)是接通繼電器線圈的電壓;而關(guān)函數(shù)通過(guò)清零端口狀態(tài),來(lái)斷開(kāi)繼電器線圈的電壓。中的單刀雙擲(SPDT)繼電器能夠工作于常閉或常開(kāi)位置,即在這兩種位置之間切換外部電壓源。開(kāi)、關(guān)函數(shù)假設(shè)電路工作于常開(kāi)狀態(tài),且必須能夠被改變至常閉電路狀態(tài)。為了指示開(kāi)/關(guān)是否對(duì)應(yīng)于BitPort的置位或清零函數(shù),則在該類(lèi)中引入了一個(gè)外部的Boolean變量(invert),另一個(gè)函數(shù)(setInvert)要求用來(lái)初始化invert變量。所示的硬件圖描述的是常開(kāi)電路。
WebWorker類(lèi)提供了網(wǎng)絡(luò)和應(yīng)用之間的接口。它簡(jiǎn)單地建立和驅(qū)動(dòng)一個(gè)目標(biāo)(com.dalsemi.tininet.http.HTTPServer),該目標(biāo)依次產(chǎn)生線程,為每個(gè)到來(lái)的HTTP連接提供服務(wù)。該類(lèi)取自上述TINIWebserver實(shí)例,無(wú)須作任何修改,可以在網(wǎng)絡(luò)上的任何地方接入。HTTPServer能夠提示輸入密碼,或者接受任何其他形式的控制,僅允許那些授權(quán)的用戶接入。
通過(guò)將網(wǎng)絡(luò)和硬件接口組合在一起(所示),TINIServer允許遠(yuǎn)程開(kāi)關(guān)控制。例如,drive()函數(shù)通過(guò)創(chuàng)建一個(gè)WebWorker線程和網(wǎng)頁(yè)“index.htm1”,建立此web服務(wù)器。網(wǎng)頁(yè)的主要目的是為了在主機(jī)工作站上并執(zhí)行該Java程序。如果提示網(wǎng)頁(yè)僅包含靜態(tài)信息,該應(yīng)用就沒(méi)有必要?jiǎng)?chuàng)建網(wǎng)頁(yè)。提示網(wǎng)頁(yè)只需要與包含Java程序的文件目錄一起,拷貝至web服務(wù)器的根目錄下即可。
CODEBASE是一個(gè)在每個(gè)TINI芯片組設(shè)計(jì)中可以改變的網(wǎng)頁(yè)參數(shù)。Java程序使用該信息,以返回連接至某個(gè)獨(dú)立的服務(wù)器插件中的TINI應(yīng)用程序??梢詣?chuàng)建并上傳一個(gè)定制的網(wǎng)頁(yè)至任何一個(gè)安裝在現(xiàn)場(chǎng)的TINI芯片組參考設(shè)計(jì)。一個(gè)簡(jiǎn)單的方法是由應(yīng)用程序在每次運(yùn)行時(shí),創(chuàng)建該網(wǎng)頁(yè)。通過(guò)三次寫(xiě)操作,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());
次和第三次寫(xiě)操作是將網(wǎng)頁(yè)的靜態(tài)部分拷貝至文件中,而第二次寫(xiě)操作是將IP地址拷貝至文件的CODEBASE部分。在應(yīng)用程序建立web服務(wù)器和創(chuàng)建網(wǎng)頁(yè)后,就啟動(dòng)了web服務(wù)器。它創(chuàng)建一個(gè)服務(wù)器插件,用來(lái)處理來(lái)自Java程序的進(jìn)入連接,并且在Java程序每次連接TINI應(yīng)用時(shí),調(diào)用ServiceConnection函數(shù)。
ServiceConnection函數(shù)創(chuàng)建了一個(gè)新例程SwitchWorker,并將這個(gè)插件傳給該類(lèi)。SwitchWorder構(gòu)造器創(chuàng)建一個(gè)新的線程,以處理主機(jī)Java程序和TINI應(yīng)用之間的連接。ServiceConnection函數(shù)也處理下一個(gè)進(jìn)入連接,接著將控制傳給drive函數(shù)。
SwitchWorker類(lèi)管理Java程序和webserver之間的所有通信,如所示,在連接被斷開(kāi)之前,它不斷地循環(huán),執(zhí)行下列步驟:
停留在read(),等待一個(gè)來(lái)自Java程序的命令字節(jié);
如果命令字節(jié)為0,則斷開(kāi)開(kāi)關(guān);如果為1,則閉合開(kāi)關(guān);
讀入當(dāng)前開(kāi)關(guān)狀態(tài),回傳至Java程序。
通過(guò)分配每個(gè)命令字節(jié)的低7位來(lái)表示不同開(kāi)關(guān)的狀態(tài),如所示,該運(yùn)算法則可以適用于更多的開(kāi)關(guān)。保留位,用來(lái)指示只讀操作。該運(yùn)算法則也可以被擴(kuò)展,以允許在同一時(shí)刻多個(gè)Java程序連接至單個(gè)TINI webserver應(yīng)用。SwitchWorker只是簡(jiǎn)單地保持一個(gè)“監(jiān)聽(tīng)向量”。每次Java程序發(fā)出一個(gè)修改開(kāi)關(guān)狀態(tài)的命令,webserver就將其狀態(tài)回傳至當(dāng)前與之連接的所有Java程序。
主機(jī)Java程序
TINI類(lèi)中的com.dalsemi.tininet.http.HTTPServer類(lèi)是一種小巧而快速的類(lèi),但僅支持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)用之間的通信無(wú)協(xié)議開(kāi)銷(xiāo),單字節(jié)命令和單字節(jié)狀態(tài)允許極快的控制和狀態(tài)響應(yīng)。
主機(jī)Java程序包括兩個(gè)類(lèi),主類(lèi)(SwitchControl)處理主機(jī)端的網(wǎng)絡(luò)通信和創(chuàng)建網(wǎng)頁(yè)上所有的顯示圖形單元,見(jiàn);另一個(gè)類(lèi)(Image Button)創(chuàng)建一個(gè)圖形撥動(dòng)按鈕,顯示對(duì)應(yīng)于按鈕狀態(tài)的兩種位圖之一,見(jiàn)。撥動(dòng)按鈕用于開(kāi)關(guān)的控制和狀態(tài)指示應(yīng)該是足夠的,但Java程序的表現(xiàn)會(huì)因?yàn)g覽器的不同而異,因此,加入簡(jiǎn)單的開(kāi)/關(guān)按鈕和一個(gè)狀態(tài)文本窗,以適應(yīng)于更多的瀏覽器。ImageButton和開(kāi)/關(guān)按鈕將完成相同的控制功能,位圖和狀態(tài)窗完成相同的狀態(tài)指示功能而已。在創(chuàng)建圖形單元后,SwitchControl類(lèi)將創(chuàng)建一個(gè)狀態(tài)監(jiān)測(cè)線程。該線程接著進(jìn)入休眠模式,停留于read(),等待來(lái)自于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è)開(kāi)或關(guān)的命令。如果由開(kāi)/關(guān)按鈕觸發(fā),則它發(fā)出一個(gè)開(kāi)/關(guān)命令。ImageButton類(lèi)只是一個(gè)簡(jiǎn)單的采用AWT(Abstract Window Toolkit)組件編程的范例。
結(jié)論
采用TINI實(shí)時(shí)環(huán)境、Java程序和簡(jiǎn)單的繼電路電路,就可以實(shí)現(xiàn)遠(yuǎn)程控制閉合/關(guān)斷開(kāi)關(guān)。通過(guò)網(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://www.hbjingang.com,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類(lèi)作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。
如涉及作品內(nèi)容、版權(quán)等問(wè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
- 什么是樹(shù)莓派?一文快速了解樹(shù)莓派基礎(chǔ)知識(shí)2025/6/18 16:30:52
- 編碼器的工作原理及作用1
- 超強(qiáng)整理!PCB設(shè)計(jì)之電流與線寬的關(guān)系2
- 三星(SAMSUNG)貼片電容規(guī)格對(duì)照表3
- 電腦藍(lán)屏代碼大全4
- 國(guó)標(biāo)委發(fā)布《電動(dòng)汽車(chē)安全要求第3部分:人員觸電防護(hù)》第1號(hào)修改單5
- 通俗易懂談上拉電阻與下拉電阻6
- 繼電器的工作原理以及驅(qū)動(dòng)電路7
- 電容單位8
- 跟我學(xué)51單片機(jī)(三):?jiǎn)纹瑱C(jī)串口通信實(shí)例9
- 一種三極管開(kāi)關(guān)電路設(shè)計(jì)10
- 高速PCB信號(hào)完整性(SI)設(shè)計(jì)核心實(shí)操規(guī)范
- 鎖相環(huán)(PLL)中的環(huán)路濾波器:參數(shù)計(jì)算與穩(wěn)定性分析
- MOSFET反向恢復(fù)特性對(duì)系統(tǒng)的影響
- 電源IC在惡劣環(huán)境中的防護(hù)設(shè)計(jì)
- 連接器耐腐蝕性能測(cè)試方法
- PCB電磁兼容(EMC)設(shè)計(jì)與干擾抑制核心實(shí)操規(guī)范
- 用于相位噪聲測(cè)量的低通濾波器設(shè)計(jì)與本振凈化技術(shù)
- MOSFET在高頻開(kāi)關(guān)中的EMI問(wèn)題
- 電源IC在便攜式設(shè)備中的設(shè)計(jì)要點(diǎn)
- 連接器結(jié)構(gòu)設(shè)計(jì)常見(jiàn)問(wèn)題分析









