1 引言
在工业控制领域,随着仪器仪表智能化的提高和工业管理自动化的深入,大量的智能设备需要通过网络相互通讯,实现智能化现场设备的功能自治性、系统结构的高度分散性以及管控一体化。现场总线顺应了现场设备智能化的发展趋势,以总线作为节点间实现数字通讯的纽带,构成数字式、双向传输、全分散、多分支结构的控制网络。本文针对现场总线中比较有代表性的总线网络与以太网之间的互联,设计了一套基于总线和以太网的嵌入式系统的核心控制部分
2 系统总体结构设计
对于远程测控系统,CAN总线网络需要通过相应的转换系统和以太网互联,并且以太网网络上的PC机可以通过以太网接口获取CAN总线上所有节点的数据,同时也能通过以太网接口向CAN网络指定节点发送相应数据和命令。由此可知,整个系统应该主要包括三部分:CAN网络子系统,CAN-TCP/IP双向接口转换主系统,上位机显示控制系统。
由于第二部分CAN-TCP/IP双向接口转换主系统是整个系统的核心部分,因此本文仅对此部分进行详细设计。系统整体结构图如图1所示。系统硬件主要由三部分组成,第一部分是由电平转换芯片、CAN控制器、CAN驱动芯片以及光电隔离电路组成的CAN数据收发模块;第二部分是以网络接口芯片为核心的以太网接口电路模块;第三部分是联接前两部分,实现以太网协议和CAN协议转换的嵌入式系统。
3 硬件系统主要模块设计
虽然整个系统硬件部分由三大部分组成,但是这三部分相互联系,很难分割,所以对本系统的硬件设计分为以下部分加以介绍:微控芯片选择、时钟电路、复位电路、存储器电路、10M/100M以太网接口电路和CAN接口电路。
1、微控芯片选择。本设计选用的处理器是LPC2290ARM芯片,是基于一个支持实时仿真和跟踪的16/32位的ARM7内核。对代码规模有严格控制的应用,可使用16位Thumb模式将代码规模降低超过30%,而性能的损失却很小。由于LPC2290的144脚封装、极低的功耗、多个32位定时器、8路10位ADC、2路CAN、PWM通道以及多达9个外部中断使它们特别适用于汽车、工业控制应用以及医疗系统和容错维护总线。通过配置总线,LPC2290最多可提供76个GPIO。由于内置了宽范围的串行通讯接口,它们也非常适合于通讯网关、协议转换器以及其它各种类型的应用。
2、时钟电路。LPC2290系列ARM7微控制器可使用外部晶振或外部时钟源,内部PLL电路可调整系统时钟,使系统运行速度更快。倘若不使用片内PLL功能,则外部晶振频率为1-30MHz,外部时钟频率为1-50MHz。若使用了片内PLL功能,则外部晶振频率为10--25MHz,外部时钟频率为10--25MHz。本设计使用了外部11.0592MHz晶振。
3、复位电路。由于ARM芯片的高速、低功耗和低工作电压导致其噪声容限低,对电源的纹波、瞬态响应性能、时钟源的稳定性和电源监控可靠性等诸多方面也提出了更高的要求。本设计中的复位电路使用了带IIC存储器的电源监控芯片CAT1025JI-30,提高了系统的可靠性。电路图如图2所示。
4、存储器电路。对于大部分微控制器来说,存储器系统不是必需的,但如果微控制器没有片内程序存储器或数据存储器,或者是这些存储器容量较小时,就必须设计存储器系统。对于ARM芯片来说,存储器的扩展是通过外部总线接口实现的。本系统扩展了2MB NOR Flash(芯片型号为SST39VF160) , 8MB PSRAM(芯片型号为MT45W4MW16)。SST39VF160是SST公司的CMOS多功能Flash器件,存储容量为2MB, 16位数据宽度,工作电压为2.7-3.6V。MT45W4MW16是一个16位的64Mb器件。
5、Ethernet接口电路。、系统中必不可少的一路l0M/100M Ethernet接口电路,它是通过LPC2290片内BANK上扩展网络接口芯片DM9000实现的。DM9000是一款快速以太网控制处理器。该处理器配备有标准10M/ 100M自适应,16K大容量的FIFO,4路多功能GPIO,全双工工作等功能。
6、CAN接口电路。LPC2290内部集成了两路CAN控制器,所以,在系统中扩展了两路CAN总线接口电路,其中一个作为整个系统的主节点,另外一路备用,增加系统的可靠性。因为CAN控制器是由芯片内部集成的,所以CAN接口电路主要包含两大部分:隔离部分和CAN总线驱动器部分。为了增加CAN节点的抗干扰能力,LPC2290集成的CAN控制器引出端并不是直接与总线收发器的TXD, RXD相连,而是经过高速光耦隔离之后才与总线驭动器T3A1050相连。这样就很好地实现了总线上各CAN节点的电气隔离。
4 软件系统设计
CAN-TCP/IP双向接口转换主系统主要完成CAN协议和以太网协议的解析与转换的任务,我们可以得到主系统(CAN-TCP/IP)的模型如图3所示。
系统层次模型中的CAN总线物理层和数据链路层相对应的是CAN物理接口电路和LPC2290内嵌的CAN控制器。以太网控制器DM9000E本身包含了Ethernet物理层和数据链路层。模型中的其他层次都有处理器运行的软件来实现。
4.1 嵌入式TCP/IP协议结构栈设计
嵌入式TCP/IP协议栈的结构比个人电脑中Windows或UNIX的协议栈要简单的多,功能也弱很多。可以实现低流量、低速度、少接口、少连接的要求。
本系统TCP/IP协议栈是以μC/OS-II操作系统为平台的。整个协议栈要完成两大功能:发送数据报和接收数据报。功能的实现通过系统下编写的三个任务完成。第一个是接收数据报并进行ICMP, ARP处理任务,第二个是UDP接收任务,第三个是TCP接收任务。每个任务由若干程序模块组成。任务之间的通讯采用的是信号量或是消息队列实现。图4所示为协议栈实现的流程图。
图示中标出了整个协议栈的分层结构。接收任务与UDP和TCP任务的通讯是通过消息队列实现的。而UDP接收任务和TCP接收任务是通过SOCKET接口与应用层的程序进行通讯的。
1、数据报的接收,数据报的接收是通过一个任务进行的,同时也包括ICMP和ARP处理,即接收和ICMP, ARP处理任务。在整个任务调度中,该任务的优先级较高,通过时间片来触发。数据报的接收过程是由下层协议调用上层协议进行的。接收任务中的接收函数,即数据链路层函数Rec_Packet(),它在接收时调用本层函数Rec_Ethernet_Packet()进行以太网数据处理。而Rec_Ethernet_Packet()又调用网络层函数IP_PROCESS()函数进行处理,对不同类型的IP报进行分类。这些都是在网络层进行。如果是ICMP报,就交给icmp_process()函数处理。而TCP或UDP报就通过消息队列交给TCP或UDP处理任务去执行。同时Rec_Ethernet_Packet()根据不同的IP段决定是否进行ARP处理。具体流程如图5。
2、数据报的发送。数据的发送与数据报的接收是一个相反的过程,由上层协议函数调用下层协议函数。传输层TCP , UDP处理函数或SOCKET接口函数通过调用网络层函数Send_Ip_Frame()来发送IP报。而Send_Ip_Frame()函数调用Send_Ip_To_LLC()函数来处理IP地址对应MAC地址的事情,然后Send_Ip_To_LLC()调用下层数据链路层函数Send_ethernet_Frame()函数进行发送,最后调用驱动程序的发送函数Send_Pack().
4.2 系统应用层程序设计
应用层软件操作的思路为:当连接在CAN总线上的设备向Ethernet网发送数据时,数据首先通过CAN接口电路发送到主系统,通过应用层协议中对应的程序,提取需要传送的数据,然后对数据分别添加TCP和IP层所需要的信息。ARM处理器将经过封装的数据发送给以太网控制芯片DM9000。由于Ethernet物理层和逻辑链路层都是由DM9000实现的,所以DM9000自动给这些数据添加以太网物理层和逻辑链路层所需要的相关信息,通过物理接口传送到以太网上。这时监控计算机就可以通过网卡接收到CAN总线上设备所传递过来的信息。反之,当监控计算机向总线上设备发出控制信息时,它首先将数据发送到以太网控制器DM9000,核心处理器LPC2290从DM9000中接收到数据时,提取实际要传送的数据,然后封装成CAN总线数据格式,通过CAN总线将数据发送到网络中的现场设备。
本文作者创新点
本文针对CAN总线网络与以太网的互联问题进行介绍,开发了基于μC/OS-II的CAN-TCP/IP嵌入式系统,完成了系统相关软硬件设计。
参考文献:
[1] 史久根、张培仁、陈真勇.CAN现场总线系统设计技术[M].北京:国防工业出版社.2004. 10
[2] 王泓.CAN总线的消息机制[J].中国测试技术.2006. 32[1]: 130-132
[3] 任泰明.TCP/IP协议与网络编程[M].西安:西安电子科技大学出版社.2004.4
[4] 金卫民,神显豪,巩传雷. 基于CAN总线的DNC远程诊断及监控系统[J]. 微计算机信息, 2006,12-2: 32-34