首页 > 范文大全 > 正文

ARM9工控平台上的多串口网关及视频采集传输的实现

开篇:润墨网以专业的文秘视角,为您筛选了一篇ARM9工控平台上的多串口网关及视频采集传输的实现范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

引言

随着计算机网络技术的发展,现场工况环境对采集控制系统的可靠性、便携性、抗干扰性、实时性、多任务操作等方面提出越来越高的要求标准。

主要研究内容和目的

嵌入式Linux在短短的几年内,就突破了计算场景的所有方面,提供了低成本、开放资源方案,支持开放标准、网络、通信、Internet、图形等,Linux现在能够支持和处理器一样广泛的“传统”嵌入式操作系统。因此,本次课题要设计研发一款高性能,接口多样,功能丰富并兼顾多功能用途的嵌入式工控终端设备,并在其平台基础上开发多串口转换网关以及远程视频采集与传输解决方案。

嵌入式工控平台的设计

硬件系统主要分为CPU、运行和存储部分、通信接口、音频接口、扩展接口和用户接口几部分;各部分的详细功能模块详见表1。

软件平台的搭建工作包括:

1、建立嵌入式linux交叉编译环境。

2、移植U-Boot,包括U-Boot的移植实现和移植验证[1]。

3、Linux内核的裁剪和移植[2]。

4、Linux下设备驱动程序的实现,包括串口驱动程序、ALSA音频驱动程序、Flash驱动和MMC/SD卡驱动的实现[3]。

5、文件系统的实现[4]。

以上工作均已完成并且通过测试。

多串口转换网关的设计与实现

随着企业规模的扩大和Internet技术的广泛普及,如何将多个串行口的数据转发到网络上,实现设备的远程控制、数据的远程传输便成了一个亟待解决的问题。同时,考虑到成本问题,以往设备又不可能全部淘汰,由此,基于本平台的软硬件资源,设计开发了一种基于TCP/IP的多串口转换网关,可从根本上解决这一难题。

多串口转换网关可以实现设备灵活的组网方式,针对不同设备的通信协议可以开发相应的服务程序[5]。

本系统平台上有六个串口和一个网络接口,设计的网关服务程序在整个监控系统中的作用如图1所示。网关服务程序可以采用原始数据传输模式,在与串口服务器建立TCP/IP连接后,就可以直接传输数据;本服务程序同时设计了基于Modbus协议数据传输模式。程序设计中采用多进程技术,作为一种多任务、并发的工作方式,多进程程序可以提高应用程序响应,改善程序结构。本文建立了两个子进程,分别用于处理串口数据经网卡发送和网卡数据经串口发送两个功能,程序流程如图2所示。程序设计的基本目的是为了实现串口和socket端口数据的互相转换,一方数据一到来,先存在缓冲区,再立即发送到另一方,涉及到Linux下的串口编程、socket编程和多进程编程。程序基于面向连接的TCP实现,其流程如图2所示。

采用TCP方式的服务器,在没有新客户端连接时,将一直阻塞在accept()函数处,如果有新的客户端发起连接,将返回一个新的文件描述符,新的文件描述符用来处理该连接,而原来的文件描述符仍然处于监听状态,因此利用accept的返回值client_fd,为每个client_fd创建新的一个子进程来处理,从而实现对多个客户端的并发访问。关键代码如下:

while(1)

{//阻塞接收数据

if ((client_fd=accept(sockfd,(struct sockaddr*) &remote_addr,&sin_ size))==-1)

{ perror ("accept error");

continue; }

//打开串口,并设置相应串口号的波特率、数据位、校验位和停止位

if ((com_fd = opencomport(ConfgInfo.device, ConfgInfo.BaudRate,

ConfigInfo.DataBits, ConfigInfo. StopBits,ConfgInfo.Parity)) == -1)

{ continue; }

//创建接收子进程,当pid==0是为子进程,pid不为0时是父进程

if((pid=fork())>0)

{ close(client_fd);

continue; }

else if(pid==0)

{ close(sockfd);

//创建子进程后交由process_cli函数处理

process_cli(client_fd,com_ fd,ConfgInfo. Flag);

exit(0); } }

进程处理函数process_cli利用多路复用技术,即使用select函数实现某个进程阻塞于多个文件描述符的情况,从而提高应用效率。针对文件描述符的操作如下所示:

FD_ZERO(&rfdset);

//初始化文件描述符rfdset为空

FD_SET (client_fd, &rfdset);

//将网络描述符添加到rfdset

