利用TINI平臺設(shè)計網(wǎng)絡On/Off開關(guān)(圖)
系統(tǒng)軟件概述
com.dalsemi.tininet.http.httpserver類允許開關(guān)控制應用程序充當簡單的web服務器,將java程序傳遞給遠端主機。在被主機內(nèi)部瀏覽器執(zhí)行后,該java程序就建立了一個與tini應用程序交換命令和狀態(tài)的雙向tcp連接,也為顯示控制和狀態(tài)提供了一個圖形用戶界面。整個軟件系統(tǒng)如圖1所示。
系統(tǒng)硬件概述
在圖2中,基于tinim390/4002模板的開/關(guān)控制電路構(gòu)成了該接口。tinim390/400模板提供了ethernet網(wǎng)絡接口能力,以及通過引腳p5.0(其他引腳也可以等效工作)控制開關(guān)。n溝道m(xù)osfet開關(guān)切換流過繼電器的電流,控制繼電器。用戶可以根據(jù)繼電器和fet的大小要求,供給不同的電壓和電流;如果不需要隔離外部電路與tini模板的電源,則可以去掉繼電器。在開關(guān)狀態(tài)改變時,二極管抑制繼電器線圈的感生電壓。為了實現(xiàn)某些新的服務,如網(wǎng)絡開關(guān)控制。
tini開關(guān)控制應用
由四個類構(gòu)成了該應用的開關(guān)控制和web服務器接口。powerswitch類通過采用tini類中的com.dalsemi.system.bitport應用程序接口類,直接與硬件接口。webworker類直接來自maxim的software developers kit(tini sdk)中的tiniwebserver實例,負責為到來的http連接提供服務。switchworker類管理java程序和tini應用之間的所有命令和狀態(tài)通信。tiniwebserver類通過綁定各個類的操作,來實現(xiàn)本應用。
powerswitch類是一個連接硬件的接口,在其構(gòu)造器內(nèi)為引腳p5.0創(chuàng)建一個bitport目標。在該類中,可以執(zhí)行兩種函數(shù),開函數(shù)設(shè)定的引腳端口狀態(tài)是接通繼電器線圈的電壓;而關(guān)函數(shù)通過清零端口狀態(tài),來斷開繼電器線圈的電壓。圖2中的單刀雙擲(spdt)繼電器能夠工作于常閉或常開位置,即在這兩種位置之間切換外部電壓源。開、關(guān)函數(shù)假設(shè)電路工作于常開狀態(tài),且必須能夠被改變至常閉電路狀態(tài)。為了指示開/關(guān)是否對應于bitport的置位或清零函數(shù),則在該類中引入了一個外部的boolean變量(invert),另一個函數(shù)(setinvert)要求用來初始化invert變量。圖2所示的硬件圖描述的是常開電路。
webworker類提供了網(wǎng)絡和應用之間的接口。它簡單地建立和驅(qū)動一個目標(com.dalsemi.tininet.http.httpserver),該目標依次產(chǎn)生線程,為每個到來的http連接提供服務。該類取自上述tiniwebserver實例,無須作任何修改,可以在網(wǎng)絡上的任何地方接入。httpserver能夠提示輸入密碼,或者接受任何其他形式的控制,僅允許那些授權(quán)的用戶接入。
通過將網(wǎng)絡和硬件接口組合在一起(圖3所示),tiniserver允許遠程開關(guān)控制。例如,drive()函數(shù)通過創(chuàng)建一個webworker線程和網(wǎng)頁“index.htm1”,建立此web服務器。網(wǎng)頁的主要目的是為了在主機工作站上下載并執(zhí)行該java程序。如果提示網(wǎng)頁僅包含靜態(tài)信息,該應用就沒有必要創(chuàng)建網(wǎng)頁。提示網(wǎng)頁只需要與包含java程序的文件目錄一起,拷貝至web服務器的根目錄下即可。
codebase是一個在每個tini芯片組設(shè)計中可以改變的網(wǎng)頁參數(shù)。java程序使用該信息,以返回連接至某個獨立的服務器插件中的tini應用程序??梢詣?chuàng)建并上傳一個定制的網(wǎng)頁至任何一個安裝在現(xiàn)場的tini芯片組參考設(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部分。在應用程序建立web服務器和創(chuàng)建網(wǎng)頁后,就啟動了web服務器。它創(chuàng)建一個服務器插件,用來處理來自下載java程序的進入連接,并且在java程序每次連接tini應用時,調(diào)用serviceconnection函數(shù)。
serviceconnection函數(shù)創(chuàng)建了一個新例程switchworker,并將這個插件傳給該類。switchworder構(gòu)造器創(chuàng)建一個新的線程,以處理主機java程序和tini應用之間的連接。serviceconnection函數(shù)也處理下一個進入連接,接著將控制傳給drive函數(shù)。
switchworker類管理java程序和webserver之間的所有通信,如圖4所示,在連接被斷開之前,它不斷地循環(huán),執(zhí)行下列步驟:
停留在read(),等待一個來自java程序的命令字節(jié);
如果命令字節(jié)為0,則斷開開關(guān);如果為1,則閉合開關(guān);
讀入當前開關(guān)狀態(tài),回傳至java程序。
通過分配每個命令字節(jié)的低7位來表示不同開關(guān)的狀態(tài),如圖5所示,該運算法則可以適用于更多的開關(guān)。保留最高位,用來指示只讀操作。該運算法則也可以被擴展,以允許在同一時刻多個java程序連接至單個tini webserver應用。switchworker只是簡單地保持一個“監(jiān)聽向量”。每次java程序發(fā)出一個修改開關(guān)狀態(tài)的命令,webserver就將其狀態(tài)回傳至當前與之連接的所有java程序。
主機java程序
tini類中的com.dalsemi.tininet.http.httpserver類是一種小巧而快速的類,但僅支持http get操作。由此產(chǎn)生的數(shù)據(jù)只能從tini應用到主機單向傳遞。然而,該應用要求雙向數(shù)據(jù)傳輸。命令由主機發(fā)送至tini webserver,而狀態(tài)由webserver發(fā)送至所有相連的主機。主機和tini應用之間的通信無協(xié)議開銷,單字節(jié)命令和單字節(jié)狀態(tài)允許極快的控制和狀態(tài)響應。
主機java程序包括兩個類,主類(switchcontrol)處理主機端的網(wǎng)絡通信和創(chuàng)建網(wǎng)頁上所有的顯示圖形單元,見圖6;另一個類(image button)創(chuàng)建一個圖形撥動按鈕,顯示對應于按鈕狀態(tài)的兩種位圖之一,見圖7。撥動按鈕用于開關(guān)的控制和狀態(tài)指示應該是足夠的,但java程序的表現(xiàn)會因瀏覽器的不同而異,因此,加入簡單的開/關(guān)按鈕和一個狀態(tài)文本窗,以適應于更多的瀏覽器。imagebutton和開/關(guān)按鈕將完成相同的控制功能,位圖和狀態(tài)窗完成相同的狀態(tài)指示功能而已。在創(chuàng)建圖形單元后,switchcontrol類將創(chuàng)建一個狀態(tài)監(jiān)測線程。該線程接著進入休眠模式,停留于read(),等待來自于tini應用的狀態(tài)信息。當線程向下運行時,imagebutton的位圖和狀態(tài)窗被刷新,接著又循環(huán)到程序的頂部,等待下一次的狀態(tài)字節(jié)。java程序事件線程驅(qū)動actionperformed函數(shù),該函數(shù)在每次按下圖形按鈕后被調(diào)用。如果調(diào)用是由imagebutton觸發(fā)的,則它翻轉(zhuǎn)當前狀態(tài),并向tini發(fā)出一個開或關(guān)的命令。如果由開/關(guān)按鈕觸發(fā),則它發(fā)出一個開/關(guān)命令。imagebutton類只是一個簡單的采用awt(abstract window toolkit)組件編程的范例。
結(jié)論
采用tini實時環(huán)境、java程序和簡單的繼電路電路,就可以實現(xiàn)遠程控制閉合/關(guān)斷開關(guān)。通過網(wǎng)絡,可以在任何地點控制從照明燈到機床的各種設(shè)備。
tcp/ip相關(guān)文章:tcp/ip是什么
評論