基于Linux的串口服务器设计与实现

发布者:SereneMelody最新更新时间:2014-11-05 来源: ofweek关键字:AT91RM9200  Linux  串口服务器 手机看文章 扫描二维码
随时随地手机看文章

  随着互联网的迅猛发展,在使用计算机进行网络互联的同时,各种家电设备、仪器仪表以及工业生产中的数据采集和控制设备也在逐步地走向网络化,以便共享网络资源。所以,在电子设备日趋网络化的今天,利用串口服务器来实现网络通信具有十分重要的意义。利用基于TCP/IP的串口数据流传输的实现来控制管理设备,无需投资大量的人力、物力即可完成对传统设备的管理、更换或者升级。

  串口服务器的功能

  串口服务器是一种通信协议转换器,它设有两类通信端口:一类是标准的RS232/422/485格式的串行端口,远程的RTU(远程终端设备)监控模块通过串行控制总线接入串口服务器的此类端口;另一类是以太网口,通过网线将串口服务器接入局域网的交换机等设备中。

  串口服务器在工作中可自动将RS232/422/485格式的串行数据与基于TCP/IP协议的以太网数据包进行透明转换。一方面,串口服务器收到来自某一串行端口的现场数据,将其转换为TCP/IP格式的数据,通过以太网口进行网络上传;另一方面,串口服务器在局域网中捕获合法的数据协议包,通过解包来解析出有效的控制信息,通过监控机指定的串行端口将控制命令以串行数据的方式传送给远程RTU.

  硬件平台

  此系统的硬件平台如图1所示,它是以AT91RM9200芯片构建的Multibus-CPU开发板。MultiBus-CPU系统是基于AT91RM9200微控制器的智能化多总线测控系统,该系统可以建立基于Modbus-RTU总线协议的总线通信,使系统设备可以无缝地接入到基于Modbus-RTU模式的总线系统,以及可靠、实时并准确地完成工业现场的数据采集和信号输出等功能。系统支持Modbus-RTU协议,同时,系统还支持多种总线通信,包括RS485总线,工业以太网(UDP协议),串口RS232通信接口和USB通信接口。

  图1:CPU模块原理图

  图1:CPU模块原理图。

  软件平台

  设计采用嵌入式Linux作为操作系统。ARM上的Linux的主要优势:可扩展的完整操作系统提供了可靠的多任务环境,基于开源模型(GPL),利用多种UNIX和开源应用程序以及用于基于ARM技术的多种设计(包括网络和无线领域)。

  Modbus协议

  Modbus协议是应用于电子控制器的一种通信语言。利用这个协议,控制器相互之间以及控制器通过网络(例如以太网)和其他设备之间进行通信。

  主流的Modbus协议为标准Modbus协议(Modbus RTU协议)和Modbus TCP协议。标准的Modbus通信协议定义了报文帧的每一字节,定义了怎样将数据打包成报文帧以及如何解码。报文帧包括一个字节的地址码,一个字节的功能码,数据和两个字节的校验码。其中,校验码采用CRC校验。

  Modbus TCP协议是在标准Modbus协议的基础上进一步发展而来的。它是将Modbus协议嵌入到底层TCP/IP协议中构成的,这样就在TCP/IP的以太网上实现了客户机-服务器架构的Modbus报文通信。二者的数据帧结构如图2所示。

  图2:标准Modbus与Modbus_TCP数据帧结构对比

  图2:标准Modbus与Modbus_TCP数据帧结构对比。

  分析Modbus TCP协议和RTU协议,可以非常清楚地看出两者的主要区别。与Modbus RTU协议相比,Modbus TCP数据帧里已不再有CRC校验,而这部分校验的任务是由TCP/IP协议和以太网的链路层来完成的。另外,Modbus TCP较标准的Modbus协议还加入了一个MBAP报文头,由它来解释说明Modbus的参数和功能。其他部分两者可以互相通用。如果TCP协议转换为RTU协议,那么,只需要把TCP协议MBAP头中的“单元标识域”和后续字节组成一帧,再加上此帧的CRC校验就可以组成RTU协议,而在串行链路上进行发送。如果是RTU协议转换到TCP协议的话,那么要根据实际情况组建一个MBAP头。

  获取配置信息GetConfigValue功能的设计与实现

  在设计串口服务器之前,首先要配置相应的设备号并给设备配置相应的串口服务器IP地址、TCP通信端口号和串口参数等,这些配置信息放在一个txt文件当中。

  我们设计了一个Configinfo.txt文件,当我们需要向一个设备传递信息时,需要首先从文件中读取配置信息,对相应的串口及工控板的网络进行配置,然后再进行相应的操作。这时,我们在其中用到了两个自定义函数:GetConfigValue和GetCFGValue.其中GetConfigValue的功能是将Configinfo.txt中的信息配置给串口服务器,它调用GetCFGValue函数,在Configinfo.txt中寻找相应的配置信息项,并截取相应的配置信息。它们的程序框图如图3(a)和3(b)所示。

  图3:GetConfigValue函数程序流程图(a)和GetCFGValue函数程序流程图(b)。

  图3:GetConfigValue函数程序流程图(a)和GetCFGValue函数程序流程图(b)。

  串口操作函数封装的设计与实现

  在对串口进行相应的操作时,首先要打开串口并配置串口的波特率、数据位、停止位和工作模式等。这些关于串口的操作都封装在一个文件当中,以使结构清晰,方便检查以及修改或增加更多的操作函数。所进行的包括以下几种操作。

  串口的打开和关闭:打开串口时,需要首先判断串口的类型,然后以一定的方式打开串口并保存原来的串口配置信息,最后对串口进行波特率、数据位、停止位和奇偶校验位的设置。关闭串口时,需要将原来保存的终端信息恢复,使串口回到打开前的状态。[page]

  对串口进行数据读写:串口的读写操作是串口服务器最基本的功能,当有数据传送过来时,需要通过串口发送。写串口操作会把内存中的数据写入所指的文件,读串口操作会把串口送来的数据写入内存中。分别用writecomport和readcomport来实现。

  对串口进行设置:需要设置波特率、数据位、停止位和奇偶校验位。调用定义的封装函数,来完成这些操作。串口的工作模式通过termios函数的配置来控制。

  Modbus TCP/RTU相互转换功能的实现

  这一步是串口服务器设计的关键,其转换重点在于CRC校验和MBPA报头的变换。在这里,定义mod2tcp函数来完成Modbus RTU到TCP格式的转换,定义tcp2mod函数来完成Modbus TCP到RTU格式的数据转换。例如,来自Modbus主站的TCP协议请求,经串口服务器转换成Modbus RTU格式,经485口发送给从站,并将从站相应数据经485接口送入串口服务器,转换成Modbus TCP格式信息返回主站(图4)。

  图4:Modbus TCP/RTU相互转换示例

  图4:Modbus TCP/RTU相互转换示例。

  程序流程如图5(a)和5(b)所示。

  图5:Modbus RTU 到TCP格式数据转换程序流程(a)和Modbus TCP 到RTU格式数据转换程序流程(b)。

  图5:Modbus RTU 到TCP格式数据转换程序流程(a)和Modbus TCP 到RTU格式数据转换程序流程(b)。

  由此可见,TCP格式字节数=RTU格式字节数-2+6,获取的可用数据均相同,因此其程序实现就不再是难题了。

  CRC校验功能

  CRC即循环冗余校验码,它是数据通信领域中最常用的一种差错校验码。RTU方式时,CRC校验传送的全部数据,它忽略信息中单个字符数据的奇偶校验方法。CRC校验的关键在于数据的匹配,将得到的数据如何正确的套用到CRC校验当中是其中的关键。

  CRC校验有既定的规则,其程序实现非常简单,只需要以下几步:CRC字节的初始化;将数据导入进行CRC计算;返回计算出的CRC值。

  串口服务器的设计与实现

  此部分介绍整个程序的main()函数,它会调用前文介绍的函数来实现串口服务器功能,故其头文件中要包含前文所述的各函数文件。程序流程如图6所示。

  main()函数应用Linux C函数编程,其中应尤其注意socket的应用,socket要先建立再bind();在信号量中的参数要配置正确;进程的管理方面,要注意进程退出时先退出子进程,在所有进程都完成之后再关闭socket.

  图6:串口服务器main()函数程序流程图。

  图6:串口服务器main()函数程序流程图。

  问题及解决

  串口服务器测试过程中,有时会出现TCP到RTU发送时数据包错误,不能正确地将TCP数据转换为RTU数据。

  原因在于,测试过程中,Windows下的PC终端向Linux工控板发送数据,但是Windows的实时性并不很好,不能及时地发送数据,有时会出现一次发送两包数据给串口服务器的现象;另外,工控板中Linux下的TCP/IP协议剪裁封装不是很完善,导致其接收处理数据的能力比较差。

  当多帧数据同时到达时,串口服务器未能正确将后一帧数据发送出去,而把一帧数据分割到两帧,导致数据帧错误。这就是发生上述数据完全错误的原因。这时,需要给串口服务器添加数据的分帧处理功能,在接收到数据时,先判断数据帧是否是有效数据帧,确保每次发送的数据都能是完整的一帧,不会出现数据帧错位,而导致数据的完全错误。

  本文小结

  本文的目标是在以AT91RM9200芯片构建的Multibus-CPU开发板上实现串口服务器功能。该串口服务器应用Modbus相关协议,将传统的以RS485/232串口通信设备接入工业以太网,实现上位机和设备之间的信息交互。本串口服务器程序已经能够在开发板上正确运行。

