作者:上海卓岚
1.概述
使用上海卓岚的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。
2. TCP/IP基础
我们知道TCP/IP转串口模块ZLSN2002基本上有TCP服务器、TCP客户端、UDP这几种工作模式,对于不同的工作模式,上位机软件也需要选择不同的TCP/IP工作模式和他对应:即模块为TCP服务器时上位机应该为TCP客户端、模块为TCP客户端时上位机应该为TCP服务器、模块为UDP时上位机也是UDP模式。请参考:TCP的工作模式的选择介绍。
3. socket函数和TCP/UDP
socket是通用的TCP/UDP调用接口,含有的主要主要函数如表所示:
我们通过socket函数的不同调用。来实现上位机工作在不同的模式:
(1)TCP客户端模式:上位机调用connect这个socket函数实现向TCP/IP转串口模块发起连接,实现TCP客户端的功能。
(2)TCP服务器模式:上位机调用listen这个socket函数实现TCP服务器功能,即在一个特定端口等待ZLSN2002模块的连接。
(3)UDP模式:无需监听和发起连接,直接调用send和recv函数发送和接收即可。
4. socket编程例子
这里提供了免费了socket通信的源代码程序《计算机端socket编程例子》。在该代码中使用了非常简洁的代码,实现了上位机作为TCP客户端时的数据收发。让用户对socket编程马上有一个初步的印象。
5. VC的CSocket编程例子
在Microsoft Visula C++中已经对底层的socket接口再进行一次封装,即更加高级的CAsyncSocket、CSocket类。使用这两个类可以实现更加容易的编程。在此提供免费的代码《SocketTest的CSocket编程源代码》。
6. 网络编程的注意事项
发送大量数据不丢失的方法:一些用户通过计算机向ZLSN模块发送大批量数据,此时由于网络发送的数据过快,而串口的输出速度有限,经过一段时间肯定会导致发送不成功。所以一般情况下,用户需要检查send()的返回值,只有返回值和期望发送的数据量一样时,才算发送完毕。否则一定要继续调用send()发送未发送完毕的数据。通过这种检测,可以保证发送的数据不丢失。