列车总线控制系统的CAN—485总线网关设计
2008-10-13
作者:张 湘1, 张 弢2
摘 要: 介绍了列车总线控制系统" title="控制系统">控制系统中的CAN总线与485总线之间的互联" title="互联">互联网关,CAN总线控制器INTEL82526的基本工作原理和功能,给出了CAN—485总线网关的软、硬件具体实现方案。
关键词: CAN总线 485总线 互联 INTEL82526 CAN—485总线网关
随着现场总线控制技术的发展和成熟,越来越多的集散控制系统采用现场总线来构建控制系统。在大规模、高性能的复杂大系统中存在着大量的被控设备,而且每个被控设备有着不同的实时性" title="实时性">实时性要求。从网络化控制的角度分析可知,简单地采用一条现场总线把复杂大系统中的所有被控设备联接起来会降低整个系统的稳定性和可控性,是性能不好的控制网络拓扑形式。针对特定的现场总线,在不同的应用环境中,一条网络段上通讯结点数有一个合理范围,超出这个范围将导致网络控制性能的恶化[1~2]。另外,实时性差异较大的设备共存于一条网络段也易于造成整个系统不稳定。因而,在一个复杂的网络化控制系统中,按实时性和功能性分段,构造多个现场总线段是一种较为合理的拓扑形式,利于整个系统的稳定和性能的优化[2]。从性价比角度看,两段实时性差异较大的网络段采用相同的现场总线构建是不划算的,采用合适的两种现场总线分别构建较为合理。控制网络的分段和网段采用不同的现场总线构建带来了两个异种现场总线之间互联的问题。本文所探讨的列车总线中CAN总线与485总线网关为两个异种现场总线间的互联提供了一种解决方案。
1 网关硬件设计
1.1 INTEL 82526简介
82526是INTEL公司生产的执行CAN总线规范的CAN控制器,它包括CAN总线规范所规定的所有硬件模块(传输层和目标层)。82526与微处理器或微控制器" title="微控制器">微控制器联接时能够完成物理层和数据链路层的基本功能。82526内部结构原理图如图1所示。82526采用分时复用的8位地址/数据总线,可与INTEL系列的微处理器或微控制器协同工作。片内双口RAM作为CPU和接口管理处理器之间的通信缓存接口,CPU初始化全局的状态和控制寄存器,并在双口RAM内建立通信目标用以接收和发送报文。位流处理器控制接口管理处理器和总线之间的数据流。另外,位流处理器也控制收发控制逻辑和错误管理逻辑。总线定时逻辑则通过差分输入比较器监视总线并确定串行总线的位定时。接口管理处理器执行主控制器命令并控制串行总线上的数据传送、全局状态和控制寄存器位。处理器接口单元是82526到CPU的接口。
1.2 网关的硬件结构
网关的硬件电路原理图如图2所示。整个硬件电路由三部分构成:微控制器及其外围扩展电路,CAN总线控制器及CAN总线接口电路,异步串行通讯" title="串行通讯">串行通讯控制器和485总线接口电路。
1.2.1 微控制器及其外围扩展电路
网关采用了ATMEL公司的AT89C51型微控制器。AT89C51是与8X51系列微控制器兼容的增强型微控制器,其内部集成了4K字节的FLASH ROM[3]。由于网关的软件及参数查询表所占用存储空间小于4K,网关没有在AT89C51外扩展程序存储器。AT89C51是网关处理、控制和转换总线数据的核心,其主要功能有三个:一是CAN总线控制器82526接收到CAN总线上其它通讯结点的数据后,交给AT89C51处理,将这些数据转换为预先定义的485总线上传输数据的协议格式,由AT89C51控制异步串行通讯控制器通过485总线接口MAXIM485将这些数据发送到485总线上;二是AT89C51将MAXIM485接收到的485总线上的数据进行处理,按照82526数据组织的格式转换这些数据,将这些数据交给82526,由它将这些数据发送到CAN总线上;三是AT89C51按照预先定义的策略对通讯任务进行合理的任务调度。网关接收CAN或485总线来的数据,应将这些数据缓冲存储,才可以将这些数据进行处理、转换和转发。另外,通过CAN或485总线发送数据时需要缓冲发送的数据,要开辟发送缓冲区。基于上述需要,在AT89C51外扩展一片数据存储器6264作数据暂存、缓冲使用。
1.2.2 CAN总线控制器及CAN总线接口电路
CAN总线控制器82526具有256个8位寄存器,只需8根地址线。网关将82526寄存器组配置在AT89C51片外数据存储区的最高256个地址区域。82526兼容INTEL方式,其引脚AD0~AD7是分时复用的地址/数据总线,不需要通过地址锁存器分离地址和数据,只要直接将AD0~AD7联接到AT89C51的P0.0~P0.7引脚,将ALE引脚与AT89C51的ALE引脚相联,就可分时得到正确的地址和数据。8输入与非门74LS30的输入端联接到AT89C51的P2.0~P2.7高8位地址线引脚,输出端联接到82526的片选CS端,就将82526的寄存器组配置在AT89C51片外数据存储区的最高256个地址区域。82526的INT引脚联接到AT89C51的P3.2引脚,将82526的通讯事件配置为AT89C51的外部中断0的事件。82526在处理通讯事件和数据的过程中,不能被访问和存取数据,通过RDY引脚上电平的高低来告知外界其是否处于可访问状态,将RDY引脚联接到AT89C51的P1.1引脚来控制AT89C51对82526的访问。82C250是82526与实际物理总线间的接口。将82526的TX0引脚和RX0引脚分别与82C250的TXD引脚和RXD引脚相联,将82C250的RS引脚接地,使82C250在高速方式下工作。
1.2.3 串行通讯控制器和485总线接口电路
AT89C51片内集成了异步串行通讯模块,不需在AT89C51片外扩展串行通讯控制器。网关中的485总线接口采用了MAXIM485。MAXIM485工作在半双工方式下,因而需要对它处于接收状态或发送状态进行控制,将AT89C51的P1.0引脚与MAXIM485的DE引脚和RE引脚相联,可控制状态的转换。
2 网关软件设计
网关软件主要由四部分功能模块构成:初始化模块、通讯任务调度模块、CAN总线通讯模块和485总线通讯模块。软件由Franclin C51实现。
2.1 网关初始化
网关在正常工作前需对相关的参数进行设置,包括AT89C51的异步串行通讯控制器及其它部分的初始化和82526的初始化。网关将串行通讯设置为工作方式2,串行通讯的波特率设为9600bps,开放外部中断0并选择电平触发中断方式;设置82526的控制寄存器,置位复位请求、出错中断、传送中断、同步和运行位;复位82526状态寄存器,设置82526总线定时寄存器,CAN总线的波特率设为1Mbps;设置82526的TX0、TX1引脚为常态方式输出。
2.2 通讯任务调度
网关是485总线上的主设备,其余的设备均为从设备,所有的通讯任务都由网关发起。网关不断地轮询485总线上的从设备,获得从设备的运行状态数据,通过CAN总线将这些数据转发给列车控制器。在轮询过程中,监视是否有列车控制器发来的控制命令,优先将控制命令发送给相应的从设备。网关采用带优先级的轮询策略。设某一设备的优先级为m级,则所有设备至少被访问一次后该设备被访问m次,且这m次平均分布在总的访问次数中。网关采用4级优先级,建立缺省的设备—优先级表并存储在AT89C51的FLASH ROM中。根据设备—优先级表建立设备轮询环并存储在6264中。列车控制器可发修改设备优先级的命令给网关,在线修改设备—优先级表并重建设备轮询环。当82526接收到CAN总线的数据时就触发AT89C51的外部中断0,外部中断0的中断服务程序置有控制命令标志,读取82526中的数据并存储在6264中开辟的控制命令FIFO队列中,这就实现了对CAN总线上数据的监控。通讯任务调度的流程如图3和图4所示。
2.3 CAN总线通讯
82526是一种执行CAN规范的CAN控制器,其内部采用硬件实现了数据链路层的全部功能,因而这部分的程序只需将82526中的数据读出和将数据写入82526。对于发送报文部分,首先将485总线上设备的运行状态数据按照在CAN总线传输数据的应用层协议进行组装;然后将82526的IMP访问位锁定并检查82526的CPU访问位是否锁定,若未锁定则将组装好的数据写到选择的82526的通信目标数据段;最后复位82526的发送状态位和置位发送请求位并释放IMP访问位。由于网关选择了82526接收到总线数据后给AT89C51一个外部中断,因而对于接收报文部分,首先读取82526的中断指针,判断中断指针值与82526状态寄存器的值是否相同,若不同则读取82526中通信目标数据段中数据,最后复位82526的传送状态位并清除中断指针。
2.4 485总线通讯
485总线只定义了物理层通讯协议,因而基本的数据链路层协议由使用者来定义并由软件实现。由于冲突检测和同步通信功能无法由软件实现,因而485总线通常采用主从、异步式通信方式。要实现485总线可靠的多机通讯,应实现站点识别和错误校验这两项数据链路层的功能。网关采用握手协议实现站点识别,采用CRC校验实现错误校验。具体地说,对于站点识别采用地址握手,即对于51系列微控制器,在通讯方式设为多机通讯时,通过对串行控制器SCON的TB8置位或清零表示是地址帧还是数据帧。在数据通信前先进行地址通信,网关置位SCON的SM2和TB8,将欲与数据通信的从设备的地址发送出去,从设备接收到这个地址,与本机地址比较,若相同则将地址发送,作为对网关的应答,随后将本机中SCON的SM2清零,若不同则保持不动作。网关收到相应从设备的应答后对本机中SCON的TB8清零,随后就可以与相应的从设备进行数据通信,它们之间的数据通信不会影响其余的从设备,这样就实现了站点识别。对于错误检验,采用了CRC—CCITT标准,校验本原多项式为X16+X12+X5+1。考虑到采用基于微控制器的软件实现,不采用直接CRC模2除法算法,而采用串行通讯中XMODEM协议所使用的CRC查询算法,这样大大地提高了数据校验的速度。CRC查询算法要求构造查询表,可预先在微机上采用高级语言编制直接CRC模2除法的程序,分别对最低两个字节为0、最高字节为0~255的三字节数模2除校验本原多项式计算余数,这些余数构成一个256个双字节的查询表,然后将这个查询表固化在AT89C51中的FLASH ROM中。上述方法实现了错误校验。网关的485总线通讯流程如图5所示。
在列车控制系统中,采用了本文的CAN-485总线网关,实现了列车中CAN总线与485总线的互联。在实际应用中,网关有效地控制了CAN总线与485总线之间的数据流;针对实时性要求高的设备与实时性要求一般的设备对主干网络的带宽和吞吐量需求不同,实现了按数据的实时性级别动态地分配网络资源和调度通信任务,有效地解决了列车总线控制系统的稳定性问题,提高了系统的控制性能。
参考文献
1 Gregory C.Walsh,Hong Ye.Scheduling of Networked Control Systems. IEEE Control Systems Magazine, 2001(2)
2 Feng-Li Lian,James R.Moyne,Dawn M.Tilbury. Performance Evaluation of Control Networks: Ethernet,ControlNet and DeviceNet. IEEE Control Systems Magazine, 2001(2)
3 余永权. ATMEL 89 系列(MCS-51兼容)Flash单片机原理及应用.北京:电子工业出版社,1997
4 邬宽明.CAN总线原理和应用系统设计. 北京:北京航空航天大学出版社,1996
5 阳宪惠.现场总线技术及其应用. 北京:清华大学出版社, 1999