《电子技术应用》
您所在的位置:首页 > 通信与网络 > 设计应用 > 串口转以太网模块配置软件设计及实现
串口转以太网模块配置软件设计及实现
2015年微型机与应用第22期
孙晓晔1,2,成 彬2,3
(1.石家庄开发区冀科双实科技有限公司,河北 石家庄 050081; 2.河北省科学院应用数学研究所,河北 石家庄 050081; 3.河北省信息安全认证工程技术研究中心,河北 石家庄 050081)
摘要: 采用串口转以太网模块使现有串口设备具备联网功能是一种低成本实用的解决方案。在使用之前,需要根据具体应用环境对串口转以太网模块的串口参数以及网络参数进行设置。对上位机与串口转以太网模块间的通信协议进行了详细阐述,采用UDP广播通信方式,由上位机通过网口对模块进行参数配置。在Visual Studio 2012下,用C#编程实现了一套配置软件。配置过程中,上位机和模块可以跨网段通信,避免需预知模块初始IP以及更改上位机IP地址的麻烦,使用更方便。
Abstract:
Key words :

  摘  要: 采用串口转以太网模块使现有串口设备具备联网功能是一种低成本实用的解决方案。在使用之前,需要根据具体应用环境对串口转以太网模块的串口参数以及网络参数进行设置。对上位机与串口转以太网模块间的通信协议进行了详细阐述,采用UDP广播通信方式,由上位机通过网口对模块进行参数配置。在Visual Studio 2012下,用C#编程实现了一套配置软件。配置过程中,上位机和模块可以跨网段通信,避免需预知模块初始IP以及更改上位机IP地址的麻烦,使用更方便。

  关键词通用同步/异步串行接收/发送器;以太网;通信协议

0 引言

  长期以来,串行通信方式在数据采集、数据监控、安防、医疗等很多领域应用普遍,但随着Internet的发展和应用需求的提升,其局限性也日益凸显:通信距离短、速率低、网络特性差等[1]。同时,物联网的迅猛发展,使得嵌入式设备联网的需求越来越迫切。

  淘汰现有串口设备,研发能联网的新产品需要投入大量的时间和人力物力,相比之下,采用串口转以太网技术,只需增加串口转以太网模块,而无需淘汰原先的串口设备,不仅可以提高设备利用率,还可以降低开发成本、缩短开发周期,轻松实现串口设备联网。

  串口转以太网,实际就是将串口数据作为TCP/IP的应用层数据,用TCP/IP封装传输[2-3]。本文主要完成串口转以太网模块上位机配置软件的设计,根据上位机和串口转以太网模块间的通信协议,利用UDP广播方式,完成模块的参数配置,方便用户对模块的使用。

1 串口转以太网模块简介

  串口转以太网实际上就是将串行通信数据转化为网络数据包发出,将收到的网络数据包用串行通信的方式发出,从而实现串口与网口之间数据的透明传输[4-5]。

  本文采用USR-TCP232-E45串口转以太网模块。该模块搭载ARM处理器,采用Cortex-M3内核,内部集成了LWIP协议栈,速度快,功耗低,工作稳定可靠[6]。模块在使用之前需配置的参数包括:串口参数[7](波特率、数据位、校验位、停止位)和网络参数(工作模式、IP地址、端口号、子网掩码、网关等)。

2 通信协议

  对串口转以太网模块进行参数配置,需要上位机按照一定的通信协议向模块发送相应命令(数据报文)。

  通信协议由报文头、报文长度、报文内容组成,上位机发送的报文在末尾还带1 B的校验码,模块对上位机的响应不带校验,如表1所示。在通信协议中加入校验能够很好地解决传输误码的问题;接收方对收到的数据进行校验,如果校验值不正确,则丢弃本包数据,并通知发送方。

003.jpg

  报文头值为0xFF;报文长度为报文内容所占的字节数,由于报文内容不同报文长度也会不同;校验码取报文长度和报文内容各字节之和。报文内容中只有控制码是必需的,用来标识不同的命令操作,MAC地址、用户名密码、参数由于控制码的不同可能不是必需的。

  下位机返回的报文与上位机发送的报文格式类似,但是不带校验,响应报文中控制码字段表示本报文是对上位机发出的哪条命令的响应。

  发送搜索命令,模块会返回36 B的数据,包括模块的IP地址、MAC地址,之后可以利用MAC地址对该模块进行其他参数的设置。

  读取设置,返回256 B,包括基础参数(IP地址、网关、子网掩码、用户名、密码、MAC地址等)和串口参数(串口波特率、数据位、校验位、停止位、流控、本地端口、工作协议等)。

  响应报文除了上述必须返回上位机要求的相应参数情况外,还包括对上位机命令的校验及命令的执行情况。

  校验错误:′E′+正确的校验值;

  命令正确执行:FF 01 CMD′K′;

  用户名密码错误:FF 01 CMD′P′;

  其他错误:FF 01 CMD ′E′

