网站大量收购独家精品文档,联系QQ:2885784924

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

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

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
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); //初始化文件描述符rfdse

文档评论(0)

linsspace + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档