基于嵌入式uClinux系统工业以太网接口的设计与实现

资源类型:pdf 资源大小:160.00KB 文档分类:工业技术 上传者:武淑敏

相关文档

批量下载下列文档

文档信息

【作者】 习博  方彦军 

【关键词】工业以太网 嵌入式系统 uClinux 套接字 S3C4510B 

【出版日期】2005-04-25

【摘要】随着以太网技术的迅猛发展,工业以太网在工业控制领域扮演着越来越重要的角色。该文在阐述工业以太网通信协议模型基础上,针对当前工业控制领域提出的将测控分散到现场、实现远程监控的要求,提出了一种在嵌入式高速处理器S3C4510B和嵌入式uClinux系统中,利用RTL8201以太网控制芯片,实现工业以太网接口的可行的实现方案。按该方案设计的系统已得到实现,应用结果证明此种通信方案高效可靠,能够满足工业以太网对于网络通信的要求。

【刊名】电测与仪表

全文阅读

0引言在现实的工业控制领域系统中,各厂家产品兼容性差、价格昂贵、底层通信速度慢是现场总线技术一直没有得到大力推广的原因。工业以太网技术的出现和快速发展,不但很好的解决了这些问题,同时也为现场总线技术的发展开辟了一个更为广阔的空间。另外,嵌入式技术应用于智能测控系统中,具有以下特点:可以完成数据测量、数据处理、过程控制等多种任务;能确保一些任务的实时性;具有一定自诊断、自校正的功能;便于连接工业以太网,利用工业以太网实现远程监控和数据通信。这些都大大提高了测控系统的性能。基于上述情况,我们在开发时,嵌入式CPU选用Samsung公司基于ARM7TDMI内核的32位高速处理器S3C4510B,这款处理器专门针对以太网应用,在片内集成了以太网MAC层控制器,可以简化网络接口电路的设计并提高系统的可靠性。嵌入式操作系统根据实际应用的需要选用嵌入式uClinux系统,uClinux是嵌入式Linux的一个分支,已经成功移植到多种像S3C4510B这样不带MMU的微处理器平台上,支持多任务,具有完备的TCPIP协议栈并支持多种网络协议和文件系统,在低端网络设备、工业控制领域、数据采集和传输等方面有着广泛的应用。1工业以太网通信协议总第42卷第472期电测与仪表Vol.42No.4722005年第4期ElectricalMeasurement&InstrumentationApr.2005图1工业以太网通信系协议模型图2以太网接口电路图工业以太网即应用于工业自动化领域的以太网技术。对应于国际标准化组织的开放系统互连参考模型(ISOOSI),工业以太网协议在物理层和数据链路层均采用IEEE802.3标准,在网络层和传输层则采用被称为以太网上的″事实上″标准的TCPIP协议簇(包括UDP、TCP、IP、ARP、ICMP、IGMP等),它们构成工业以太网的低四层,在高层协议中,工业以太网协议通常忽略掉会话层和表示层,而只定义应用层,也有的工业以太网协议还定义了用户层,其通信协议模型如图1所示。目前已经存在的工业以太网协议有:ModbusTCP(Schneider,1999)、In-terbus(Phoenix,1999)、EthernetIP(ODVA,1999)、IDA(VendorAl-liance,2000)、HSE(Foundation,2000)、Profinet(Profibus,2001)。2硬件设计实现从硬件的角度看,以太网接口电路主要由MAC控制器和物理层(PHY)接口两部分组成,大多数的通用以太网接口芯片都包含这两部分,但由于我们选用系统的主芯片S3C4510B内部已包含了以太网MAC控制器,所以只需外接一片物理层芯片来提供以太网的接入通道。S3C4510B内嵌的以太网控制器支持媒体独立接口(MediaIndependentInterface,MII)和带缓冲DMA接口(BufferedDMAInterface,BDI),工作速率为10100Mbps,支持全双工半双工模式,在半双工模式下,控制器支持CSMACD协议,在全双工模式下支持IEEE802.3MAC控制层协议。在具体实现时,我们选用Realtek公司生产的RTL8201芯片作为以太网的物理层接口控制芯片,具体连接见图2所示。S3C4510B的MAC控制器可通过MDCMDIO管理接口控制多达31个物理层芯片,每个物理层芯片通过不同的PHY地址(从00001B到11111B)来区分。RTL8201的地址由其引脚PHYAD[0:4]决定,当系统复位时,RTL8201锁存引脚PHYAD[0:4]的初始状态作为与S3C4510B管理接口通信的PHY地址。本系统中通过将引脚经5.1kΩ的电阻上拉或下拉,形成PHY地址00001B。需要注意的是该地址不能设为00000B,否则RTL8201进入掉电模式。为减少芯片的引脚数,RTL8201的PHY地址引脚同时复用为LED引脚,在正常工作时显示工作状态。RTL8201的工作模式通过对应的引脚电平决定,本系统中为全双工(DUPLEX引脚高电平)、100Mbps(SPEED引脚高电平)。RTL8201的发送输出引脚TPTX±和接收输入TPRX±通过网络隔离变压器后连接到RJ45插座。3软件设计实现对以太网通信软件设计包括对以太网硬件接口驱动以及上层协议软件设计。在以太网上加载TCPIP协议,对于常用的操作系统来说非常方便,但对于单片嵌入式系统,由于其内部资源有限,可以针对具体的系统,将经过简化的TCPIP协议移植到嵌入式u-Clinux系统中。下面简要介绍以太网接口在嵌入式uClinux系统的驱动以及通信协议实现的网络编程。3.1驱动程序设备驱动程序是uClinux内核和硬件之间的接口,同时也是uClinux内核的一部分。设备驱动程序是一组数据结构和函数的集合,这些数据结构和函数通过定义的接口控制一个或多个设备。对用户程序而言,设备驱动程序隐藏了设备的具体细节,对各种不同设备提供一致的接口。嵌入式uClinux系统把设备映射为一个特殊的设备文件,用户程序可以按操作普通文件的方式,通过文件访问接口对硬件设备进行访问和控制。设备驱动程序位于内核的最底层,直接与硬件进行交互。内核提供统一的系统调用,用户程序通过这些标准系统调用来访问硬件设备。-60-总第42卷第472期电测与仪表Vol.42No.4722005年第4期ElectricalMeasurement&InstrumentationApr.2005嵌入式uClinux系统将硬件设备分为字符设备(chardevice)、块设备(blockdevice)和网络设备(net-workdevice)三种类型:字符设备指必须以串行顺序依次进行访问的设备,如串口、鼠标、触摸屏等;块设备是可以用任意顺序对其进行随机访问的设备,如硬盘、软驱等大容量存储设备;网络设备与字符设备和块设备相比较则相差较大,它是通过BSDsocket接口访问的设备,专门负责数据包的发送和接收。3.2网络编程在网络通信中,基于TCPIP协议的通信方式有很多。根据实际应用的需要,我们选用最常见的Socket来实现服务器端和客户端的数据通信。Socket是建立在传输层协议(主要是TCP和UDP)上的一种套接字规范,它定义两台计算机间进行通信的规范,如果说两台计算机是利用一个“通道”进行通信,那么这个“通道”的两端就是两个套接字。连接一旦建立,应用程序就可以象操作文件句柄一样,通过对套接字句柄读写来实现进程间数据的交换,而不必考虑具体的底层通信协议。套接字屏蔽了底层通信软件和具体操作系统的差异,使得任何两台安装了TCP协议软件和实现了套接字规范的计算机之间的通信成为可能。实际中常用的是流式套接字和数据报套接字,因为它们提供基于TCP和UDP协议的数据流接口,又分别被称为TCP套接字和UDP套接字。在开发uClinux系统下套接字程序时,我们采用TCP套接字,因为它提供了一种可靠的面向连接的数据传输方法,有自己的检错和纠错机制,并且不管是对单个的数据报,还是对于数据包,它都提供了一种流式数据传输方式,其工作流程如图3所示。服务器首先启动并进行初始化操作,通过调用函数socket()创建一个套接字,然后调用函数bind()将该套接字和本地网络地址绑定在一起,再调用函数listen()将该套接字转换成倾听套接字,之后就调用函数accept()来等待接收客户的请求。客户在调用函数socket()建立套接字后就可调用函数connect()和服务器建立连接。连接一旦建立,客户和服务器之间就可以通过调用函数read()和write()来进行通信。最后待数据传送结束以后,双方调用函数close()关闭套接字。考虑到在工业应用中,嵌入式仪器仪表设备大多作为提供数据的服务器,其通信程序使用服务器端程序,而多个客户端同时发出数据请求的可能性极小,另外客户端一旦进行数据测控,可能需要持续一个比较长的时间,创建子进程的开销对服务器效率影响不大,因此我们选用并发服务器模式。并发服务器在同一时刻能够处理多个客户的请求,服务器用一个父进程来完成接收客户端请求的任务,在接收到一个客户端请求后,创建一个子进程来处理该客户端的请求,而主进程则继续等待新的客户端请求,使得多个客户端请求可以同时由不同的子进程来实现。网络通信程序部分实现代码:sockfd=socket(AF_INET,SOCK_STREAM,0);服务器端开始建立socket描述符服务器端初始化sockaddr结构体,并填充结构体内容bzero(&seraddr,sizeof(structsockaddr_in));seraddr.sin_family=AF_INET;seraddr.sin_addr.s_addr=htonl(INADDR_ANY);seraddr.sin_port=htons(portnumber);指定通信端口bind(sockfd,(structsockaddr)&seraddr,sizeof(structsockaddr));捆绑socket描述符listen(sockfd,10);创建监听套接口new_fd=accept(sockfd,(structsockaddr)&their_addr,&sin_size));如果建立连接,将产生一个全新的套接字vfork();生成一个子进程来完成和客户端的会话,父进程继续监听send(new_fd,buff,strlen(buff),0);从缓冲区读信息,并发向客户端close(new_fd);结束通讯,断开套接字连接需要注意的是uClinux系统的API函数与标准的linux的基本相同,但其uClibc函数库中多进程的管理通过vfork()函数来实现,而不是通常在Linux函数库中的fork()函数。4结束语S3C4510B与uClinux系统构成具有工业以太网接口的嵌入式智能设备,并利用TCP(下转第29页)-61-套接字实现工业以太网上的数据通信,这种方式综合了uClinux嵌入式系统和工业以太网的优点,能满足当前工业控制领域对测控任务的要求,保证测控任务完成的实时性、可靠性,将会在工业控制领域得到越来越广泛应用。(上接第61页)基于嵌入式uClinux系统工业以太网接口的设计与实现@习博$武汉大学自动化系!武汉430072 @方彦军$武汉大学自动化系!武汉430072工业以太网;;嵌入式系统;;uClinux;;套接字;;S3C4510B随着以太网技术的迅猛发展,工业以太网在工业控制领域扮演着越来越重要的角色。该文在阐述工业以太网通信协议模型基础上,针对当前工业控制领域提出的将测控分散到现场、实现远程监控的要求,提出了一种在嵌入式高速处理器S3C4510B和嵌入式uClinux系统中,利用RTL8201以太网控制芯片,实现工业以太网接口的可行的实现方案。按该方案设计的系统已得到实现,应用结果证明此种通信方案高效可靠,能够满足工业以太网对于网络通信的要求。[1]李驹光,聂雪媛,江泽明等.ARM应用系统开发详解-基于S3C4510B的系统设计[M].北京:清华大学出版社,2003. [2]习博,方彦军.嵌入式监测系统中网络通信的研究与实现[J].电力自动化设备.2004(7). [3]张飞舟,邓旭明、王豪.嵌入式工业以太网接口开发与应用[J].计算机工程,2003(9). [4]边宁宁,费敏锐.一种基于工业以太网的控制系统的设计与实现[J].仪器仪表学报.2003.8. [5]邹思轶.嵌入式Linux设计与应用[M].清华大学出版社,2002. [6]郭玉东,王非非.Linux操作系统结构分析[M].西安电子科技大学出版社,2002. [7]蒋东兴,林鄂华.W indows Sockets网络程序设计大全[M].清华大学出版社,1999. [8]RICH ARD S W.TCP IP详解卷1:协

1 2

引证文献

问答

我要提问