PLC技术资料
    基于CAN总线的机车实时监控系统
    发布者:用户投稿  发布时间:2008/4/25 13:03:54

    1  引言


        传统机车监控装置通过转存将机车运行过程中所记录的数据转存到地面二次开发平台,在地面进行机车运行数据分析和故障诊断,这样的检测设备实时性不强,不能实时监测机车的运行状态;随着铁路信息化数字化的发展,提出了机车在线实时监控以及机车检修应向状态修发展。近年来国内现场总线技术的成熟和不断发展以及移动通信GPRS(通用分组无线业务General Packet RadioService)的无线数据传输业务的成熟,使机车车辆的实时监测成为可能。为此,笔者根据自己实践,介绍一种基于CAN(Controller Area Network)总线的机车实时监控系统。系统通过GPRS的短信息业务,实现车载数据采集模块与地面监控系统的实时通信,实现地面监控中心实时监控列车运行状态。


        CAN总线是众多现场总线标准之一,具有使用简单、性能可靠以及系统可扩展性能好等优点。CAN总线有效支持分布式控制或实时控制的串行通信网络,采用短报文帧及GSMA/CD-AMP(带有信息优先权及冲突检测的载波监听多路访问)的MAC(媒介访问控制)方式,在工业自动控制化领域得到广泛应用。特别适用于做优化、分析及维护的系统。90年代,国内开始对CAN总线应用进行研究,目前已在诸多领域中应用CAN总线技术。

    2  基本原理

    图1     机车监控系统结构图


        图1为机车实时监控系统结构图。包括三个数据采集模块、一个存贮发射模块和地面监控系统(地面系统部分图中未示)。数据采集模块负责采集牵引电机电枢电压、电枢电流、励磁电流等重要模拟量数据;各种风机接触器的开闭状态的开关量;机车基本信息(包括机车速度、机车位置、机车车号等)数字编码量。存贮发射模块负责各数据采集模块的协调工作,通过GPRS将各采集的数据发送到地面监控系统。地面系统由PC机与GPRS无线天线等模块组成,通过GPRS天线向车载系统发送指令,指示车载模块按地面要求进行工作。地面系统同时接收存贮发射模块发送来的现场数据,数据按GPRS的短信息业务格式发送接收。地面系统软件采用Visual C++软件编写。软件使用友好人机对话界面实时显示、跟踪、监控列车运行状态,实现对机车实时在线故障检测与诊断,机车出现故障时,还可以及时向司机提供操作建议,在机车库检时,系统还提供检修指导,限于篇幅所限本文将重点介绍车载部分。

    3  硬件结构设计


        本系统是一个依照CAN2.0B构建的控制局域网(Controller Area Network),总线控制器采用Philips公司P87C591微控器内置的CAN控制器。P8xC591是一个单片8位高性能微控制器,具有片内CAN控制器,采用强大的80C51指令集并成功的包括了半导体 SJA1000 CAN控制器的PeliCAN功能。CAN总线驱动器采用与SJA1000 CAN控制器相匹配的PCA82C250,下位机和上位机通过CANH、CANL屏蔽双绞线进行双向通信。总线终端需跨接100Ω~120Ω电阻以抑制信号反射,保证通信可靠性。双绞线连接各个模块节点,形成多主控制的局域网。为增强CAN总线节点的抗干扰能力,P87C591的RXDC和TXDC脚,通过高速光耦6N173后与82C250相连,保证总线上各CAN节点间的电气隔离,光耦部份电路所采用的两个电源必须完全隔离。图2为各节点和CAN总线间的接口电路图。

    图2     CAN总线接口电路图


        模拟量采集单元主要功能可以划分为微处理器及其控制部分、CAN通讯接口部分、多路模拟量输入通道选择开关、模数转换芯片等。模拟量直接由机车微机柜内引入,信号在微机柜内已调理成适合A/D转换的电平。模拟量信号的采样和量化工作由一片ADS774完成。ADS774是美国Burr-Brown公司生产的12位逐次逼近并行A/D转换器,典型转换时间为8.5μs。选择MCP506A作为16路信号通道转换开关,分时对16路模拟信号采样及A/D转换。


        开关量采集单元采集的信号均来自机车电气控制柜,采集板需采用光电隔离,增强抗干扰能力,实现与采样电路的电气隔离。系统采用两片8255A扩展P0口以对48路开关信号采样,两片8255A的A,B,C口设定为模式0和输入方式。四个模块结构基本相似,在此不一一缀述。
       

        存贮发射模块包括:闪存、带断电保护的时钟芯片DS12887以及GPRS天线组成。闪存具有断电后保存数据特点,作为存放机车数据的黑匣子。GPRS天线和单片机通过RS-232相联接,单片机通过读写串行口实现和中国移动网络之间的数据接收和发送。用一片64kB的HM6264RAM存储有关控制信息并作为与中国移动网络和存贮发射模块的数据交换区。

    [NextPage]

    4  系统软件设计


    4.1  CAN初始化子程序 
        CAN控制器的初始化是系统设计工作中极为重要的部分,它是CAN总线正常工作的前提,关系整个车载系统能否正常工作,初始化工作既是一个重点,也是一个难点。CAN通信初始化包括操作模式的设置、验收滤波器的设置、总线定时器的设置等。验收滤波器的设置决定了节点所接收的信息的格式;定时器设置确定CAN总线数据传输波特率。80C51CPU接口将PeliCAN与P87C591微控制器内部总线相连,通过5个特殊功能寄存器CANADR、CANDAT、CANMOD、CANSTA和CANCON对PeliCAN寄存器和RAM区进行快捷的访问。对CAN进行初始化实际就是对以上5个特殊功能寄存器的进行读写访问。以下是用C语言编写的初始化子程序代码。
    void init_can(void)
    {
    CANMOD=0x01; 
    //将CAN控制器设置为复位模式以启动初始化
    P1M2=P1M2|0x02;
    //P1M2.1=1,P1M1.1=0(默认)
    CANADR=BTR0;
    //BTR0和BTR1编程为125kbit/s@12MHz
    CANDAT=0x45;
    CANADR=BTR1;
    //TSEG1=12,TSEG2=3,SJW=2
    CANDAT=0x2B;
    //Sample=1->sample point~81%
    CANADR=ACR10;
    //将地址设置到验收代码寄存器0(Bank1)
    CANDAT=0x40; //验收滤波代码
    CANDAT=0xE0; //验收滤波代码
    CANADR=AMR10;
    //将地址设置到验收屏蔽寄存器0(Bank1)
    CANDAT=0x00;   //bank1:验收屏蔽0
    CANDAT=0x0F;  //bank1:验收屏蔽1无关
    CANDAT=0xFF;  //bank1:验收屏蔽2无关
    CANDAT=0xFF;  //bank1:验收屏蔽3无关
    CANADR=ACFMOD;
    //将地址设置到ACF模式寄存器
    CANDAT=0x55;    
    //单验收滤波器使用11位ID(SFF)
    CANADR=ACFPRIO;
    //将地址设置到ACF优先级寄存器
    CANDAT=0xFF;    
    //所有滤波器都为高优先级
    CANADR=ACFEN; 
    //将地址设置到ACF使能寄存器
    CANDAT=0x01;    
    //使能Bank1的验收滤波器   
    CANMOD=0x00;   
    //选择操作模式,退出CAN控制器复位模式
    }


    4.2  CAN接收发送子程序
        CAN总线通信采用单滤波器标准帧:使用包括RTR位的完整的识别码和头两个数据字节进行验收滤波(滤波器设置见CAN初始化程序代码)。标准帧共13个字节,包括:3个字节帧头(同步字) ,以保证每次接收端都能够正确的找到帧头;一个字节的命令/数据标识位,该标识位在本系统中作为包代码的身份识别信息(包括数据类型、指令类型等),这样就把命令和数据分开处理便于接收端对命令和数据的正确区分和处理;接着7个字节为CAN数据包所包含的具体数据或指令最后2个字节在标准帧中作备用。各模块根据接收到包的标识位的不同来对数据包进行分解、判断,各模块根据包代码的身分识别号将数据存放到相应的缓冲区,等该源节点发送的数据全部正确接收完毕后,再一起送入公用缓冲区,以便控制处理子程序根据收到的数据进行控制处理。以下是用C语言编写的CAN接收程序基本代码
    void Rec_CAN(void)      //接收子程序

    [NextPage]
    {
    uchar Length;   //CAN数据长度代码
    uchar i;
    bit FF; //FF=0(标准CAN帧);FF=1(扩展CAN帧)
    while(RBS==0)RBS=0;
    //检查RBS是否为1,如不为1说明RBF中没有可读的数据
    CANADR=RBF; //地址指向CAN接收缓冲区地址
    ReceiveMessage[0]=CANDAT;
    //读取并保存帧信息字节
    FF=ReceiveMessage[0]&0x80;     //取出帧格式
    Length=ReceiveMessage[0]&0x0F; 
    //取出帧长度DLC
    if(Length>0x08)Length=0x08;    
    ReceiveMessage[1]=CANDAT;
    //读取并保存RX识别码1
    ReceiveMessage[2]=CANDAT;
    //读取并保存RX识别码2
    if(FF)
    {ReceiveMessage[3]=CANDAT;eceiveMessage[4]=CANDAT;}
    for(i=0;i
    {if(FF) ReceiveMessage[i+5]=CANDAT;
    else ReceiveMessage[i+3]=CANDAT;  //标准帧
    }
    CANCON=0x04;   
    //释放接收缓冲区
    }
     CAN控制器的发送程序也是模块间通信的基本程序,下面是用CAN节点通信的发送子程序。
    void Send_CAN(void)  //发送子程序
    {uchar i;
    if(TBS==1)//发送缓冲区状态=释放?
    {CANADR=TBF;//地址指向591TX缓冲区,
    CANDAT=Message[0]; //写TX帧信息
    CANDAT=Message[1]; //写TX识别码1
    CANDAT=Message[2]; //写TX识别码2
    for(i=0;i<8;i++)  //写数据字节
    {CANDAT=Message[i+3];}
    CANCON=0x01;   //置位发送请求位
    }
    else{//P8xC591发送缓冲区未释放,运行其它程序}
    }


    4.3  系统软件结构
        存贮发射模块和三个数据采集模块按如下协议工作:数字量采集单元通过RS485总线接收机车基本信息,RS485总线数据按一包数据共40个字节,第一个字节为节点地址,最后一个字节为校验字节,中间38个字节为传送的机车基本信息量。数字量采集单元对数据包解包,取出当前机车速度、位置、机车号、线路状态等基本信息,将数据按CAN标准帧格式发给存贮发射模块;存贮发射模块等待、接收数字量采集单元采集的数据后,向其余模块发送数据采集命令,采用在运行中改变滤波参数方式接收各个模块发给存贮发射的数据采集结果。把接收到数据按和地面监控系统约定格式存贮在闪存存贮器内,最后写串口,把一次采集的数据通过GPRS天线发往地面监控系统。地面系统收到车载系统数据时,发送一帧确认帧给车载系统。图3所示为存贮发送模块基本工作流程图。


        模拟量采集模块和开关量采集模块工作流程相似,模拟量单元初始化后等待存贮发送模块发来的A/D转换指令后,依次启动16路A/D转换,转换完成后将16路A/D转换结果按CAN标准帧格式打包发送给存贮发送模块。开关量采集单元初始化后等待上位机的数据采集请求指令后,读取48路继电器通断信号,转换完成后将数据按CAN标准帧格式打包发送给存贮发送模块。

    5  结束语


        系统经过实验室内部联调, 性能稳定, 抗干扰能力强,充分体现了CAN 总线的优越性。目前系统已在装车运行,取得了以下良好效益:

    图3     存贮发送模块程序流程


    (1) 实时监控机车运行状态,保障列车行车安全。机车在任何时间、任何地点产生的运行数据都可以被地面监控系统所监控;车载存贮发送单元实时将运行数据发送地面监控系统,当机车出现故障时,该系统可以为机务和电务部门及时提供原始分析数据。
    (2) 装备该系统后减轻了转储人员的劳动强度,提高了生产效率,节省了劳动力。

    版权声明PLC信息网转载作品均注明出处,本网未注明出处和转载的,是出于传递更多信息之目的,并不意味 着赞同其观点或证实其内容的真实性。如转载作品侵犯作者署名权,或有其他诸如版权、肖像权、知识产权等方面的伤害,并非本网故意为之,在接到相关权利人通知后将立即加以更正。联系电话:0571-87774297。
0571-87774297