新聞中心

        EEPW首頁 > 手機與無線通信 > 設計應用 > 異步串行接口與以太網服務器的連接

        異步串行接口與以太網服務器的連接

        作者: 時間:2004-12-07 來源:網絡 收藏
        摘要:提供一種簡便、經濟的方法,通過TINI平臺實現(xiàn)設備與。一旦設備,就能提供TINI Web服務。

        關鍵詞: TINI

        很多電子設備利用與其它設備進行通信,其中有溫度調節(jié)器、POS機、遠程監(jiān)控儀、條碼掃描儀、票據(jù)打印機、射頻標簽收發(fā)器、血壓計及其它現(xiàn)場使用的測試設備和新型自動化設備。大多數(shù)設備與外部的通信是通過串口進行的,不能直接到大型計算機網絡,無法滿足TCP/IP連接和以太網通信的需求。由于成本和時間問題,很少有人選擇對系統(tǒng)進行重新設備的途徑。利用本文介紹的基于DS80C390或DS80C400微控制器的TINI平臺,可以將孤立的串行設備連接到以太網。

        1 TINI和網絡

        TINI(微網接口)是Dallas Semiconductor開發(fā)的一種技術平臺,目的是協(xié)助用戶快速整合DS80C390/DS80C400網絡微控制器的研發(fā),TINI定義了一個芯片組,包含一個嵌入式操作系統(tǒng),其中整合了經過高度優(yōu)化的Java運行環(huán)境。Java編程者可從其中獲得一般的嵌入式開發(fā)中不多見的強大功能:多線程、無和單元收集、繼承性、虛擬化、跨平臺能力 、強大的網絡支持,以及―最后但很重要―大量免費的開發(fā)工具。TINI使用乾通常不直接面對匯編代碼。不過,為了優(yōu)化嚴格要求速度的通道或者訪問底層硬件,同時也支持并鼓勵本地語言子程序(TINI操作系統(tǒng)用本地代碼寫成,因此,串行I/O的吞吐率和現(xiàn)代PC沒有明顯差異)。除完全支持java.net包外,TINI Java運行環(huán)境還包含一個完整實現(xiàn)的javax.com子系統(tǒng)。通過Java可毫不費力地訪問TCP/IP和串行口,因此,TINI系統(tǒng)可非常容易地用來實現(xiàn)串行口-以太網橋。

        下面的例子中,TINIm390驗證模塊(放置在E10插槽)是DS80C390 TINI開發(fā)平臺的硬件部分(TINIm400是配合DS80C400制作的)。除了SRAM、Flash、以太網、CAN總線、1-Wire等,系統(tǒng)還有四個串口,其中DS80C390內部包括兩個UART,另外兩個是擴充的(采用一片16550選配件)。需要注意的是,E10插座上的兩個串行連接器都被接到了serial0,它們只是在DTE/DCE引腳安排上有所差異。詳細資料請參閱《TINI特性和開發(fā)指南》,PDF文件可以從http://www.ibutton.com/TINI/book.html下載。

        2 范例

        下面介紹兩具具體應用,并從一個普通的串行口-以太網程序中摘錄片段出來。經過修改,它幾乎可適應于各種應用。這些范例利用TINIm390/400驗證模塊搭建而成,如圖1所示。

        可以把TINI驗證模塊看成“黑盒子”,將多個串行設備掛接到以太網。根據(jù)最終設備的需要,TINI可以讓數(shù)據(jù)流直通,也以對數(shù)據(jù)進行解析、翻譯或修改。盡管設計人員可以在TINIm390/400的開發(fā)器外殼上運行這些范例,但更合理的做法將其駐留于內存之中,掉電之后還能夠自啟動,并利用其它一些TINI構造技術使最終產品更加牢靠。如果想修改這些范例,需要具備一些基本的網絡知識和編程經驗。樣例工作代碼也可以Dallas公司ftp站點(ftp://dalsemi.com)下載。

        (1)虛擬調制解調器

        虛擬調制解調器(Modem)利用TINIm390/400和TCP/IP連接,替代特殊調制器和電話線。假定有一個舊設備,比如某工廠的“機器狀態(tài)監(jiān)視器”,它利用一個調制解調器,一天之內數(shù)次撥號到一個中央,報告機器的狀態(tài)、負載和效率數(shù)據(jù)。為了削減端日益增長的調制解調器庫,并利用現(xiàn)有的LAN取代連接到設備的電話線,我們可以重寫軟件以支持TCP/IP,并且用TINI虛擬調制解調器取代每個機器上原有的調制解調器。這樣,機器狀態(tài)監(jiān)視器就不必再作任何修改,對于最終設備而言,虛擬調制解調器的使用和一個真正的調制解調器完全一樣。

        除了上述配置,虛擬調制解調器當然也可以成對使用。如果雙方都使用虛擬調制解調器,就無須對服務器軟件作任何改動,TINI模塊可直接替換現(xiàn)有的調制解調器。在此情況之下,虛擬調制解調器每次接到“AID”調制解調器撥號命令時,實際建立的是TCP連接。“ATH”斷開命令關閉TCP連接。軟件也實現(xiàn)一系列其它的經典AT調制解調器命令,并被諸如Microsoft Windows之類的網絡系統(tǒng)認作真調制解調器,此外,虛擬調制解調器還可以偵聽TCP端口,當收到“呼叫”信號時,向終端設備發(fā)出“振鈴”。

        下面的代碼片段顯示了如何對TINIm390上的串行口進行初始化:

        public static void man(String args[]){

        TINIOS.setSerialBootMessagesState(false);

        TINIOS.setDebugMessagesState(false);

        TINIOS.setConsoleOutputEnabled(false);

        System.out.println("Connecting to serial0 at 9600bps," "listening on TCP port 8001");

        try{

        CommPortIdentifier portId=CommPortIdentifier.getPortIdentifier("seria10");

        SerialPort port=(SerialPort)=(SerialPort)portId.open("VmodemTINI",10000);

        TINIOS.estRTSCTSFlowControlEnable(1,false);

        TINIOS.setRTSCTSFlowControlEnable(0,true);

        TCPSerialVirtualModem modem=new TCPSerial VirtualModem(port,/*Comm speed */9600,/*TCP Port */8001);

        Modem.processIuput();

        }

        catch (Excepiton e){

        System.out.println("Exception:+e.toString());

        }

        }

        這段代碼首先禁止掉所有來自TINI OS的調試輸出――TINI上的標準慣例。獲得一個端口號后,打開這個端口(如果端口正在被另一個應用使用,第二個參數(shù)指明等待多久),接下來,設置硬件流控制狀態(tài)。由于TINIm390僅有一套RTS/CTS線用于串口0和1,在目標端口使用它們之前,程序首先應該關掉其它端口上的流控制,下面,就是一個Java虛擬調制解調器范例。

        虛擬調制解調器類似包含一個AT命令解釋器(未在此示出,盡管到目前為止,它是本范例中最大的一部分)和網絡代碼。下面的代碼用來設置串口位速率、數(shù)據(jù)和停止位,以及奇偶位。從中可以看出,處理入站連接是何等簡單:

        /**Creates a new VirtualModem connected to a serial port on

        * one end and a TCP port on the data side.

        * serial --the serial port this VirtualModem talks to.

        * speed --the speed the serial port should be set to.

        * tcpport --the TCP port this VirtualModem listens on.

        * throws IOException when there's a problem with the serial or TCP port.*/

        public TCPSerialVirtualModem(SerialPort serial,int speed,int tcpport)

        throws IOException

        {

        super(serial);

        try{

        serial.setSerialPortParams(speed,SerialPort.DATABITS_8,

        SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);

        }

        catch(Unsupported CommOperationException e){

        throw new IOException();

        }

        serverSock=new ServerSocket(tcpport,1);//backlog of one listenThread=new listenInbound();

        listenThread.start();

        }

        最后,listenThrad()片段可接受一個到來的連接請求:

        public void run() {

        int rc;

        Socket s;

        While (running){

        s=null;//No incoming connection request

        try {

        answered=false;

        s=serverSock.accept();

        //Discard incoming connection if already connected

        if(connected)

        throw new IOException();

        sock=s;//for answer()

        (2)UPS監(jiān)視器

        第二個實例是將TINIm390/400連接到一個不間斷電源的串口。軟件要用網絡UPS工具協(xié)議,允許多個客戶端在多種平臺上檢測UPS的狀態(tài)。該項目源于需要由一臺沒有串口的新Macintosh計算機監(jiān)視現(xiàn)有的UPS電源的需求。目前存在兩種基本的UPS設備,即所謂的智能型和簡單型(或“啞巴型”)。簡單的UPS在多個串行引腳上指示其工作狀態(tài),它實際上輸出任何ASCII數(shù)據(jù)。由于不存在太多的串行引腳,因而它僅能夠指示幾組有限的信息,如表1所列。

        表1

        信 號意 義
        RTS(來自 UPS)電池低
        TD(來自 UPS)使用電池
        CTS(去 UPS)關閉UPS電源

        具體實現(xiàn)部分見網絡補充版(http://www.dpj.com.cn)。

        3 結論

        很多現(xiàn)有設備僅支持串行通信,然而,當前的許多應用要求以太網和TCP/IP組網能力。利用強大的Java運行環(huán)境和基于DS80C390和DS80C400微控制器的TINI技術,很容易在極短時間內開發(fā)出一個串行口-以太網轉換器。

        pos機相關文章:pos機原理




        評論


        相關推薦

        技術專區(qū)

        關閉
        主站蜘蛛池模板: 天峻县| 南溪县| 静乐县| 芜湖县| 黄冈市| 巴青县| 会泽县| 叙永县| 西藏| 枝江市| 汨罗市| 南乐县| 沁源县| 常宁市| 石家庄市| 新晃| 新建县| 花莲县| 安陆市| 山丹县| 文水县| 阳朔县| 改则县| 屯留县| 灌云县| 三台县| 永善县| 读书| 汉沽区| 凉城县| 资讯 | 伊通| 沙雅县| 鲜城| 凤台县| 买车| 高台县| 神木县| 长沙县| 犍为县| 宁德市|