女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

異步串行到以太網設備服務器

星星科技指導員 ? 來源:ADI ? 作者:ADI ? 2023-02-20 13:42 ? 次閱讀

本文探討了一種簡單而經濟的方法,通過使用DS80C400/DS80C410/DS80C411網絡微控制器改造基于微型互聯網接口TINI?)平臺的傳統系統,將獨立串行設備遷移到以太網。一旦設備連接到以太網,實現 TINI Web 服務(如 HTTP 服務器)就非常簡單了。

概述

使用串行端口作為與其他電子設備通信手段的設備數量驚人。事實上,對于許多人來說,串行端口提供了與外界通信的唯一機制 - 包括恒溫器、銷售點系統、遠程監視器、條形碼閱讀器、收據打印機、RFID 收發器、血壓計等等,涉及從傳統測試工具到最新的樓宇自動化等領域。這些設備沒有直接參與更大的計算機網絡的方法,但新的應用程序需要TCP / IP連接和以太網功能。通常,昂貴且耗時的重新設計不是一種選擇。

本文探討了一種簡單而經濟的方法,通過使用DS80C400微控制器改造基于TINI?平臺的傳統系統,將獨立串行設備遷移到以太網。一旦設備連接到以太網,實現 TINI Web 服務(如 HTTP 服務器)就非常簡單了。

RS-232 串行端口

本文中討論的異步串行通信基于RS-232-C標準,該標準可以追溯到記錄計算機歷史的早期;RS-232-C 于 1969 年發布1。大多數現代串行端口不支持標準中定義的所有信號 - 并且實現的信號的使用方式僅與標準中定義的方式“相當接近”。我們將忽略純粹的歷史定義,專注于RS-232的使用方式。

空格和標記

RS-232-C將+3V至+25V的電壓電平指定為“SPACE”(二進制0),將-3V至-25V的電壓電平指定為“MARK”(二進制1)。-3V和+3V之間的區域是“開關區域”。許多UART(通用異步接收器發送器)對0和5使用更現代(相對而言)的TTL電壓電平0V和+1V。專用電平轉換器,如著名的MAX-232,在TTL和RS-232電平之間轉換。由于DS80C400/DS80C410/DS80C411上的串行端口是TTL電平,因此在與另一個TTL電平UART接口時不需要電平轉換器。

DCE 和 DTE

DCE(數據通信設備)和DTE(數據終端設備)是通信通道的兩個端點。主要區別在于串行連接器引腳排列(所謂的零調制解調器可用于在兩者之間進行轉換)。

表 1 顯示了使用零調制解調器時 DB-9 DTE 串行連接器上的信號和另一個 DTE 上的相應信號。

表 1.DB-9 DTE 串行連接器信號
DTE 引腳 信號名稱 零調制解調器
1 光盤(載波檢測) 4 (DTR)
2 RD(接收數據) 3 (道明)
3 TD(傳輸數據) 2 (RD)
4 DTR(數據終端就緒) 6 (DSR) 和 1 (CD)
5 公共(信號接地) 5(普通)
6 DSR(數據集就緒) 4 (DTR)
7 即時戰略(請求發送) 8 (CTS)
8 CTS(清除發送) 7 (即時戰略)
9 RI (環形指示器) 不適用

流控制

串行通信可以通過在一個引腳(TD)上發送并在另一個引腳(RD)上偵聽來實現。但是,當兩臺通過RD通信的設備時,TD隨意傳輸,其中一個可能會溢出另一個,從而導致數據丟失。通常有兩種方式實現流控制:

- XON/XOFF(通常松散地稱為軟件流控制) - RTS/CTS(通常松散地稱為硬件流控制)

XON/XOFF 流控制方案傳輸帶內字符,導致另一端暫停(XOFF,13h)和恢復(XON,11h)傳輸。XON 和 XOFF 字符必須由發送方在軟件中轉義,如果它們出現在二進制數據流中,則由接收方解開包裝。

RTS/CTS使用額外的信令線。RTS(發送請求)由發送方斷言。當接收方準備好接收數據時,接收方使用 CTS(清除發送)進行響應,在其接收緩沖區已滿時清除 CTS。

有些設備支持流控制,有些則不支持。因此,默認值通常設置為“無流控制”,如果已知設備實現流控制,則應覆蓋該默認值。

速度、數據位、停止位和奇偶校驗

為了使通信成功,必須正確設置的其他參數當然是傳輸速度(比特率),數據和停止位的數量以及奇偶校驗的類型(如果有的話)。大多數新設備使用“8N1”設置,這意味著 8 個數據位、無奇偶校驗和 1 個停止位。但是,眾所周知,遺留系統使用所有可能性,因此正確的設置實際上可能不是那么簡單。

天尼與網絡

