使用上海卓嵐的ZLSN系列串口轉TCP/IP模塊可以方便的實現在下位機端的TCP聯網。即只要通過串口收發數據即可實現TCP/IP數據的收發。那么對于上位機,即PC機、服務器等如何通過TCP實現和串口轉TCP/IP模塊的通信呢?基本上來說有三種方式:
(1)使用虛擬串口:此時用戶在上位機通過zlvircom虛擬一個com口,這個com口會在驅動底層和TCP/IP轉串口模塊建立網絡連接。上位機還是通過串口(COM口)和TCP/IP模塊通信。更多詳情參考:虛擬串口介紹。
(2)使用Modbus TCP協議:采用ZLAN5142、ZLSN2140、ZLSN3140等具備Modbus TCP轉Modbus RTU的TCP/IP模塊可以實現將Modbus TCP協議直接轉化為RTU協議。這樣用戶上位機可以使用通用的Modbus TCP協議,比如組態軟件、OPC軟件等。這些軟件都是支持Modbus TCP的,這樣用戶可以借助這些工控軟件進行開發。更多詳情參考:Modbus TCP轉RTU介紹。
(3)TCP網絡軟件編寫:第三種方法是本文介紹的主要方法,用戶通過VC、VB、Delphi、C++Builder等開發環境開發出TCP軟件和TCP/IP轉串口模塊通信。幾乎所有的通用操作系統都支持TCP/IP協議棧,操作系統提供了一種稱之為socket接口的通用的編程規范來調用操作系統的TCP/IP協議棧。實際中,在windows上此socket接口就是一個API接口,最終用戶函數的執行,直接調用了操作系統提供的DLL庫的TCP/IP功能。
另外如果用戶需要實現ZLSN模塊特有的一些管理。比如在局域網中搜索模塊、讀取模塊的參數、修改模塊的參數,卓嵐也提供專用的設備管理函數庫DLL。
我們知道TCP/IP轉串口模塊ZLSN2002基本上有TCP服務器、TCP客戶端、UDP這幾種工作模式,對于不同的工作模式,上位機軟件也需要選擇不同的TCP/IP工作模式和他對應:即模塊為TCP服務器時上位機應該為TCP客戶端、模塊為TCP客戶端時上位機應該為TCP服務器、模塊為UDP時上位機也是UDP模式。請參考:TCP的工作模式的選擇介紹。
socket是通用的TCP/UDP調用接口,含有的主要主要函數如表所示:

我們通過socket函數的不同調用。來實現上位機工作在不同的模式:
(1)TCP客戶端模式:上位機調用connect這個socket函數實現向TCP/IP轉串口模塊發起連接,實現TCP客戶端的功能。
(2)TCP服務器模式:上位機調用listen這個socket函數實現TCP服務器功能,即在一個特定端口等待ZLSN2002模塊的連接。
(3)UDP模式:無需監聽和發起連接,直接調用send和recv函數發送和接收即可。
這里提供了免費了socket通信的源代碼程序《計算機端socket編程例子》。在該代碼中使用了非常簡潔的代碼,實現了上位機作為TCP客戶端時的數據收發。讓用戶對socket編程馬上有一個初步的印象。
在Microsoft Visula C++中已經對底層的socket接口再進行一次封裝,即更加高級的CAsyncSocket、CSocket類。使用這兩個類可以實現更加容易的編程。在此提供免費的代碼《SocketTest的CSocket編程源代碼》。
發送大量數據不丟失的方法:一些用戶通過計算機向ZLSN模塊發送大批量數據,此時由于網絡發送的數據過快,而串口的輸出速度有限,經過一段時間肯定會導致發送不成功。所以一般情況下,用戶需要檢查send()的返回值,只有返回值和期望發送的數據量一樣時,才算發送完畢。否則一定要繼續調用send()發送未發送完畢的數據。通過這種檢測,可以保證發送的數據不丟失。
