基于嵌入式系统的多通讯方式的研究与实现--控制网



基于嵌入式系统的多通讯方式的研究与实现
企业: 日期:2005-03-25
领域:机器视觉 点击数:1020

 

1  引言

    计算机与外部设备进行通讯可以采用不同的接口实现,常用的是串行接口、网络适配器和并行接口。其中串行通讯技术已经很成熟,具有便利和低成本的特点。随着计算机网络的不断发展,网络作为获取信息的便捷手段,已经逐渐被人们所共识。带有串口接入和网络接入功能的嵌入式设备可以实现任何人在任何地方任何时间方便地获取其运行数据,监控其运行状况。嵌入式操作系统是嵌入式设备软件的核心部分,由于它的存在,使得嵌入式设备的功能具有很大的扩展空间和伸缩性能。

    μCLinux是针对控制领域的嵌入式Linux操作系统,它沿袭了主流Linux的绝大部分特性,适合不具备内存管理单元MMU(Memory Management Unit)的微处理器/微控制器,支持多任务,具有完备的传输通讯控制协议/网际协议(TCP/IP协议)和点对点协议PPP(Point to Point Protocol),并支持多种网络协议和文件系统。μCLinux以其优异的性能、免费开放的代码等优点,博得众多嵌入式开发者的青睐,在低端网络设备、工业控制领域、数据采集和传输等方面有着越来越广泛的应用。利用这种成熟、高效、可靠、模块化、易于配置的操作系统来开发应用程序,无疑能进一步提高效率,并具有很好的可移植性。

    为此,利用TCP套接字方式、PPPd拨号方式以及高速串口通讯方式在嵌入式μCLinux系统间以及嵌入式μCLinux系统和Windows系统组成的通讯系统中,实现网络数据通讯方案,充分利用μCLinux系统对多种通讯协议的支持优势,实现多种通讯模式的自由选择和通讯方式的转换,完成传递数据信息、实时采集数据等功能。

2  通讯模块的总体设计
2.1  通讯模块的功能要求

    近年来,随着光纤技术的不断发展和完善,以太网已经成为人们进行数据传输和信息交流的重要手段,然而传统的串口通讯方式由于其低廉的硬件成本和简单便利的连接方式在数据传输中仍然占有重要位置。本嵌入式系统的硬件设计充分考虑了上述两种通讯方式的优越性和提供设备的使用范围的要求,提供了两种通讯方式的硬件接口;通讯程序的设计充分考虑了对硬件资源的支持,并保证软件具有良好的可靠性和维护方便性。

    整个系统的开发和运行过程中用到的通讯方式有Socket网络通讯方式和COM口串行通讯方式两类。其中串行通讯方式又可分为计算机与嵌入式设备直接通过串口连接的通讯方式和通过Modem拨号连接的通讯方式两种。因此软件要实现对上述三种通讯方式的支持,并保证通讯方式选择的简便性。

2.2  总体方案实现


图1  通讯模块工作流程

    考虑到该模块的功能要求,在通讯模块的设计中将这三种通讯方式集成到一个通讯系统中,通过一个控制类实现对通讯方式的控制。采用配置文件的方式将通讯方式和通讯参数写入到该配置文件,这样在选择通讯方式时只需要在配置文件中修改相应的参数就可以实现,满足系统对不同通讯方式转换的简单操作要求。通讯模块的总体设计流程如图1所示。

    嵌入式系统启动后,软件的运行会调用读配置文件程序对系统的各种配置参数进行检查。对于通讯模块,主要配置项目是设备的连接类型和对应的基本参数,程序读到正确配置后记录下这些参数,进入通讯控制类程序判断设备的连接类型并调用相应的连接程序。根据参数信息设置该连接所需要的配置,等待与外部设备的通讯。

3  Socket通讯程序设计
3.1  基本原理

    数据在以太网上的传输和接收都必须遵循以太网络的通讯协议,在一系列以太网络通讯协议中,核心协议是传输层的TCP/IP协议。TCP协议是面向连接的,通讯双方保持一条通道,为了保证网络传输的正确性和有效性,必须进行一系列复杂的纠错和排序等处理[1]。网络通讯中,基于TCP/IP协议的通讯方式有很多,根据应用需要,选用最常用的套接字Socket实现服务器端和客户端(C/S)的数据通讯。

    μCLinux系统是嵌入式Linux的一个分支,带有完整的TCP/IP协议,支持Socket规范。在实际应用中,把μCLinux系统的嵌入式装置作为服务器端,外部与它连接的装置作为客户端。μCLinux系统中的服务器端应用程序,主要是用来接收客户端的连接请求,接收和处理客户端的信息,向客户端发送计算结果和应答信息等。在开发μCLinux系统下的Socket程序时,采用面向连接的TCP-Socket,它提供了一种可靠的面向连接的数据传输方法,有自己的检错和纠错机制,并且不管是对单个数据报,还是对于数据包,它提供了一种流式数据传输方式。

3.2  程序设计与实现[2]
    在μCLinux系统中用GNU C实现TCP套接字编程,关键是利用μCLinux系统的μClibc函数库,服务器端程序就使用其通用接口函数(socket(), listen(), accept()等)完成[3]。服务器程序流程如图2所示。


