当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]嵌入式CAN-Ethernet接入网关的设计与实现

摘要:针对煤矿安全监测监控系统中 CAN现场总线与以太网互联的需求,采用 32位 RISC ARM处理器,设计了 CAN-Ethernet嵌入式接入网关,运行在 Linux嵌入式实时操作系统上。详细介绍了网关的硬件与软件设计方案,实现了 CAN总线与以太网的无缝连接。经现场应用验证,该网关较好地完成了两种网络之间的协议转换和数据通信。

1引言

现场总线 CAN-bus最早由德国 Bosch公司提出,主要用于汽车内部单元与控制中心之间的数据通信[1],由于其在网络开放性、通讯可靠性、数据传输实时性、系统设计成本、系统扩展能力、纠错能力等方面具有强大的优势,使得 CAN现场总线越来越受到人们的关注。而且基于开放的现场总线 CAN-bus技术,构建煤矿行业的通讯网络,或开发特定功能的通讯设备,都已经不会存在技术上的门槛。CAN-bus本身也是符合本质安全要求的,所以当 CAN-bus应用于煤矿通讯系统时,也立即获得了广大设备用户的认可,成为煤矿行业中首选的设备通信网络,通过由 CAN-bus构建的煤矿现场设备网络,管理者和主控设备能即时了解、处理当前的矿井情况,发觉事故隐患,避免危机的发生。同时,煤矿系统中工业以太网技术也日趋成熟。CAN-bus现场总线与以太网互连,既能保证工业现场数据的可靠实时传输,又能满足数据信息的分析、记录、管理以及远程共享管理,推进煤矿监测监控系统的标准化和开放性,实现现代化煤矿的综合自动化。而 CAN-bus和以太网采用的是不同的通信标准,要实现它们之间的互联就要通过总线标准转换设备(即网关)来实现。

本文设计开发 CAN-Ethernet网关,实现了煤矿安全监控系统中的井下 CAN总线设备与以太网的互连互通,从而将现场总线设备接入到无处不在的 Internet网络,实现数十公里以外,乃至整个地区的数据采集和管理满足煤矿行业现场数据的现代化管理要求。2硬件设计

本网关的硬件部分主要由协议转换模块、CAN总线接口模块和以太网接口模块等部分组成。本网关系统还提供了 RS232接口模块,用来在调试过程中与 PC机进行通信,串口作为控制台输入调试命令,显示调试结果。内置工业级电源系统,支持扩展电源输出,用于为其他设备提供电源。系统硬件结构如图 1所示。

 

 

图1硬件结构图

2.1协议转换模块

协议转换模块是嵌入式网关的核心,由嵌入式微处理器及大容量的存储系统组成。微处理器采用 S3C2410A,S3C2410A是三星公司推出的基于 ARM920T内核的 16/32位 RISC嵌入式微处理器。配置了两片 HY57V561620并联构成的 32位 64MB SDRAM存储系统,存放系统运行时的用户数据、堆栈等信息。FLASH选用一片 64M的 K9F1208U0B,它是一款 NAND flash存储器,用来存放用户应用程序、嵌入式操作系统及现场总线传输来的数据

2.2 CAN总线接口模块

CAN总线接口模块实现网关与 CAN总线设备的互联。网关的 CAN总线接口采用的是两片SJA1000CAN总线控制器和两片 TJA1050高速 CAN收发器。此外,在煤矿井下环境中,为提高系统的抗干扰能力,电路中要采用光电隔离技术将嵌入式网关内部电路与现场总线进行电气隔离,保护网关的正常准确工作,因此在 CAN控制器与收发器之间使用光耦 6N137进行隔离,在光耦前后需要采用 2个相互隔离的 DC5V电源,本系统选用 B0505S-1W DC-DC变换器,实现系统与外界的真正隔离,抑制干扰的串入。SJA1000与微处理器的接口是以外部存储器的方式,数据线与地址线共用,基地址由 SJA1000的片选信号 CS决定,本设计中其地址定义在 BANK5中,因此使用此基地址加上 SJA1000内部寄存器地址的偏移量就可以访问 SJA1000内部 RAM空间;SJA1000的模式输入引脚(MODE)接正 5V电源,使其在 intel模式下工作;将 SJA1000的中断输出 INT引脚分别接 S3C2410A的 INT16和 17,使得数据接收采用了中断方式。

2.3以太网接口模块

自适应以太网接口模块提供了网关接入以太网的接口。以太网控制器采用DM9000,它具有高度的集成性,具有独特的 Packetpage结构可自动适应网络通信量模式的改变和现有系统资源,使网关以 10Mb/s或 100Mb/s的速率接入以太网网络。DM9000与 CPU按照16位方式连接,以太网控制芯片复位后默认工作方式为 I/O连接。

3软件设计

本网关的设计采用了基于消息队列的多线程以及多进程的方式,实现了CAN总线数据收发和以太网通信的同步;以太网通信程序采用流行的 socket套接字编程,传输层协议选择UDP(用户数据报协议)。要实现进程间通信,可以通过管道、信号量、消息队列及共享内存区等多种方式,在不同的系统中使用时各有优点,文献[2]中提出,经测试,对于小消息(100字节左右),在除了darwin6.6以外的所有系统中,system Ⅴ消息队列性能最好。而网关中每次收发的数据也在 100个字节以内。所以本设计中使用system Ⅴ消息队列在进程间传送数据。

