1.概述
串口轉以太網目前可以采用串口轉以太網模塊來實現,變得非常簡單易用,但是在該技術中出現的一些新問題、使用誤區需要引起注意。串口轉以太網并不是簡單傳輸媒介的變化,而是串口到TCP/IP的協議轉化。其中關系到的關鍵技術包括:TCP/IP的工作模式問題、串口分幀技術。這里詳細分析這些串口轉網口的技術。
2.澄清一個概念:到底是串口轉以太網還是串口轉TCP/IP?
串口一般來說就是UART,它實際只定義了數據鏈路層的規范,也就是起始位、數據位、停止位。但是在不同的物理層又分為:TTL串口、RS232串口、RS485串口等。
TTL串口:它是MCU芯片之間進行數據通信的串口,它以+5V(或者+3.3V)表示1,以GND表示0。 RS232串口:它是實現設備之間通信的串口,其主要將信號電壓從0~5V的電壓變為±15V(實際一般為±12V)。電壓的增加,增大了數據傳輸的距離和可靠性。
RS485串口:它是實現遠距離通信的串口,可以實現上千米的數據傳輸。其主要特征是用差模信號(A、B兩根線之間的電壓)代替了RS232共模信號(信號線和GND之間的電壓),從而能夠抵抗共模干擾,實現更遠距離的傳。
如果按照ISO的7層模型(物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層)來分的話,串口實際上只包含了物理層、數據鏈路層。而TCP/IP協議應該屬于網絡層和傳輸層。所以串口轉TCP/IP并不準確。以太網屬于物理層和數據鏈路層,所以串口轉以太網更加準確。
由于目前在以太網之上運行的協議多半是TCP IP協議,所以串口轉以太網也可以說成是串口轉TCP IP。
串口轉網口,網口轉串口其實是說的同一個東西,因為這類產品都是可以實現雙向互轉的。
3.串口轉網口關鍵技術一:TCP/IP的工作模式問題
串口轉以太網,并不是簡單物理層和數據鏈路層的轉化。由于串口協議本身不具有網絡層和傳輸層,串口轉以太網,實際是將串口的數據作為TCP/IP的應用層數據,用TCP/IP封裝傳輸的方式。TCP/IP的應用層數據是TCP/IP所要傳送的真正有效的數據。例如用戶通過socket的recv()和send()函數接收和發送的實際是應用層數據。這樣通過串口轉TCP IP用戶就可以用recv()和send()函數收發串口數據了。
但是TCP/IP并不只是recv()和send()這么簡單,根據工作模式的不同,它關系到連接、關閉、監聽等,這是串口轉網口后需要增加處理的部分。TCP IP的工作模式可以分為:TCP服務端模式(TCP Server)、TCP客戶端模式(TCP Client)、UDP模式。
UDP模式:UDP模式是基于非連接的模式,只要有數據發送即可發送,不需要事先連接。所以這種模式更加地接近于串口的通信方式。但是UDP協議無法保證數據不丟失,容易產生誤碼。
TCP模式:TCP模式采用數據可靠傳輸機制,所以可以保證數據基本不誤碼、不丟失。在TCP通信中,必然是由通信的兩端構成,其中一方是TCP客戶端,一方是TCP服務端。TCP客戶端和TCP服務端的概念可以用電話來類比。TCP客戶端是打電話的人,而TCP服務端是接電話的人。
4.如何選擇TCP/IP的工作模式?
TCP與UDP的選擇:盡量選擇TCP模式,特別是經過internet的大數據量傳輸,udp容易誤碼和丟失。
選擇TCP客戶端還是TCP服務器端:請遵循以下原則:
原則一:發起數據發送的一方應該選擇為客戶端。例如一個數據采集系統,采集終端應該為客戶端。這是因為當TCP連接斷開的情況下,客戶端能夠在需要發送數據的時候主動建立連接。而TCP服務端,只能夠被動地接受連接,使得數據無法發送出去。
原則二:IP或者域名固定的一方為服務器端。例如在有多個數據采集終端,而只有一個中心服務器的情況下,中心服務器應該為服務端。這是因為,中心服務器的IP或域名一般是固定的,而采集終端的IP是不斷增加和變化的。中心服務器難以記住所有的采集終端的IP,所以也難以發起連接;而采集終端尋找中央服務器就比較容易。
5.串口轉網口關鍵技術二:串口分幀技術
串口數據是可以連續不斷發送的,而以太網數據則是以數據包為單位發送的。這樣就關系到將多長的串口數據打包后作為一個以太網數據包發送的問題。
數據包長度:以太網數據包最長1500多字節,所以在串口轉網口轉發器收到1500字節后必須將其打包發送。用戶可以設定這個數據包長度上限。
數據包間隔:除了數據包長度作為串口分幀的規則外,一個更為符合邏輯的方法是通過數據包間隔。當串口轉TCP IP轉發器發現的串口數據流中出現了T毫秒的空閑時間時,則認為之前收到的串口數據可以作為一個以太網數據包發送了。這里的T就是用戶設定的數據包間隔。
有人科技經過大量的應用實踐,采用了非常靈活的分包方式:1、網絡收到數據實時轉發給串口,2串口收到數據后做條件判斷,以下兩個條件達到其一及轉發,收到的串口數據總數達到200字節,或者串口空閑當前波特率下發送兩個字節所需要的時間。其中200字節是經驗值,既不會拖慢速度,也不會造成丟包,根據波特率來計算空閑時間比固定定義多少ms更加精準的控制打包時間,提升響應速度。
6. 虛擬串口的使用
在網絡沒有大量普及之前,大多數需要通訊的產品都是采用RS232接口,對應的上位機也是通過串口編程,如今需要通過以太網轉串口進行升級時,就可以采用虛擬串口技術來實現,無需更新原來的應用程序即可使用。請參考 應用筆記二:利用串口服務器延長串口