关键字:AT91RM9200  Linux  串口服务器 引用地址:基于Linux的串口服务器设计与实现

上一篇:基于LM3S600设计的热敏微打技术方案
下一篇:基于物联网的嵌入式以太网终端平台设计与实现

推荐阅读最新更新时间:2024-03-16 13:45

基于3c2410的linux2.6.22移植(4)
二、NAND flash 分区管理 这块2410板自带了vivi,启动之后可以进到vivi的提示符下: vivi 查看分区情况: vivi part show mtdpart info. (6 partitions) name offset size flag vivi :0x00000000 0x00020000 0 128k param
[单片机]
基于Linux系统的触摸屏驱动方案
  引言   触摸屏作为一种输入设备,具有坚固耐用、反应速度快、节省空间、易于交流等优点,提供简单、方便、自然的人机交互方式,目前被广泛应用于工业控制、电子查询、消费性电产品领域。   Linux作为是目前最流行的操作系统之一,在桌面系统、服务器领域有大量用户,具有源代码开放,支持的硬件丰富、高可移植等优点,在嵌入式领域也备受青睐。Linux根据不同设备,将驱动程序分为字符设备驱动、块设备驱动、网络设备驱动三种,Linux输入子系统u是对字符类型输入设备驱动实现方式的抽象,是对分散的、多种不同类别的输入设备进行统一处理的内核驱动模型。输入子系统具高效、无Bug和可重用等优点。本文对基于Linux输入子系统的触摸屏驱动进行深
