串口轉網口關鍵技術一: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服務端是接電話的人。
如何選擇TCP/IP的工作模式?
TCP與UDP的選擇:盡量選擇TCP模式,特別是經過internet的大數據量傳輸,UDP容易造成誤碼和丟失。
選擇TCP客戶端還是TCP服務器端?請遵循以下原則:
原則一:發起數據發送的一方應該選擇為客戶端。例如一個數據采集系統,采集終端應該為客戶端。這是因為當TCP連接斷開的情況下,客戶端能夠在需要發送數據的時候主動建立連接。而TCP服務端,只能夠被動地接受連接,使得數據無法發送出去。
原則二:IP或者域名固定的一方為服務器端。例如在有多個數據采集終端,而只有一個中心服務器的情況下,中心服務器應該為服務端。這是因為,中心服務器的IP或域名一般是固定的,而采集終端的IP是不斷增加和變化的。中心服務器難以記住所有采集終端的IP,所以也難以發起連接;而采集終端尋找中央服務器就比較容易。
串口轉網口關鍵技術二:串口分幀技術
串口數據是可以連續不斷發送的,而以太網數據則是以數據包為單位發送的。這樣就關系到將多長的串口數據打包后作為一個以太網數據包發送的問題。
數據包長度:以太網數據包最長1500多字節,所以在串口轉網口轉發器收到1500字節后必須將其打包發送。用戶可以設定這個數據包長度上限。
數據包間隔:除了數據包長度作為串口分幀的規則外,一個更為符合邏輯的方法是通過數據包間隔。當串口轉TCP/IP轉發器發現串口數據流中出現了T毫秒的空閑時間時,則認為之前收到的串口數據可以作為一個以太網數據包發送了。這里的T就是用戶設定的數據包間隔。
串口轉網口關鍵技術三:9位技術
以太網數據是以字節Byte計算的,每個字節都是8位。但是串口數據則有可能出現9位,第9位常常用于區分是地址幀還是數據幀。1表示地址幀,0表示數據幀。那么,在當串口轉化為以太網之后,如何將第9位也傳送出去就成了一個關鍵技術。