基于CAN总线的机车实时监控系统
扫描二维码
随时随地手机看文章
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存储有关控制信息 并作为与中国移动网络和存贮发射模块的数据交换区。
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;[!--empirenews.page--]
//将地址设置到验收屏蔽寄存器 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 系统软件设计
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控制器复位模式
}