[电源管理]
基于<font color='red'>Linux</font>系统的触摸屏驱动方案
[Linux 驱动]模块加载RTX8025驱动
系统版本:Ubuntu18.04-64 编译器版本:gcc version 7.4.0 (Ubuntu/Linaro 7.4.0-1ubuntu1~18.04.1) uboot版本:2018.07 -linux4sam_6.0 板子型号:at91sama5d3x-xplained MCU型号:sama5d36 RTC型号:RX8025T RX8025T时钟芯片解读 Linux内核中驱动的方式有很多种实现方式,rtx8025是基于iic总线通讯,会使用内核的总线驱动框架,在次基础上实现驱动功能。 驱动开发在调试阶段很难避免要修修改改,如果源码编译到内核里面,每次修改就需要重新编译内核、烧录内核,然后启动
[单片机]
[<font color='red'>Linux</font> 驱动]模块加载RTX8025驱动
软件生态系统支持扩大MeeGo开发者社区不断成长
致力于加快Linux成长的非营利性机构Linux基金会(Linux Foundation)今天宣布,多个领域的公司已经承诺参与MeeGo项目。 目前,该项目参与者包括:领先的设备制造商、操作系统厂商(OSV)、芯片组制造商、独立软件开发商(ISV)以及开发社区等。已获发表声明表示支持的厂商包括:宏基、Amino、华硕、宝马集团、中标软件、DeviceVM、Gameloft、Hancom、Linpus、Maemo社区委员会、Mandriva、Metasys、Miracle、MontaVista、Novell、PixArt、红旗软件、ST-爱立信、腾讯、TurboLinux、VietSoftware、风河、WTEC以及Xandros
[嵌入式]
Linux 2.6.19.x 内核编译配置选项简介
版权声明 本文作者是一位自由软件爱好者,所以本文虽然不是软件,但是本着 GPL 的精神发布。任何人都可以自由使用、转载、复制和再分发,但必须保留作者署名,亦不得对声明中的任何条款作任何形式的修改,也不得附加任何其它条件。您可以自由链接、下载、传播此文档,但前提是必须保证全文完整转载,包括完整的版权信息和作译者声明。 其他作品 本文作者十分愿意与他人共享劳动成果,如果你对我的其他翻译作品或者技术文章有兴趣,可以在如下位置查看现有作品的列表: 电信用户请访问:  金步国作品列表 网通用户请访问:  金步国作品列表 铁通用户请访问:  金步国作品列表 教育网用户请访问: 金步国作品列表
[嵌入式]
OK6410A 开发板 (八) 123 linux-5.11 OK6410A rootfs中留给开发者的内存访问接口
与内存相关的文件系统 我们如果想用rootfs中的文件来观测内存或更改内存行为 则需要观测的文件所属的文件系统 为 内核文件系统 // https://blog.csdn.net/u011011827/article/details/119322870 中的 linux 真实文件系统分类 相关的文件系统有以下几种 sysfs,procfs,rootfs,devtmpfs,debugfs 可以从 /proc/filesystems中查看 当前的linux系统中注册了哪些 系统,在从中根据经验挑选出 内核文件系统 可以 利用 mount 来查看 这些文件系统挂载到哪个目录(挂载点)了 如果没有挂载,可以尝试用mount 命令挂载
[单片机]
串口服务器在广播监控中的应用
一、系统原理    RS- 232 接口 称之为串口、异步口或一个COM口, 是DTE( 数据终端设备) 和DCE( 数据通信设备) 之间的接口。DTE 包括计算机、终端、串口打印机等设备。RS- 232 被定义为一种在低速率串行通讯中增加通讯距离的单端标准。RS- 232 采取不平衡传输方式, 即所谓单端通讯。RS- 232 串口采用电平方式进行数据传送, 传输距离一般都较短, 所以RS- 232 只适合本地设备之间的通信。   目前较为常用的串口有9 针串口( DB9) 和25 针串口( DB25) , 可以用电缆线直接连接标准RS- 232 端口(RS- 422 , RS- 485 较远) 。最为简单且常用的是三线制接法
[模拟电子]
<font color='red'>串口</font><font color='red'>服务器</font>在广播监控中的应用
Enea与MontaVista共推融合了Linux与RTOS“电信盒”
Enea Embedded Technology公司将与Linux供应商MontaVista Software合作,日前共同展示了网络应用系统平台(NASP),即所谓的“(telecom in a box)”解决方案,承诺为分布式电信应用推出集成开发套件。 NASP融合了MontaVista的运营商级Linux及Enea的OSE实时操作系统(RTOS)、Element中间件、Polyhedra故障容错数据库和基于Eclipse的开发工具。它采用Enea最新发布的Linx内部流程通信(IPC)协议来支持多操作系统、CPU和DSP应用。 据MontaVista产品管理总监Dan Cauchy称,NASP能节省6到12个月的开发时间
[焦点新闻]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved