黃治華,卿粼波,王正勇,何小海
(四川大學(xué) 電子信息學(xué)院,四川 成都 610064)
鐵路貨車故障軌邊檢測系統(tǒng)(TFDS)是我國自主研發(fā)的針對傳統(tǒng)人工巡檢模式檢測時間長、效率低、不滿足鐵路運輸安全需求等問題的一套安全預(yù)警系統(tǒng)。武漢鐵路局于 2001年首先就TFDS系統(tǒng)做了試用測試并投入使用,在實踐中證明了這套系統(tǒng)能克服傳統(tǒng)列檢的局限性,很快推廣到六大干線中[1]。TFDS系統(tǒng)從提出到現(xiàn)在經(jīng)歷了多次升級改進(jìn),有許多高校和科研單位參與研究,并取得了一些成果。陳保平提出在硬件結(jié)構(gòu)上采用FPGA+ARM+網(wǎng)絡(luò)控制器的組合方式,提供高速數(shù)據(jù)處理和數(shù)據(jù)傳輸能力,節(jié)省了空間和維護(hù)成本[2];袁潔提出貨車關(guān)鍵零件轉(zhuǎn)向架故障診斷方法,結(jié)合視覺特征精準(zhǔn)定位故障區(qū)域,最后根據(jù)轉(zhuǎn)向架的直觀特性和峰值特性來對故障進(jìn)行診斷[3]。隨著市場上的硬件設(shè)備的不斷更新,有必要針對具體的應(yīng)用需求對系統(tǒng)進(jìn)行完善和改進(jìn)。例如,在實際應(yīng)用中,當(dāng)使用多路高速線陣相機(jī)進(jìn)行并行圖像采集的時候?qū)?dǎo)致計算機(jī)CPU高速運轉(zhuǎn),內(nèi)存持續(xù)增長,頻繁讀寫硬盤數(shù)據(jù),甚至?xí)斐呻娔X宕機(jī),這類情況對計算機(jī)性能有較高的要求。當(dāng)計算機(jī)性能不足時,用戶往往需要因為攝像機(jī)的增加而添置一整套設(shè)備。為此本文在降低系統(tǒng)成本的同時根據(jù)實際需求,設(shè)計并實現(xiàn)了一種主輔機(jī)采集模式,利用Socket TCP協(xié)議進(jìn)行主輔機(jī)的信息交互和圖像傳輸,增加了通信異常重發(fā)的防護(hù)機(jī)制,確保了數(shù)據(jù)正確穩(wěn)定傳輸?shù)耐瑫r使得系統(tǒng)可以根據(jù)計算機(jī)性能靈活配置相機(jī),減少不必要的開銷,提高了TFDS系統(tǒng)的可擴(kuò)展性和穩(wěn)定性。
根據(jù)鐵路行業(yè)中TFDS系統(tǒng)的技術(shù)標(biāo)準(zhǔn)和應(yīng)用系統(tǒng)的功能需求,TFDS系統(tǒng)通過磁鋼處理器的TTL信號獲取貨車車速,同時通過串口發(fā)送指令控制外圍硬件打開補(bǔ)償光源、打開相機(jī)保護(hù)門以及獲取每節(jié)車廂車號信息,然后要求多個工業(yè)相機(jī)同時開始采集貨車圖像,如圖1所示。待圖像采集完畢后,通過以太網(wǎng)將數(shù)據(jù)上傳至數(shù)據(jù)存儲服務(wù)器對圖像進(jìn)行分析。列檢員可以通過瀏覽器遠(yuǎn)程訪問服務(wù)器中的貨車信息,進(jìn)行人工復(fù)檢。
圖1 多路相機(jī)采集示意圖
但是若將這若干相機(jī)同時掛載在一臺計算機(jī)上采集圖像,由于每個相機(jī)的內(nèi)存有限,為了確保圖像完整不丟失,需要實時將圖像從緩沖區(qū)中拷貝到硬盤中處理,對單臺計算機(jī)的負(fù)荷過大。由此本系統(tǒng)設(shè)計主輔機(jī)結(jié)構(gòu),如圖2所示,主輔機(jī)采用Socket連接,當(dāng)主機(jī)獲取到磁鋼信號并且判定為貨車時,除了啟動自身兩個相機(jī)的拍攝,還通過TCP協(xié)議和輔機(jī)通信發(fā)送控制信號,讓輔機(jī)上的兩個相機(jī)開始拍攝,最終將采集圖像回傳給主機(jī),由主機(jī)統(tǒng)一打包車輛數(shù)據(jù)和車輛圖片上傳至服務(wù)器。該主輔機(jī)模式很容易可以擴(kuò)展成一個主機(jī)多個輔機(jī)的模式,使用的相機(jī)也可以在4~8個范圍內(nèi)動態(tài)擴(kuò)展。
圖2 主輔機(jī)模式
鐵路貨車故障檢測圖像傳輸系統(tǒng)流程活動圖如圖3所示。采集子系統(tǒng)首先處于待機(jī)狀態(tài),并判斷當(dāng)前列車是否為貨車,一經(jīng)檢測確認(rèn)是貨車就啟動采集系統(tǒng)采集車輛圖像和信息數(shù)據(jù),采集完畢后輔機(jī)向主機(jī)發(fā)送數(shù)據(jù),主機(jī)接收完數(shù)據(jù)之后判斷數(shù)據(jù)是否完整,并將其打包上傳至服務(wù)器。服務(wù)器端收到數(shù)據(jù)之后建立“一車一檔”數(shù)據(jù)庫。
圖3 系統(tǒng)軟件流程圖
鐵路貨車運行監(jiān)測系統(tǒng)最基本的功能就是控制相機(jī)來完成鐵路貨車圖像的采集顯示。采用Dalsa公司的LA-GM-02K08A高速線陣掃描工業(yè)相機(jī)進(jìn)行圖像采集,計算機(jī)和多臺相機(jī)通過交換機(jī)連接處在同一局域網(wǎng)內(nèi),各個設(shè)備擁有獨立的網(wǎng)絡(luò)IP地址,這樣本系統(tǒng)在主輔機(jī)之間,主機(jī)與服務(wù)器之間通過一個雙向的通信連接實現(xiàn)數(shù)據(jù)交換。
Teledyne DALSA新發(fā)布的Linea系列Teledyne Dalsa Linea LA-GM-02K08A 高端線陣相機(jī)采用基于最先進(jìn)CMOS線掃描技術(shù)的單線感光單元,像素尺寸為 7.04 μm×7.04 μm,基于TurboDriveTM技術(shù)能夠使相機(jī)達(dá)到80 kHz的最大行頻。該款相機(jī)的數(shù)據(jù)接口為GigE Vision接口,該類型接口與標(biāo)準(zhǔn)千兆以太網(wǎng)接口在硬件架構(gòu)上基本一樣,但在底層驅(qū)動中改進(jìn)了標(biāo)準(zhǔn)千兆網(wǎng)傳輸效率較低以及CPU占用率過高的不足[4]。軟件流程如圖4所示,根據(jù)流程示意圖,本文設(shè)計的相機(jī)采集控制過程可以分為如下幾個步驟:
(1)解析ccf相機(jī)配置文件,對相機(jī)進(jìn)行相關(guān)參數(shù)的設(shè)置和相關(guān)資源的初始化。
(2)定義一個回調(diào)函數(shù)XferCallback,該函數(shù)在抓取完一幀數(shù)據(jù)后,便對采集緩沖區(qū)中的數(shù)據(jù)進(jìn)行轉(zhuǎn)移。
(3)在完成上述采集圖像的準(zhǔn)備工作后,便通過SapTransfer的一系列類函數(shù)進(jìn)行圖像的抓取。定義兩個指針p1和p2,其中p1指向采集緩沖區(qū),p2指向圖片內(nèi)存空間。每抓取完一幀圖像數(shù)據(jù),在回調(diào)函數(shù)中通過p1指針和p2指針完成當(dāng)前幀圖像數(shù)據(jù)的轉(zhuǎn)移,將采集緩沖區(qū)數(shù)據(jù)復(fù)制到圖片實際內(nèi)存空間中。
(4)在圖片內(nèi)存空間中每完成了一幀圖像數(shù)據(jù)的轉(zhuǎn)移,便在軟件界面中進(jìn)行顯示,同時檢查是否采集完畢,如果采集完畢則釋放相關(guān)資源,否則返回步驟(3)繼續(xù)采集圖像。
圖4 Dalsa相機(jī)采集控制流程圖
主輔機(jī)之間的通信可以選用兩種方式即TCP和UDP兩種通信協(xié)議。UDP對應(yīng)于無連接的網(wǎng)絡(luò)通信協(xié)議,特點是實時性好、發(fā)送效率高但是可靠性差[5]。鑒于系統(tǒng)對安全性可靠性要求較高而且通道爭用的情況較少,這里采用面向連接的TCP協(xié)議。TCP協(xié)議在發(fā)送數(shù)據(jù)之前必須確認(rèn)接收方的存在,在接收方通信可用的情況下建立連接,同時接收方在收到數(shù)據(jù)包后也會向發(fā)送方提供反饋,這樣的機(jī)制使得TCP提供了可靠的運輸服務(wù)[6]。本系統(tǒng)通過MFC中CSocket類來創(chuàng)建、管理和使用套接字。同時,基于Socket的圖像傳輸其實是對文件的二進(jìn)制數(shù)據(jù)流進(jìn)行操作。將圖片用文件流形式讀取到計算機(jī)內(nèi)存當(dāng)中,再分片打包發(fā)送。這里利用C++標(biāo)準(zhǔn)庫函數(shù)中的FILE類實現(xiàn)對圖像的數(shù)據(jù)流處理,循環(huán)讀取圖片的文件流,通過SOCKET套接字發(fā)送到通信網(wǎng)絡(luò)中。在接收端同樣建立一個空文件,然后將接收到的文件流寫入文件,以此來還原圖片。
子系統(tǒng)之間的數(shù)據(jù)通信都是通過以太網(wǎng)進(jìn)行傳輸?shù)?,?dāng)前的網(wǎng)絡(luò)環(huán)境的異常對數(shù)據(jù)傳輸?shù)姆€(wěn)定性和可靠性會造成影響,因此檢測當(dāng)前網(wǎng)絡(luò)和發(fā)生異常情況下保證數(shù)據(jù)完整性的重傳機(jī)制就非常重要。
在TCP協(xié)議里是通過心跳包機(jī)制來確認(rèn)客戶端和服務(wù)器的連接是否存在,心跳包就是客戶端按照預(yù)定時間向服務(wù)器發(fā)送固定內(nèi)容來通知服務(wù)器自己的存在,編程中通過設(shè)置SO_KEEPALIVE選項來實現(xiàn)[7]。但是這樣的機(jī)制還不足以應(yīng)對電腦故障、網(wǎng)線異常和防火墻攔截造成的斷線情況,所以在整個系統(tǒng)中做了通信異常的檢測和重發(fā)的防護(hù)機(jī)制,以此來確保數(shù)據(jù)的完整性。本系統(tǒng)中重寫了新的Socket類,繼承自CSocket類,在通信過程中,如果發(fā)生斷線或者發(fā)送/接收端程序異常時,Receive和Send會發(fā)生阻塞或者返回失敗。當(dāng)Receive和Send函數(shù)操作發(fā)生阻塞超時或者返回失敗時,定時器會觸發(fā)標(biāo)志位置為FALSE。這樣客戶端或者服務(wù)器都可以通過在發(fā)送、接收循環(huán)中檢測CTimeOutSocket類的Isabnormal標(biāo)志位來判斷是否發(fā)送、接收異常。當(dāng)檢測到通信異常時,客戶機(jī)會在數(shù)據(jù)庫中將本次要發(fā)送的數(shù)據(jù)的狀態(tài)記錄下來,并且不斷嘗試重新連接,當(dāng)連接成功后進(jìn)行數(shù)據(jù)庫遍歷搜索到未發(fā)送的記錄進(jìn)行重傳。數(shù)據(jù)庫中定義了一個記錄類型TrainDataBase,表1說明了其內(nèi)容格式。
表1 TrainDataBase數(shù)據(jù)表
針對本文實現(xiàn)的圖像傳輸做了性能測試,實驗將各個小模塊作為整體系統(tǒng)進(jìn)行相關(guān)測試,測試環(huán)境圖像采集計算機(jī)、服務(wù)器的配置如表2所示。測試過程使用TFDS模擬信號發(fā)生器模擬接車,連續(xù)模擬過車40列,每列56輛,其中模擬列車速度分別為5 km/h、20 km/h、40 km/h、80 km/h各10列。測試采用2臺圖像采集計算機(jī),每臺計算機(jī)連接2部線陣相機(jī),其中一臺作為主機(jī),數(shù)據(jù)大小為一臺計算機(jī)2部相機(jī)拍攝圖像的總大小,圖片為jpg格式。
表2 測試環(huán)境
表3為測試結(jié)果的平均值,從表3中的測試結(jié)果可以看出,系統(tǒng)性能經(jīng)過測試后均與預(yù)期結(jié)果一致,在疲勞測試中也保持較穩(wěn)定的性能,結(jié)果符合預(yù)期效果,驗證了本文設(shè)計可以在TFDS系統(tǒng)中為后續(xù)的檢測提供穩(wěn)定的圖像采集和傳輸服務(wù)。
表3 系統(tǒng)性能測試信息
本文針對實際項目需求,為了系統(tǒng)的穩(wěn)定性和可擴(kuò)展性,采用主輔機(jī)結(jié)構(gòu)實現(xiàn)了多臺工業(yè)相機(jī)同時采集圖像的功能,通過Socket TCP協(xié)議實現(xiàn)采集系統(tǒng)到服務(wù)器的數(shù)據(jù)傳輸?;赟ocket來編寫應(yīng)用程序,服務(wù)器方和客戶方應(yīng)用程序都要進(jìn)行初始化處理,指定連接的端口和IP地址。利用CSocket類可以依據(jù)流式套接字的編程模式,方便地實現(xiàn)TCP通信協(xié)議,用戶不必再去處理字節(jié)順序等問題,只需要應(yīng)對通信連接失敗時系統(tǒng)可靠性的問題。該圖像采集傳輸及控制系統(tǒng)的方法目前已經(jīng)成功應(yīng)用在TFDS項目系統(tǒng)當(dāng)中。實踐表明,該方法能很好地滿足用戶需求,采集相機(jī)可在4~8個范圍內(nèi)動態(tài)擴(kuò)展,同時在通信出現(xiàn)異常的情況下也能很好地保存數(shù)據(jù),等待通信恢復(fù)繼續(xù)傳輸。