在软件设计上可将其分为两大部分:CAN总线设备通信程序进程(主程序)和协议转换及以太网通信程序进程(server)。

3.1 CAN总线设备通信程序

主程序中,初始化包括模式寄存器MOD、命令寄存器CMR、状态寄存器SR、总线定时寄

存器BTR0,BTR1、验收代码寄存器ACR、验收屏蔽寄存器 AMR和输出控制寄存器 OCR等的设置。下面将创建 3个线程,CAN数据接收线程(CAN.receive)、CAN数据发送线程(CAN.send)和调用 server进程的线程。这就保证了两个 CAN口能分别同时接收和发送数据,网关同时也能与上位机软件通信。

CAN.receive线程 : for(;;) {if CAN0口有数据

break;} read(ca,rcvbuf,0);//从底层现场总线网络中接受各种智能设备采集的实时数据或报警信息,将其存入缓冲区,然后将 rcvbuf中数据放入 msg0.buffer

msgsend(msgid,&msg0,sizeof(struct msgtype0),0);//将数据发送到消息队列 0中。这里发送到消息队列上的数据包括 CAN报文的 ID识别码,RTR帧等信息,即不解析收到的CAN数据包内容,直接将其发送到消息队列 0

CAN.send线程: msgrecv(msgid,&msg1,sizeof(struct msgtype1),2,0);//从消息队列1中读取数据 添加本地 CAN地址,写入发送缓冲区sendbuf; write(ca,sendbuf,1);//将从缓冲区中读取的数据通过 CAN1口发送到目的CAN节点当然,也可以只用一个 CAN口实现CAN数据收发,但这时要注意防止 CAN口的收发冲突,

这就要加入互斥锁[3]。 CAN总线设备通信程序主要流程如图 2所示。

 

 

3.2协议转换及以太网通信程序

我们知道,CAN协议为了提高实时性采用了短帧结构,而以太网帧相对要长得多;CAN协议采用载波侦听多路存取/消息优越仲裁(CSMA/AMP)机制解决冲突,而以太网帧采用CSMA/CD机制。这两点构成了 CAN与以太网之间的主要差异,也使得 CAN-Ethernet网关的转换协议复杂度提高,但由于本系统中采用了 Server/Client的通信服务模式,网关即作为服务端,相对于文献[4]省去了网关与服务器通信这一过程,所以转换协议也相对较简单。

在本系统中,由于网关实现的是 CAN总线报文和 UDP报文的数据转发,任务相对简单,因此传输层协议选择较为简洁的 UDP协议,建立无连接的服务端。服务端首先确立端口号,通过调用 Socket建立套接字,然后使用 bind绑定本地地址,通过调用 sendto()和 recvfrom()就可以向以太网发送和接收数据。 定义 Socket地址常用的是 sockaddr_in结构,该结构如下所示: struct sockaddr_in {

在本系统中,Socket地址定义为gatewayAddr,端口号设置为8888。不同的计算机存放多字节值的顺序不同,有的计算机在起始地址存放低字节,有的则起始存放高字节,为了程序的可移植性,需要将主机字节顺序转换成网络字节顺序。调用htons()将端口号 8888转换成网络字节顺序,然后赋值给 gatewayAddr.sin_port。gatewayAddr.sin_addr. s_addr定义了主机的 IP地址,在本系统中并不关心主机的 IP地址,故将主机的 IP设置为INADDR_ANY,即可以侦听局域网内的任一主机的报文。

协议转换与以太网通信程序流程如图 3所示。

 

 

if有udp报文到达{ recvfrom(gatewayfd,&rcvbuf1,sizeof(rcvbuf1),0,(structsockaddr *)&cliaddr, &clilen);//接收以太网报文

将rcvbuf1内数据放入消息队列msg1.buffer;}

else if 消息队列 0有 CAN报文 //通过判断 CAN报文标志位来实现

{ msgrcv(msgid,&msg0,sizeof(struct msgtype0),1,0);//接受消息队列 0中数据

置位 CAN报文标志位;

将消息队列值读入rcvbuf0;

sendto(gatewayfd,rcvbuf0,sizeof(struct rcvbuf0),(struct sockaddr *)&cliaddr,clilen); }//将 UDP报文发送到以太网

else return;

4应用

该网关应用于基于 CAN总线的监测监控系统和测控设备接入以太网的场合,已经在江苏徐州大屯煤电公司姚桥煤矿得到了应用,目前设备运行良好。应用本网关可以解决现场总线设备接入以太网的问题,真正实现了大范围的数据采集和管理,满足了煤矿企业的现代化管理要求。CAN-Ethernet网关在井下监测监控系统中的位置如图 4所示。

 

 

5结束语

本文的创新点:本文设计的 CAN-Ethernet网关,采用ARM 处理器,软件上采用消息队列机制实现不同进程间通信,实现了基于CAN总线的煤矿井下监控系统与矿井综合业务数字网的互联,为煤矿企业信息化建设奠定了基础。本设计实现的 CAN-Ethernet通信程序,无须另外添加转换接口设备,在原有硬件基础上仅通过软件修改即可实现 CAN与以太网的互联。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