TINI(微型互聯網接口)是達拉斯半導體公司開發的技術平臺,允許在DS80C400/DS80C410/DS80C411微控制器上快速開發。具體來說,TINI包含一個芯片組定義,以及一個與高度優化的Java? 1.1運行時環境集成的嵌入式操作系統。使用Java,程序員可以從嵌入式開發中不常見的強大功能中受益:多線程,垃圾收集,繼承,虛擬化,跨平臺功能,強大的網絡支持,以及最后但并非最不重要的一點是,大量的免費開發工具。TINI用戶通常不受匯編語言編碼的影響。但是,支持并鼓勵使用本機語言子例程來優化速度關鍵路徑或低級硬件訪問(TINI 操作系統是用本機代碼編寫的,因此串行 I/O 吞吐量與現代 PC 沒有顯著差異)。

除了完全支持 java.net 包之外,TINI Java 1.1 運行時還包含 javax.comm 子系統的實現。由于TCP/IP和串行端口都可以從Java輕松訪問,因此TINI系統很容易實現串行到以太網橋接。

TINI環境在TINI規范和開發人員指南(Addison-Welsey,2001)中有詳細的記錄。

例子

我們將從兩個具體的應用程序開始,然后介紹一個通用串行到以太網程序的簡短摘錄,該程序可以修改以適應幾乎任何特定應用程序。這些示例是使用 TINIm400 驗證模塊構建的。

poYBAGPzCGaANsegAAAbKXRcsaQ127.gif?imgver=1


圖1.

TINI驗證模塊可以用作“黑匣子”,將多個串行設備連接到以太網。根據終端設備的需要,TINI可以直接傳遞數據,也可以解析、解釋和修改數據流。

請注意,雖然您可以在 TINIm400 上運行 slush 開發人員外殼中的示例,但更完善的應用程序將駐留在閃存中,在斷電時自啟動,并使用其他 TINI 構造技術使成品幾乎堅不可摧。

需要一些基本的網絡知識和編程經驗才能修改示例。工作示例代碼也可從Maxim下載。

虛擬調制解調器

第一個示例是“虛擬調制解調器”2,它使用 TINIm400 將物理調制解調器和電話線替換為 TCP/IP 連接。假設像工廠“機器狀態監視器”這樣的傳統設備,它使用調制解調器每天多次撥入中央服務器,以報告機器狀態、負載和效率數據。為了消除服務器端對不斷增長的調制解調器庫的需求,并且能夠使用現有的LAN而不是設備的電話線,可以

- 將服務器軟件重寫為基于 TCP/IP 和
- 使用 TINI 虛擬調制解調器替換每臺計算機上的原始調制解調器

但是,機器狀態監視器不必修改,因為就終端設備而言,虛擬調制解調器的行為類似于真正的調制解調器!

當然,虛擬調制解調器也可以成對使用,而不是上述配置。使用兩個虛擬調制解調器時,根本不需要更改服務器軟件,TINI模塊是現有調制解調器的直接替代品。

在后臺,虛擬調制解調器在收到“ATD”調制解調器撥號命令時建立 TCP 連接。“ATH”斷開連接命令將關閉 TCP 連接。該軟件還實現了許多其他經典的AT調制解調器命令,例如,被Microsoft? Windows?網絡識別為真正的調制解調器。此外,虛擬調制解調器偵聽TCP端口本身,并可以應答由“RING”向終端設備發出信號的傳入“呼叫”。

以下代碼片段演示如何初始化 TINIm400 上的串行端口:

   public static void main(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("serial0");
            SerialPort port = (SerialPort) portId.open("VModemTINI", 10000);

            TINIOS.setRTSCTSFlowControlEnable(1, false);
            TINIOS.setRTSCTSFlowControlEnable(0, true);

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

            modem.processInput();
         }
         catch (Exception e) {
         System.out.println("Exception: "+e.toString());
         }
      }

該代碼首先禁用所有 TINI 操作系統調試輸出,這是 TINI 的標準做法。獲取端口標識符后,將打開該端口(第二個參數告訴 open 如果該端口當前正由另一個應用程序使用,則等待多長時間)。接下來,設置硬件流控制的狀態。由于 TINIm400 只有一組用于串行端口 0 和 1 的 RTS/CTS 線路,因此程序應始終禁用另一個端口上的流量控制,然后再在所需端口上啟用它。接下來,實例化 Java 虛擬調制解調器。

虛擬調制解調器類由 AT 命令解釋器(此處未顯示,盡管到目前為止是示例的最大部分)和網絡代碼組成。以下代碼設置串行端口比特率、數據和停止位以及奇偶校驗,并顯示處理入站連接的難易程度:

  /** 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 (UnsupportedCommOperationException e) {
            throw new IOException();
         }

         ...

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

最后,以下 listenThread() 摘錄接受傳入的連接請求:

  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()
                  ...

不間斷電源監控

第二個示例將 TINIm400 連接到不間斷電源的串行端口。該軟件實現了網絡UPS工具協議3,允許各種平臺上的各種客戶端監控UPS狀態和運行狀況(該項目源于需要從沒有任何串行端口的新Macintosh計算機監控現有UPS)。

UPS設備有兩種基本類型:所謂的“智能”設備和簡單(或“啞”)的設備。一個簡單的UPS在幾個串行引腳上發出其狀態信號,它實際上并不發送任何ASCII數據。由于串行引腳不是很多,它只能報告非常有限的一組信息,例如:

信號 意義
即時戰略(來自不間斷電源)) 低電量
道明(來自 UPS) 使用電池
CTS(來自 UPS) 終止 UPS 電源

javax.comm.notifyOn...() 方法可以在 Java 中用于輕松實現對狀態更改做出反應的代碼,例如:

       ...
         // Listen for DTR changes
         try {
            port.addEventListener(this);
         } catch (TooManyListenersException e) {
            ...
         }
         port.notifyOnDSR(true);
         ...

      public void serialEvent(SerialPortEvent ev)
      {
         try {
            if (ev.getEventType() == SerialPortEvent.DSR)
               ...
         } catch ...
         ...
      }

智能UPS更有趣,因為它實現了串行協議,并且可以返回電池充電百分比或溫度等值。不同供應商之間的協議差異很大,而且通常沒有記錄。

以下代碼演示如何接收 UDP 請求并通過 UDP 發送 UPS 狀態信息。

 // Listen to incoming UDP requests
      private class listenUDPThread extends Thread
      {
         private DatagramSocket sock;
         private byte[] buffer;
         private DatagramPacket dp;

         public listenUDPThread(DatagramSocket s)
         {
            sock = s;
            buffer = new byte[BUF_SIZE];
            dp = new DatagramPacket(buffer, buffer.length);
         }

         public void run()
         {
            while (running) {
               try {
                  sock.receive(dp);
                  byte[] data = parseCommand(buffer, dp.getLength());
                  sock.send(new DatagramPacket(data, data.length,
                            dp.getAddress(), dp.getPort()));
               }
               catch (Exception e) {
               }
            }
            try {
               sock.close();
            }
            catch (Exception e) {
            }
         }
      }

由于 Java 中內置了強大的網絡支持,此示例幾乎是不言自明的。while() 循環中的代碼會等待,直到它收到 UDP 請求,解析它并向請求的發起方發送答案(在傳入數據包上使用 getAddress()。

通用串行到以太網應用

完整的串行到以太網示例超出了本文的范圍。(完整的示例在 TINI 規范和開發人員指南中顯示和解釋。但是,以下代碼片段演示如何有效地使用多線程在串行到以太網網橋的串行和網絡部分之間傳輸數據。串行端口和TCP端口被抽象為輸入/輸出流dataIn和dataOut,因此這一層代碼實際上根本不需要知道有關網絡的任何信息,并且還可以在CAN和1-Wire之間橋接數據。

     public GenericBridge()
      {
         ...
         running = true;
         dcThread = new dataCopy();
         dcThread.start();
      }

      // Thread that copies everything from dataIn to dataOut
      private class dataCopy extends Thread
      {
         public void run()
         {
            int r = 0;
            while (running && r >= 0) {
               try {
                  synchronized (threadLock) {
                     r = dataIn.read(dataBuffer);
                     if (r > 0)
                        dataOut.write(dataBuffer, 0, r);
                  }
               }
               catch (Exception e) {
                  r = -1;
                  ...       // Handle error
               }
            }
         }
      }

結論

許多傳統設備僅支持異步串行通信,但當前應用需要以太網連接和 TCP/IP 網絡。DS80C400/DS80C410/DS80C411微控制器采用強大的Java運行時和TINI技術,開發串行到以太網轉換器非常簡單,只需幾個小時即可完成。

審核編輯:郭婷

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 微控制器
    +關注

    關注

    48

    文章

    7895

    瀏覽量

    153583
  • 以太網
    +關注

    關注

    40

    文章

    5573

    瀏覽量

    174568
  • JAVA
    +關注

    關注

    20

    文章

    2984

    瀏覽量

    106731
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    如何使用iperf測量AURIX以太網服務器的速度?

    服務器和客戶端的以太網速度。 如何使用iperf測量AURIX以太網服務器的速度? 我的PC作為客戶端連接到AURIX服務器, CAN 使用
    發表于 01-29 08:08

    串口服務器模塊/TTL串口轉以太網/以太網轉串口/RS232/485/TCP/UDP

    時主動向平臺程序請求建立TCP連接,該方式比較適合于多個服務器同時向一個工控機服務器程序建立TCP連接。 串口服務器將現有串口設備迅速接入
    發表于 07-10 14:39

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

    ://WWW.dpj.com.cn)。3 結 論很多現有設備僅支持異步串行通信,然而,當前的許多應用要求以太網和TCP/IP組網能力。利用強大的Java運行環境和基于DS80C390和
    發表于 11-29 14:57

    如何通過串行以太網連接軟件的遠程PLC訪問

    協議。通過這些通信端口進行PLC配置。通過以太網端口將PLC連接到網絡是大多數設備的標準功能。通過PLC控制和監視過程的服務器可以通過網絡連接訪問該過程。其他與網絡連接的設備也可以與P
    發表于 09-08 16:14

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

    提供一種簡便、經濟的方法,通過TINI 平臺實現串行接口設備以太網的連接。一旦設備連接到以太網, 就能提供TINI Web
    發表于 04-16 09:58 ?24次下載

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

    提供一種簡便、經濟的方法,通過TINI 平臺實現串行接口設備以太網的連接。一旦設備連接到以太網, 就能提供TINI Web
    發表于 05-15 14:17 ?13次下載

    基于以太網串行機床DNC通信系統的研究

    提出了一種新型的基于以太網的.BC 通信技術,使用單板機作為串口服務器,實現了串行機床與以太網的聯接。根據系統的通訊特點,制訂了數控程序的傳輸規程;開發了.BC 通訊平臺的
    發表于 09-23 16:33 ?44次下載
    基于<b class='flag-5'>以太網</b>的<b class='flag-5'>串行</b>機床DNC通信系統的研究

    基于以太網的Web服務器的設計與實現

    為改善塔桅動力環境監控單元中監控數據的傳輸,提出了一種基于以太網的Web服務器的方案。本文利用單片機設計實現基于以太網的嵌入式Web Server,將嵌入式系統與Internet實現互連,用戶可以使用PC機通過Internet進
    發表于 01-04 15:10 ?0次下載

    UT-66XX系列串口通訊服務器的介紹安裝,操作說明及故障排除資料免費下載

    UT-66XX 系列串口通訊服務器,也叫終端服務器串行服務器,是異步串行口 RS232/422
    發表于 09-11 08:00 ?3次下載
    UT-66XX系列串口通訊<b class='flag-5'>服務器</b>的介紹安裝,操作說明及故障排除資料免費下載

    串口服務器485轉以太網

    串口服務器485轉以太網可以將485等串口設備連接到網絡中,讓這些設備采集的數據發往網絡,建立串口和網絡的透明傳輸通道,實現設備聯網。用戶可
    發表于 04-02 09:18 ?4293次閱讀

    使用以太網的Arduino Web服務器顯示傳感數據

    如果您打算使用Arduino運行Web服務器,那么這里是您的理想選擇。我們將在Web服務器上顯示傳感數據。硬件部件:Arduino UNO和Genuino UNO×1個Arduino以太網
    發表于 01-05 16:17 ?2次下載

    8路TTL串口轉以太網串口服務器芯片EBT3002的功能

    EBT3002串口服務器芯片簡介 ? EBT3002?以太網芯片是實現8路TTL串口數據與以太網數據互相轉換的以太網串口服務器芯片;該
    的頭像 發表于 06-16 17:17 ?1931次閱讀
    8路TTL串口轉<b class='flag-5'>以太網</b>串口<b class='flag-5'>服務器</b>芯片EBT3002的功能

    8路以太網串口服務器芯片EBT3002的功能

    EBT3002是實現8路串口(TTL)數據?以太網數據轉換的以太網串口服務器芯片;具有多種 ModBus 網關模式以及TCP/DUP/MQTT/HTTP物聯網網關模式,可滿足各類串口設備
    的頭像 發表于 06-25 10:21 ?1228次閱讀

    串口服務器——小巧精致的高性能串口轉以太網/WIFI服務器

    本周推薦WIFI版/以太網版串口服務器博達智聯——工業級WIFI版/以太網版串口服務器,博達智聯最新推出的串口服務器系列產品,可實現串口與
    的頭像 發表于 05-01 08:34 ?799次閱讀
    串口<b class='flag-5'>服務器</b>——小巧精致的高性能串口轉<b class='flag-5'>以太網</b>/WIFI<b class='flag-5'>服務器</b>

    PLC連接串口服務器RS485轉以太網步驟

    連接RS485端口 :使用適當的電纜將PLC的RS485端口連接到串口服務器的RS485端口。 連接以太網 :使用以太網線纜將串口服務器以太網
    的頭像 發表于 07-18 09:11 ?3549次閱讀
    PLC連接串口<b class='flag-5'>服務器</b>RS485轉<b class='flag-5'>以太網</b>步驟