3 上位机配置软件设计

  为了方便跨网段进行配置,所有通信协议的操作均采用UDP广播方式完成。

  3.1 UDP广播原理

  广播:一个节点发送数据包,网络中的所有节点都可以收到。如果网络中两个主机上的应用程序要相互通信,其一要知道彼此的IP;其二要知道程序可监听的端口,因为同一主机上的程序使用网络是通过端口号来区分的。

  如果想在整个网络中广播数据,要向255.255.255.255发送数据包,这种数据包不会被路由,它只能到达本物理网络中的所有主机,因为如果路由器转发了广播信息,那么势必会引起网络瘫痪。广播需要指明接收者的端口号,因为不可能接收者的所有端口都用来收听广播,所以通信时必须保证目标端口号和本地端口号不被占用。

  3.2 配置软件的功能设计

  配置软件的功能比较单一,需要读取模块的当前设置(IP地址、网关、子网掩码、MAC地址、串口波特率、数据位、校验位、停止位、流控、本地端口、工作协议等)予以显示,并能对这些参数进行设置。

  3.3 程序设计及实现

  上位机配置软件在Visual Studio 2012开发环境下,采用C#编程实现。C#中对UDP的编程有两种方式:直接使用Socket类和使用UdpClient类[8]。UdpClient类对基础的Socket进行了封装,发送和接收数据时不必考虑底层套接字收发时必须处理的一些细节问题,开发简单、效率较高。因此,本文使用UdpClient类实现对UDP协议的编程。

  本文采用了多线程技术,用主线程发送数据,专门启动一个线程用于接收数据,同一个进程中的两个线程可以独立运行并相互通信。

  3.3.1 利用UdpClient对象实现UDP通信——数据发送

  利用UdpClient对象发送数据的流程如图1所示。

001.jpg

  private UdpClient udpClient;

  //创建UdpClient对象,这里使用1901端口

  udpClient=new UdpClient(1901);

  //远程主机及端口号

  IPEndPoint iep=new IPEndPoint(IPAddress.Broadcast,1901);

  //发送缓冲区

  byte[]searchDeviceCommand=new byte[]{0xff,0x01,0x01,0x02};

  //通过udpClient将发送缓冲区中的内容发送到远程节点

  udpClient.Send(searchDeviceCommand,

  searchDeviceCommand.Length,iep);

  3.3.2 利用UdpClient对象实现UDP通信——数据接收

  利用UdpClient对象接收数据的流程如图2所示。

002.jpg

  UdpClient对象的Receive方法用于在指定的本地IP地址和端口上接收远程主机发送的数据报[9]。

  private byte[]rBuffer=new byte[256];

  //根据通信协议中响应报文的长度,设置合适大小的接收缓冲区(接收缓冲区的大小不能小于模块响应报文的最大长度)

  private UdpClient udpClient;

  private void FrmConfig_Load(object sender,EventArgs e)

  {

  udpClient=new UdpClient(1901);//创建接收数据的线程

  t=new Thread(startThread);//线程后台运行

  t.IsBackground=true;//启动线程

  t.Start();

  }

  //在接收线程中从远程节点接收数据,对数据进行分析处理

  private void startThread()

  {

  while(true)

  {

  IPEndPoint iepRemote=new IPEndPoint(IPAddress.Broadcast,1901);

  rBuffer=udpClient.Receive(ref iepRemote);

  //对接收缓冲区中的内容进行分析,针对不同命令予以处理

  }

  }

  3.4 程序调试

  程序调试过程中用到了Wireshark工具。Wireshark是一个网络封包分析软件,通过简单的设置就可以撷取网络封包,并尽可能显示出最为详细的网络封包资料。通过该软件,可以方便地看到上位机配置软件与串口转以太网模块之间数据包的各种信息。

4 结论

  采用串口转以太网模块对现有串口嵌入式设备进行升级联网,只需一根网线将模块与PC相连,通过该配置软件就能方便地对模块参数进行设置,操作简单、实用。本文介绍的通信协议以及UDP通信的实现对其他通信应用具有一定的参考价值。

参考文献

  [1] 蔡长安,钟锐,王盈瑛.串行通信转网络通信数据模块的设计[J].计算机应用与软件,2010,27(1):88-91.

  [2] 李毅.嵌入式串口服务器的设计与实现[D].北京:北京交通大学,2012.

  [3] 曾广圣,曾维清,徐冉.一种基于ARM的以太网串口服务器的设计[J].科技广场,2012,25(5):248-253.

  [4] 陈政石,秦红波,李铁鹰.基于MSP430F149的串口服务器设计[J].电子技术应用,2009,35(1):95-97.

  [5] 成彬,王冬艳,韩宪生,等.密码算法中的循环移位“异或”运算实质性研究[J].微型机与应用,2011,30(11):79-80.

  [6] Jinan USR IOT Technology Co.,Ltd. Multifunctional serial to Ethernet module user manual[EB/OL].(2012-07-18)[2014-04-16]. http://www.usriot.com/Down/E45/USR-TCP232- E45-EN%20V1.3.2.pdf.

  [7] 朱英翔,朱福民,刘炎鸣.C#下串口通信编程的开发和扩展[J].微型机与应用,2014,33(6):89-91.

  [8] 周有杰.Visual C#.Net网络核心编程[M].北京:清华大学出版社,2002.

  [9] ROBINSON S.C#高级编程[M].北京:清华大学出版社,2002.


此内容为AET网站原创,未经授权禁止转载。