串口数据转以太网

1.概述
  串口转以太网目前可以采用串口转以太网模块来实现,变得非常简单易用,但是在该技术中出现的一些新问题、使用误区需要引起注意。串口转以太网并不是简单传输媒介的变化,而是串口到TCP/IP的协议转化。其中关系到的关键技术包括:TCP/IP的工作模式问题、串口分帧技术、9位技术。这里详细分析这些串口转网口的技术。



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服务端是接电话的人。

  如何选择TCP/IP的工作模式?

TCP与UDP的选择:尽量选择TCP模式,特别是经过internet的大数据量传输,udp容易误码和丢失。
选择TCP客户端还是TCP服务器端:请遵循以下原则:
原则一:发起数据发送的一方应该选择为客户端。例如一个数据采集系统,采集终端应该为客户端。这是因为当TCP连接断开的情况下,客户端能够在需要发送数据的时候主动建立连接。而TCP服务端,只能够被动地接受连接,使得数据无法发送出去。
原则二:IP或者域名固定的一方为服务器端。例如在有多个数据采集终端,而只有一个中心服务器的情况下,中心服务器应该为服务端。这是因为,中心服务器的IP或域名一般是固定的,而采集终端的IP是不断增加和变化的。中心服务器难以记住所有的采集终端的IP,所以也难以发起连接;而采集终端寻找中央服务器就比较容易。
4.串口转网口关键技术二:串口分帧技术
  串口数据是可以连续不断发送的,而以太网数据则是以数据包为单位发送的。这样就关系到将多长的串口数据打包后作为一个以太网数据包发送的问题。

  数据包长度:以太网数据包最长1500多字节,所以在串口转网口转发器收到1500字节后必须将其打包发送。用户可以设定这个数据包长度上限。

  数据包间隔:除了数据包长度作为串口分帧的规则外,一个更为符合逻辑的方法是通过数据包间隔。当串口转TCP IP转发器发现的串口数据流中出现了T毫秒的空闲时间时,则认为之前收到的串口数据可以作为一个以太网数据包发送了。这里的T就是用户设定的数据包间隔。


串口转网口关键技术三:9位技术
  以太网数据是以字节Byte计算的每个字节都是8位,但是串口数据则有可能出现9位,第9位常常用于区分是地址帧还是数据帧,1表示地址帧0表示数据帧。那么在当串口转化为以太网之后,如何将第9位也传送出去就成了一个关键技术。

  在众多的串口转网口方案中都是将第9位直接舍弃的,目前据了解上海卓岚信息科技的方案具有快速地适应9位的功能,其实现方法中采用了称之为RealCom的协议。由于增加了第9位,所以串口数据不能够直接透明地转化为TCP IP应用层数据,realcom 协议将串口数据打包之后整个作为TCP IP的应用数据传输。这样可以在realcom协议的协议头部加入该数据包的9位是1还是0的信息,从而实现了9位传输技术。

相关推荐
对于以太网来说,刚开始没有经验的网友可能有很多疑惑: 1. 需要什么样的网线:这个经过测试,什么网线都可以,可以是直连,也可以是交叉,现在的网卡比较智能,两种连接方式都可以正常通信。 2. 以太网初始化问题:以太网卡的初始化跟接不接网线没有关系,必须要保证ENC28J60能够正常的初始化完成,这一点是必须的,很多时候会卡在这里,大家好好检查一下SPI总线的设置,它采用的模式与普通的SD卡或FLASH的SPI模式是不同的,好像的模块0. 3. ping不通的问题:一点要保证开发板的网段和PC是在一个网段内,唯一不同的是IP地址的最后一字节不能想同。 4. 开发板可以与PC直接相连,也可以通过路由相连,这个都可以不影响的,当然最好与路由连接,这里就不影响PC上网查资料了。 STM32+ENC28J60+Uip成功代码概述: 想必很多网友都想做以太网收发数据,但网络上能够成功的代码确实比较少,这里是我花了不少数据移植并测试成功的《串口以太网》代码,硬件比较简单这里只给以太网模块原理图大家参考,其他的看程序就可以了,ENC28J60与STM32连接就SPI总线,非常简单。 应用说明: 以太网模块耗电比大,有时候通过USB供电不一定能够满足要求,导致初始化ENC28J60总是失败,为保证模块能够正常工作,建议大家尽量采用外部电源供电。 同样的程序,在不同板子行ping的时间可能是不一样的,原因就是板子的设置问题,我试过几个板子了,好的那个总能在1ms全部ping通,而差的在2ms,3ms,5ms等时间跳动。。。。。 本程序架构是本人一贯提倡的《时间片轮询》,网友可以作为时间片轮询的参考。。。。。 需要注意的是本程序既可以实现服务器,也可以实现客户端,这个只需要通过PC网络调试助手选择就可以了,程序不需要更改。。 附件内容截图:
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页