FD_SET (com_fd, &rfdset);

//将串口描述符添加到rfdset

//轮询等待,从文件描述符rfdset中获取状态变化后的消息

status = select (FD_SETSIZE,&rfdset, NULL, NULL, &timeout);

bzero (buf, sizeof (buf));

//清空缓冲区

struct timeval timeout = { 60, 0 };

//timeout设置超时等待时间

在select()函数中采用了轮询处理办法,只要其中一个或多个文件描述符发生变化都将返回,主要针对select的返回值进行选择性的执行处理代码。例如当串口中断产生数据请求FD_ISSET(com_fd, &rfdset),即从串口读取数据readcomport (buff, BDFFUE_LEN),而当以太网接到数据时FD_ISSET (client_fd, &rfdset),从网络接收数据到缓冲区recv (client_fd, buf, BDFFUE_LEN, 0)。

Modbus RTU/TCP协议处理模块

MODBUS是一种主/从规约,由于Modbus协议是工业测控领域的标准通信协议,在现场智能仪表中有广泛的应用[6],本服务程序设计了Modbus协议数据的转换。如表2所示,Modbus RTU类型报文,无论上、下行,具有相同的结构。M o d b u s T C P为Modbus的TCP网络协议,TCP网络端口号为502。Modbus TCP在RTU协议前,增加了6个字节的协议头,同时取消了Modbus RTU的CRC16校验和,格式如表3所示。

程序实现从TCP接收来自modbus主站的请求,转换成modbus RTU格式,经串口发送给从站,由函数tcp2mod()实现;并将从站相应数据经串口接收后,转换成TCP Modbus格式信息返回主站,由函数mod2tcp()实现。函数tcp2mod()功能为去掉包头的6个字节的TCP协议头,将剩余的字节加上CRC循环校验码,发送给modbus从机器。函数mod2tcp()的功能是将来自从机的应答码,去掉结尾的两个CRC校验,加上TCP包头的6个字节,返回给主站。

远程视频采集传输解决方案

系统方案基于本文所研发的AT91SAM9G20软硬件平台,分为前端监控资源采集、视频传输,后端平台组建等几部分。整个系统全部采用全网络视频监控架构,前端采用本工控单板机进行图形和音频数据采集,通过网络接口直接进入网络中,传输到后端进行集中存储和管理。后端采用管理平台来完成整个视频监控系统的集中预览、控制、管理、存储以及视频分发等功能,实现视频监控系统的集中管理[7]。系统构成框架如图4所示。

本方案采用USB摄像头采集图像,对现场图象进行高速捕捉,然后将捕捉图象通过USB总线传输到ARM处理器进行压缩处理,同时将录制的音频文件也进行压缩处理,打包生成UDP包,向网络发送;最后,通过网络接口,在PC上保存和接收,用户使用标准的网络浏览器和流媒体播放程序即可查看远程视频影像,同时也可以通过网络控制视频采集设备。

结语

本文主要在AT91SAM9G20芯片基础上,比较分析了多种操作系统的特点,最后采用Linux操作系统为研究对象并以2.6.30内核版本为基础,成功移植开发了一个稳定、高效的嵌入式Linux系统,实现系统外设的驱动程序,并在此基础上实现了多串口联网的功能,给出一个基于本平台的视频监控系统的解决方案。多串口转换网关可以实现设备灵活的组网方式,针对不同设备的通信协议可以开发相应的服务程序,视频监控方案可扩展应用在工业控制、远程监控系统等诸多领域。

参考文献:

[1] 王勇.嵌入式系统原理与设计[M].浙江:浙江大学出版社,2007:15-20

[2] 王晓宁,王振臣,张少兵,姚帆.Linux操作系统在arm9处理器上的移植[J].工自动化及仪表,2010,37(2):67-69

[3] 彭朝勇,薛兵.一种嵌入式Linux串口驱动开发模式[J].微计算机信息,2007,23(5):46-48

[4] Liunx Doc Project[EB/OL].

[5] 范炜.基于ARM的嵌入式多串口网络服务器的设计与实现[D].北京:北京交通大学,2007

[6] Modbus-IDA. MODBUS Application Protocol Specification[EB/OL]. /docs

[7] 刘春成.基于嵌入式Linux的USB摄像头驱动开发[J].计算机工程与设计,2007,28(8):24-27

[8] 袁莎莎,蒋健,陈炜.基于AT91SAM9G20构建嵌入式Linux系统[J].电子系统设计.2011,10:25-28