1 引言
傳統機車監控裝置通過轉存將機車運行過程中所記錄的數據轉存到地面二次開發平臺,在地面進行機車運行數據分析和故障診斷,這樣的檢測設備實時性不強,不能實時監測機車的運行狀態;隨著鐵路信息化數字化的發展,提出了機車在線實時監控以及機車檢修應向狀態修發展。近年來國內現場總線技術的成熟和不斷發展以及移動通信gprs(通用分組無線業務general packet radioservice)的無線數據傳輸業務的成熟,使機車車輛的實時監測成為可能。為此,筆者根據自己實踐,介紹一種基于can(controller area network)總線的機車實時監控系統。系統通過gprs的短信息業務,實現車載數據采集模塊與地面監控系統的實時通信,實現地面監控中心實時監控列車運行狀態。
can總線是眾多現場總線標準之一,具有使用簡單、性能可靠以及系統可擴展性能好等優點。can總線有效支持分布式控制或實時控制的串行通信網絡,采用短報文幀及gsma/cd-amp(帶有信息優先權及沖突檢測的載波監聽多路訪問)的mac(媒介訪問控制)方式,在工業自動控制化領域得到廣泛應用。特別適用于做優化、分析及維護的系統。90年代,國內開始對can總線應用進行研究,目前已在諸多領域中應用can總線技術。
2 基本原理
[align=center]

圖1 機車監控系統結構圖[/align]
圖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總線間的接口電路圖。
[align=center]

圖2 can總線接口電路圖[/align]
模擬量采集單元主要功能可以劃分為微處理器及其控制部分、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;
//將地址設置到驗收屏蔽寄存器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) //接收子程序
{
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 總線的優越性。目前系統已在裝車運行,取得了以下良好效益:
[align=center]

圖3 存貯發送模塊程序流程[/align]
(1) 實時監控機車運行狀態,保障列車行車安全。機車在任何時間、任何地點產生的運行數據都可以被地面監控系統所監控;車載存貯發送單元實時將運行數據發送地面監控系統,當機車出現故障時,該系統可以為機務和電務部門及時提供原始分析數據。
(2) 裝備該系統后減輕了轉儲人員的勞動強度,提高了生產效率,節省了勞動力。