图2  服务器端程序工作流程

    (1)  服务器程序的第一个操作是创建一个套接字,这是通过调用函数socket()实现的。Sockfd=socket(AF_INET, SOCK_STREAM, 0);
    (2)  调用bind()函数绑定服务器的地址和套接字,bind(sockfd, (struct sockaddr*)& seraddr, sizeof (struct sockaddr));
    (3)  服务器需要将当前与IP地址和端口号完成绑定的套接字转换成侦听套接字,调用listen()函数侦听连接,listen(int sockfd, int backlog),其中sockfd是绑定后的文件描述符,backlog设置请求排队的最大长度;
    (4)  服务器程序进入一个无条件循环,监听来自客户端的连接请求,在此过程中如果有客户机请求连接,服务器程序就会调用accept()从侦听套接字的连接队列中接受一个连接请求,new_fd=accept(sockfd, (struct sockaddr*) &their_addr, &sin_size));
    (5)  服务器程序接收请求后,由vfork()创建子进程,子进程通过由accept()建立的套接字描述符和客户机通讯,符程序继续监听来自客户端的请求。需要注意的是μCLinux系统的API函数与标志的Linux基本相同,但其μClibc函数库中多进程管理通过vfork()函数实现,而不是通常的fork()函数[4]。

4  串口通讯程序设计
4.1  基本原理
    串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用。常用的串口是 RS-232-C 接口(又称 EIA RS-232-C),它是在 1970 年由美国电子工业协会(EIA)联合贝尔系统、 调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。

    串行通信协议分为同步协议和异步协议。异步协议的特点是一个字符一个字符传输,并且传送一个字符总是以起始位开始,以停止位结束,字符之间没有固定的时间间隔要求。每一个字符的前面都有一位起始位,字符本身有5~7位数据位组成,接着字符后面是一位校验位(也可以没有校验位),最后是一位或一位半或二位停止位,停止位后面是不定长度的空闲位。同步协议分为面向字符的同步协议和面向比特的同步协议。面向字符的同步协议一次传送由若干个字符组成的数据块,并规定了10个字符作为这个数据块的开头与结束标志以及整个传输过程的控制信息,它们也叫做通信控制字;面向比特的同步协议特点是所传输的一帧数据可以是任意位,而且它是靠约定的位组合模式,而不是靠特定字符来标志帧的开始和结束。

4.2  程序设计与实现
    μCLinux对串口协议提供了完整的支持,由于Linux系统在处理任何设备时都把设备看作一个文件,因此对于串口设备,Linux系统也把对串口的操作看作对文件I/O的操作,调用系统库函数open(), read(), write()等实现串口的创建和对串口数据的读写等操作[5]。程序流程如图3所示。


图3  串口程序工作流程

    (1)  串口程序的第一个操作是创建一个串口文件,(Linux系统对串口设备有自己的定义方式,/dev/ttyS0为Windows中的COM0,/dev/ttyS1为Windows中的COM1,以此类推。)调用函数open()实现,comfd=open("/dev/ttyS0", O_RDWD);
    (2)  接下来就是设置串口参数,包括波特率、数据位、流控制、开始位和停止位等,这些参数是保证串口能否正确通讯的条件;
    (3)  正确设置了通讯参数后,就可以读取该串口中的数据,数据的读取是调用read()函数实现的,readlen=read(comfd, char *buff, int bufflen);
    (4)  如果系统需要向外界发送数据,要调用write()函数实现,writelen=write(comfd, char *buff, int bufflen)。

5  远程串口通讯的设计和实现

    本系统要求实现在不具备以太网线路的条件下,通过电话线和Modem拨号方式实现该嵌入式设备与外部设备的连接通讯方式。Linux系统提供了PPP协议来实现Modem的拨出和拨入功能。PPP协议提供了一种通过串行点对点联接传输数据报的方式。它由一种在串行封装数据报的方式,扩展联接控制协议LCP和用来建立及配置不同网络层协议的家族网络控制协议NCP三部份组成。封装方案由内核驱动代码来提供,pppd(ppp daemon)提供基本的LCP认证支持,建立和配置IP的网络控制协议NCP。一个PPP会话分为四个步骤:连接建立、连接质量控制、网络层协议配置、连接终止;提供了密码认证协议(PAP)或者邀请握手认证协议(CHAP)来保证连接安全[6]。

    在嵌入式系统中,只要安装有pppd工具,配置该嵌入式系统作为PPP服务器端,就可以方便实现Modem的拨入及与外部设备的通讯。本部分程序的功能相对简单,主要实现打开本地串口设置串口的通讯参数(与串口通讯的设置方法相同),初始化与串口连接的Modem,然后等待外部的拨入转给pppd程序处理。

6  结语

    工程应用中,嵌入式设备能否对多种通讯方式提供支持,是衡量该设备是否具有广泛使用性的关键指标之一。不仅提供网络接口,还提供了传统的串行接口的嵌入式设备,本文提供了将多种通讯方式的通讯程序集成到一个通讯模块中的一种方法,不仅可以实现系统对多重通讯方式的支持要求,同时实现了通讯方式选择的简便性和通讯参数配置的简单性。

  • 在线反馈
1.我有以下需求:



2.详细的需求:
姓名:
单位:
电话:
邮件: