新聞中心

EEPW首頁(yè) > 消費(fèi)電子 > 設(shè)計(jì)應(yīng)用 > 利用TINI平臺(tái)設(shè)計(jì)網(wǎng)絡(luò)On/Off開(kāi)關(guān)(圖)

利用TINI平臺(tái)設(shè)計(jì)網(wǎng)絡(luò)On/Off開(kāi)關(guān)(圖)

——
作者:Maxim公司北京辦事處 時(shí)間:2007-02-06 來(lái)源: 收藏
tini平臺(tái)可提供設(shè)計(jì)ip網(wǎng)絡(luò)繼電器所需的tcp/ip棧和本地控制,java運(yùn)行環(huán)境可以大大降低設(shè)計(jì)工作的復(fù)雜度,利用java程序,可以通過(guò)網(wǎng)絡(luò)遠(yuǎn)程訪問(wèn)控制小型傳感器和執(zhí)行器。本文介紹了一個(gè)ip on/off開(kāi)關(guān),采用一個(gè)簡(jiǎn)單的繼電器電路和tinim390/400驗(yàn)證模塊構(gòu)建,還可以延伸到其他遠(yuǎn)程監(jiān)視和控制應(yīng)用中。


系統(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è)圖形用戶(hù)界面。整個(gè)軟件系統(tǒng)如圖1所示。

本文引用地址:http://butianyuan.cn/article/22753.htm


系統(tǒng)硬件概述
  在圖2中,基于tinim390/4002模板的開(kāi)/關(guān)控制電路構(gòu)成了該接口。tinim390/400模板提供了ethernet網(wǎng)絡(luò)接口能力,以及通過(guò)引腳p5.0(其他引腳也可以等效工作)控制開(kāi)關(guān)。n溝道m(xù)osfet開(kāi)關(guān)切換流過(guò)繼電器的電流,控制繼電器。用戶(hù)可以根據(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 developers 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)繼電器線圈的電壓。圖2中的單刀雙擲(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變量。圖2所示的硬件圖描述的是常開(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)的用戶(hù)接入。

  通過(guò)將網(wǎng)絡(luò)和硬件接口組合在一起(圖3所示),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之間的所有通信,如圖4所示,在連接被斷開(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),如圖5所示,該運(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)圖6;另一個(gè)類(lèi)(image button)創(chuàng)建一個(gè)圖形撥動(dòng)按鈕,顯示對(duì)應(yīng)于按鈕狀態(tài)的兩種位圖之一,見(jiàn)圖7。撥動(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è)備。

tcp/ip相關(guān)文章:tcp/ip是什么




關(guān)鍵詞:

評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