<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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


          系統(tǒng)軟件概述
            com.dalsemi.tininet.http.httpserver類允許開關(guān)控制應(yīng)用程序充當(dāng)簡單的web服務(wù)器,將java程序傳遞給遠(yuǎn)端主機。在被主機內(nèi)部瀏覽器執(zhí)行后,該java程序就建立了一個與tini應(yīng)用程序交換命令和狀態(tài)的雙向tcp連接,也為顯示控制和狀態(tài)提供了一個圖形用戶界面。整個軟件系統(tǒng)如圖1所示。

          本文引用地址:http://www.ex-cimer.com/article/22753.htm


          系統(tǒng)硬件概述
            在圖2中,基于tinim390/4002模板的開/關(guān)控制電路構(gòu)成了該接口。tinim390/400模板提供了ethernet網(wǎng)絡(luò)接口能力,以及通過引腳p5.0(其他引腳也可以等效工作)控制開關(guān)。n溝道m(xù)osfet開關(guān)切換流過繼電器的電流,控制繼電器。用戶可以根據(jù)繼電器和fet的大小要求,供給不同的電壓和電流;如果不需要隔離外部電路與tini模板的電源,則可以去掉繼電器。在開關(guān)狀態(tài)改變時,二極管抑制繼電器線圈的感生電壓。為了實現(xiàn)某些新的服務(wù),如網(wǎng)絡(luò)開關(guān)控制。


          tini開關(guān)控制應(yīng)用
            由四個類構(gòu)成了該應(yīng)用的開關(guān)控制和web服務(wù)器接口。powerswitch類通過采用tini類中的com.dalsemi.system.bitport應(yīng)用程序接口類,直接與硬件接口。webworker類直接來自maxim的software developers kit(tini sdk)中的tiniwebserver實例,負(fù)責(zé)為到來的http連接提供服務(wù)。switchworker類管理java程序和tini應(yīng)用之間的所有命令和狀態(tài)通信。tiniwebserver類通過綁定各個類的操作,來實現(xiàn)本應(yīng)用。

            powerswitch類是一個連接硬件的接口,在其構(gòu)造器內(nèi)為引腳p5.0創(chuàng)建一個bitport目標(biāo)。在該類中,可以執(zhí)行兩種函數(shù),開函數(shù)設(shè)定的引腳端口狀態(tài)是接通繼電器線圈的電壓;而關(guān)函數(shù)通過清零端口狀態(tài),來斷開繼電器線圈的電壓。圖2中的單刀雙擲(spdt)繼電器能夠工作于常閉或常開位置,即在這兩種位置之間切換外部電壓源。開、關(guān)函數(shù)假設(shè)電路工作于常開狀態(tài),且必須能夠被改變至常閉電路狀態(tài)。為了指示開/關(guān)是否對應(yīng)于bitport的置位或清零函數(shù),則在該類中引入了一個外部的boolean變量(invert),另一個函數(shù)(setinvert)要求用來初始化invert變量。圖2所示的硬件圖描述的是常開電路。

            webworker類提供了網(wǎng)絡(luò)和應(yīng)用之間的接口。它簡單地建立和驅(qū)動一個目標(biāo)(com.dalsemi.tininet.http.httpserver),該目標(biāo)依次產(chǎn)生線程,為每個到來的http連接提供服務(wù)。該類取自上述tiniwebserver實例,無須作任何修改,可以在網(wǎng)絡(luò)上的任何地方接入。httpserver能夠提示輸入密碼,或者接受任何其他形式的控制,僅允許那些授權(quán)的用戶接入。

            通過將網(wǎng)絡(luò)和硬件接口組合在一起(圖3所示),tiniserver允許遠(yuǎn)程開關(guān)控制。例如,drive()函數(shù)通過創(chuàng)建一個webworker線程和網(wǎng)頁“index.htm1”,建立此web服務(wù)器。網(wǎng)頁的主要目的是為了在主機工作站上下載并執(zhí)行該java程序。如果提示網(wǎng)頁僅包含靜態(tài)信息,該應(yīng)用就沒有必要創(chuàng)建網(wǎng)頁。提示網(wǎng)頁只需要與包含java程序的文件目錄一起,拷貝至web服務(wù)器的根目錄下即可。

            codebase是一個在每個tini芯片組設(shè)計中可以改變的網(wǎng)頁參數(shù)。java程序使用該信息,以返回連接至某個獨立的服務(wù)器插件中的tini應(yīng)用程序??梢詣?chuàng)建并上傳一個定制的網(wǎng)頁至任何一個安裝在現(xiàn)場的tini芯片組參考設(shè)計。一個簡單的方法是由應(yīng)用程序在每次運行時,創(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)頁后,就啟動了web服務(wù)器。它創(chuàng)建一個服務(wù)器插件,用來處理來自下載java程序的進入連接,并且在java程序每次連接tini應(yīng)用時,調(diào)用serviceconnection函數(shù)。

            serviceconnection函數(shù)創(chuàng)建了一個新例程switchworker,并將這個插件傳給該類。switchworder構(gòu)造器創(chuàng)建一個新的線程,以處理主機java程序和tini應(yīng)用之間的連接。serviceconnection函數(shù)也處理下一個進入連接,接著將控制傳給drive函數(shù)。

            switchworker類管理java程序和webserver之間的所有通信,如圖4所示,在連接被斷開之前,它不斷地循環(huán),執(zhí)行下列步驟:

            停留在read(),等待一個來自java程序的命令字節(jié);
            如果命令字節(jié)為0,則斷開開關(guān);如果為1,則閉合開關(guān);

            讀入當(dāng)前開關(guān)狀態(tài),回傳至java程序。

            通過分配每個命令字節(jié)的低7位來表示不同開關(guān)的狀態(tài),如圖5所示,該運算法則可以適用于更多的開關(guān)。保留最高位,用來指示只讀操作。該運算法則也可以被擴展,以允許在同一時刻多個java程序連接至單個tini webserver應(yīng)用。switchworker只是簡單地保持一個“監(jiān)聽向量”。每次java程序發(fā)出一個修改開關(guān)狀態(tài)的命令,webserver就將其狀態(tài)回傳至當(dāng)前與之連接的所有java程序。


          主機java程序
            tini類中的com.dalsemi.tininet.http.httpserver類是一種小巧而快速的類,但僅支持http get操作。由此產(chǎn)生的數(shù)據(jù)只能從tini應(yīng)用到主機單向傳遞。然而,該應(yīng)用要求雙向數(shù)據(jù)傳輸。命令由主機發(fā)送至tini webserver,而狀態(tài)由webserver發(fā)送至所有相連的主機。主機和tini應(yīng)用之間的通信無協(xié)議開銷,單字節(jié)命令和單字節(jié)狀態(tài)允許極快的控制和狀態(tài)響應(yīng)。

            主機java程序包括兩個類,主類(switchcontrol)處理主機端的網(wǎng)絡(luò)通信和創(chuàng)建網(wǎng)頁上所有的顯示圖形單元,見圖6;另一個類(image button)創(chuàng)建一個圖形撥動按鈕,顯示對應(yīng)于按鈕狀態(tài)的兩種位圖之一,見圖7。撥動按鈕用于開關(guān)的控制和狀態(tài)指示應(yīng)該是足夠的,但java程序的表現(xiàn)會因瀏覽器的不同而異,因此,加入簡單的開/關(guān)按鈕和一個狀態(tài)文本窗,以適應(yīng)于更多的瀏覽器。imagebutton和開/關(guān)按鈕將完成相同的控制功能,位圖和狀態(tài)窗完成相同的狀態(tài)指示功能而已。在創(chuàng)建圖形單元后,switchcontrol類將創(chuàng)建一個狀態(tài)監(jiān)測線程。該線程接著進入休眠模式,停留于read(),等待來自于tini應(yīng)用的狀態(tài)信息。當(dāng)線程向下運行時,imagebutton的位圖和狀態(tài)窗被刷新,接著又循環(huán)到程序的頂部,等待下一次的狀態(tài)字節(jié)。java程序事件線程驅(qū)動actionperformed函數(shù),該函數(shù)在每次按下圖形按鈕后被調(diào)用。如果調(diào)用是由imagebutton觸發(fā)的,則它翻轉(zhuǎn)當(dāng)前狀態(tài),并向tini發(fā)出一個開或關(guān)的命令。如果由開/關(guān)按鈕觸發(fā),則它發(fā)出一個開/關(guān)命令。imagebutton類只是一個簡單的采用awt(abstract window toolkit)組件編程的范例。


          結(jié)論
            采用tini實時環(huán)境、java程序和簡單的繼電路電路,就可以實現(xiàn)遠(yuǎn)程控制閉合/關(guān)斷開關(guān)。通過網(wǎng)絡(luò),可以在任何地點控制從照明燈到機床的各種設(shè)備。

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




          關(guān)鍵詞:

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();