費(fèi)惠 張維忠
摘要:為提高公交客流計(jì)數(shù)系統(tǒng)的實(shí)時(shí)性及準(zhǔn)確性,本文分別對(duì)車載信息終端的控制器局域網(wǎng)絡(luò)(controller area network,CAN)總線及RS485線協(xié)議進(jìn)行研究。通過(guò)實(shí)時(shí)采集車載信息終端數(shù)據(jù)并解析,獲取公交實(shí)時(shí)運(yùn)行信息。將公交車上的CAN總線和RS485線的信號(hào)通過(guò)串口轉(zhuǎn)換器變?yōu)镽S232信號(hào),并基于Linux和Windows兩種操作系統(tǒng)設(shè)計(jì)了兩套數(shù)據(jù)分析系統(tǒng),用戶可以根據(jù)公交客流計(jì)數(shù)系統(tǒng)的基本需求,實(shí)時(shí)獲取公交車的相關(guān)信息。實(shí)地測(cè)試結(jié)果表明,該設(shè)計(jì)能夠?qū)崟r(shí)精確的獲取車輛的各項(xiàng)信息,達(dá)到預(yù)期目標(biāo),說(shuō)明本文所采用的數(shù)據(jù)分析算法,準(zhǔn)確率高、效率高、魯棒性好,為公交客流計(jì)數(shù)系統(tǒng)提供了有效信息。該研究具有很好的實(shí)際應(yīng)用價(jià)值。
關(guān)鍵詞:車載信息終端; CAN總線; RS485; 客流計(jì)數(shù)
中圖分類號(hào): TP311.1; TN919.5文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 10069798(2019)01000906; DOI: 10.13306/j.10069798.2019.01.002
目前,公交車車載信息終端[12]的通信方式主要分為RS485[34]和CAN總線[56]兩種。車載信息終端同時(shí)具有遠(yuǎn)程定位、實(shí)時(shí)通信、車況信息采集、自動(dòng)報(bào)站等多種功能,并且能夠和公交車的其他設(shè)備相關(guān)聯(lián),方便管理者對(duì)公共交通的實(shí)時(shí)調(diào)度。因此,將這些實(shí)時(shí)信息應(yīng)用到智能客流量統(tǒng)計(jì)系統(tǒng),能夠豐富系統(tǒng)的功能,提高系統(tǒng)的實(shí)用性[78]。公交車載信息終端通過(guò)通用分組無(wú)線服務(wù)技術(shù)(general packet radio service,GPRS)通信單元,將全球定位系統(tǒng)(global positioning system,GPS)模塊獲取的實(shí)時(shí)位置信息等發(fā)送到后臺(tái),實(shí)現(xiàn)公交的定位功能以及語(yǔ)音播報(bào),促進(jìn)城市公交的智能化發(fā)展[9]。目前,CAN總線在公交上的應(yīng)用日趨成熟。其中,安連華等人[10]通過(guò)CAN總線實(shí)時(shí)獲取公交油耗信息,防止偷油行為的同時(shí),可以有效監(jiān)測(cè)駕駛員行車規(guī)范;趙祥模等人[11]采用基于視頻的客流統(tǒng)計(jì)方法,能夠有效監(jiān)測(cè)公交客流量,但客流數(shù)據(jù)沒(méi)有與站點(diǎn)信息相結(jié)合。公交車的車站名稱信息能夠直接反映當(dāng)前站點(diǎn)的客流量統(tǒng)計(jì)信息,減少智能客流量統(tǒng)計(jì)系統(tǒng)對(duì)車站信息獲取的信息量。2018年初,青島新進(jìn)一批比亞迪純電動(dòng)公交車,其中有400多輛安裝了智能客流量統(tǒng)計(jì)系統(tǒng),因此加強(qiáng)對(duì)公交車的實(shí)時(shí)信息采集、分析及應(yīng)用具有重要意義?;诖耍疚闹饕獙?duì)車載信息終端的CAN總線及RS485線協(xié)議進(jìn)行研究,通過(guò)對(duì)車載信息終端數(shù)據(jù)進(jìn)行采集與分析,并基于Linux和Windows兩種操作系統(tǒng),設(shè)計(jì)了兩套數(shù)據(jù)分析系統(tǒng),用戶可以根據(jù)公交客流計(jì)數(shù)系統(tǒng)的基本需求,實(shí)時(shí)獲取公交車的相關(guān)信息,提高了系統(tǒng)的準(zhǔn)確性,減輕了系統(tǒng)的工作負(fù)擔(dān)。該研究提高了公交等智能化水平,在公交客流統(tǒng)計(jì)方面具有廣闊的應(yīng)用前景。
1硬件設(shè)計(jì)與軟件實(shí)現(xiàn)
1.1硬件設(shè)計(jì)
車載CAN總線采用RS232轉(zhuǎn)CAN模塊[12],RS485線采用RS232轉(zhuǎn)RS485模塊[13],其中每個(gè)模塊分為有源和無(wú)源兩種型號(hào),用戶可以根據(jù)情況進(jìn)行選擇。本文采用RS232轉(zhuǎn)CAN模塊,RS232轉(zhuǎn)CAN總線電路原理圖如圖1所示。其中,主要包括RS232串行接口驅(qū)動(dòng)器、CAN線控制器和驅(qū)動(dòng)器。該模塊具有數(shù)據(jù)透明轉(zhuǎn)換功能,其中CAN總線波特率支持5 kBd/s~1 MBd/s,串口波特率支持1 200~460 800 Bd/s,適應(yīng)范圍廣,而且支持CAN20A和CAN20B協(xié)議,支持標(biāo)準(zhǔn)幀和擴(kuò)展模式。
RS232轉(zhuǎn)RS485模塊分為有源和無(wú)源兩種,RS232轉(zhuǎn)RS485電路原理圖如圖2所示,DB9端的2腳和3腳分別是接收端和發(fā)送端,經(jīng)過(guò)TTL轉(zhuǎn)232電路和TTL轉(zhuǎn)485電路,該模塊可將RS232信號(hào)轉(zhuǎn)換為平衡差分的RS485信號(hào),從而實(shí)現(xiàn)雙向通信功能。其工作方式為異步半雙工,波特率支持范圍是9 600~115 200 Bd/s。
1.2軟件實(shí)現(xiàn)
1.2.1CAN總線協(xié)議分析
車載信息終端與其他設(shè)備進(jìn)行數(shù)據(jù)通信時(shí),一般采用250 kBd/s的CAN波特率和57 600 Bd/s串口波特率。CAN接口協(xié)議分為ID域和數(shù)據(jù)域兩部分,CAN接口協(xié)議構(gòu)成圖如圖3所示。報(bào)文ID域是報(bào)文的唯一標(biāo)識(shí),其中SA源地址和DA目標(biāo)地址表示該報(bào)文的發(fā)送方和接收方,F(xiàn)N報(bào)文幀序號(hào)代表當(dāng)前報(bào)文在當(dāng)前會(huì)話中的位置。CAN報(bào)文數(shù)據(jù)域構(gòu)成圖如圖4所示。報(bào)文數(shù)據(jù)域由版本號(hào)、流水號(hào)、消息幀、校驗(yàn)值4部分組成,其中消息幀由消息幀類型、消息幀長(zhǎng)度及數(shù)據(jù)幀集合組成。每個(gè)數(shù)據(jù)幀由數(shù)據(jù)幀類型、數(shù)據(jù)幀長(zhǎng)度和數(shù)據(jù)元素組成。校驗(yàn)值是從版本號(hào)開(kāi)始到校驗(yàn)值之前所有字節(jié)的異或值[1415]。
一部分CAN總線的數(shù)據(jù)幀類型如表1所示,CAN總線的消息幀類型如表2所示。一個(gè)完整的報(bào)文數(shù)據(jù)需要分包發(fā)送,每包發(fā)送8字節(jié)數(shù)據(jù)和4字節(jié)的ID域,直到所有數(shù)據(jù)發(fā)送完為止,最后一包數(shù)據(jù)如果不足8字節(jié),則補(bǔ)0。
1.2.2RS485協(xié)議分析
設(shè)定RS485車載信息終端與外部設(shè)備通訊接口參數(shù)為串口波特率19 200 Bd/s,8位數(shù)據(jù)位,1位停止位,無(wú)奇偶檢驗(yàn)位。RS485為了提高協(xié)議的兼容性,由數(shù)據(jù)幀靈活組合構(gòu)成的消息幀可適應(yīng)不同的需求,避免嚴(yán)格的固定長(zhǎng)度消息幀造成冗余,從而減少資源浪費(fèi)。RS485數(shù)據(jù)報(bào)文由開(kāi)始符、目標(biāo)地址、源地址、消息幀、校驗(yàn)值和結(jié)束符組成。
RS485接口協(xié)議構(gòu)成圖如圖5所示,RS485的部分?jǐn)?shù)據(jù)幀類型如表3所示,消息幀類型如表4所示。通過(guò)對(duì)車載信息終端數(shù)據(jù)的采集與分析,可獲得公交車的實(shí)時(shí)位置信息、當(dāng)前時(shí)速信息、到站離站信息及當(dāng)前站點(diǎn)名稱信息等。
1.2.3技術(shù)方案
該系統(tǒng)的主要功能是實(shí)現(xiàn)對(duì)車載信息系統(tǒng)的數(shù)據(jù)采集到解析輸出的全過(guò)程。系統(tǒng)流程圖如圖6所示。
該部分的核心思想是通過(guò)串口通信,即串口編程實(shí)現(xiàn)CAN總線和RS485的數(shù)據(jù)接收,然后根據(jù)協(xié)議標(biāo)準(zhǔn)對(duì)接收到的數(shù)據(jù)解析處理,并根據(jù)消息幀的類型,提取客流統(tǒng)計(jì)系統(tǒng)所需要的站點(diǎn)相關(guān)的報(bào)文信息,去除冗余數(shù)據(jù),同時(shí)根據(jù)報(bào)文的編碼規(guī)則,作出相對(duì)應(yīng)的解碼方案,將十六進(jìn)制數(shù)據(jù)翻譯成常人能看懂的站點(diǎn)信息。算法實(shí)現(xiàn)流程圖如圖7所示。
具體實(shí)現(xiàn)方法及步驟:
(1)Linux系統(tǒng)。
1)調(diào)用open( )函數(shù)打開(kāi)串口/dev/ttyS0,并設(shè)置串口的讀寫(xiě)模式。
2)對(duì)termios結(jié)構(gòu)指針進(jìn)行相關(guān)配置,修改控制模式,設(shè)置波特率、數(shù)據(jù)位、校驗(yàn)位、停止位,修改輸入輸出模式,然后進(jìn)行超時(shí)設(shè)置。
3)調(diào)用read()函數(shù)對(duì)串口進(jìn)行讀操作。
4)調(diào)用getCompleteFrame()函數(shù)對(duì)數(shù)據(jù)進(jìn)行分析處理,獲得當(dāng)前公交車的站點(diǎn)信息、到站離站信息等。
5)write()函數(shù)可上傳數(shù)據(jù)到車載信息終端。
6)調(diào)用函數(shù)close()關(guān)閉串口。
(2)Windows系統(tǒng)。
1)調(diào)用CreateFile()函數(shù)打開(kāi)串口COM*。
2)調(diào)用SetCommState()函數(shù)配置串口基本參數(shù),SetCommTimeouts()函數(shù)對(duì)串口進(jìn)行超時(shí)設(shè)置,調(diào)用SetupComm()函數(shù)定義了輸入輸出緩沖區(qū)的大小。
3)調(diào)用ReadFile()函數(shù)對(duì)串口進(jìn)行讀操作。
4)調(diào)用getCompleteFrame()函數(shù)對(duì)數(shù)據(jù)進(jìn)行分析處理,獲取車輛實(shí)時(shí)信息。
5)調(diào)用WriteFile()函數(shù)可以將獲得的數(shù)據(jù)實(shí)時(shí)上傳到車載信息終端。
6)調(diào)用CloseHandle()函數(shù)關(guān)閉串口。
由于串口每次接收的數(shù)據(jù)長(zhǎng)度不固定,而且每個(gè)完整的報(bào)文數(shù)據(jù)可能分多次發(fā)送[18]。因此,getCompleteFrame()函數(shù)首先需要將接收到的數(shù)據(jù)保存在隊(duì)列內(nèi),然后從隊(duì)列頭開(kāi)始對(duì)數(shù)據(jù)解析處理,發(fā)現(xiàn)報(bào)文結(jié)束標(biāo)志后,根據(jù)報(bào)文數(shù)據(jù)的長(zhǎng)度及校驗(yàn)值確定該報(bào)文數(shù)據(jù)是否完整。如果當(dāng)前隊(duì)列內(nèi)沒(méi)有完整數(shù)據(jù)幀時(shí),則繼續(xù)接收新的數(shù)據(jù)。每當(dāng)解析出一個(gè)完整的報(bào)文數(shù)據(jù),就清空當(dāng)前隊(duì)列內(nèi)的所有數(shù)據(jù),重新接收下一報(bào)文。此外,如果隊(duì)列長(zhǎng)度超出內(nèi)存長(zhǎng)度的066,拋棄隊(duì)列的前066部分,既能防止有效信息丟失,還能避免內(nèi)存溢出造成的系統(tǒng)崩潰。同時(shí),采用多線程串口通信[1920],提高處理效率。
2實(shí)驗(yàn)結(jié)果
CAN總線在Linux下測(cè)試,RS485在Windows下測(cè)試。實(shí)驗(yàn)結(jié)果表明,該設(shè)計(jì)能夠?qū)崟r(shí)精確的獲取車輛的各項(xiàng)信息,達(dá)到預(yù)期目標(biāo)。CAN總線測(cè)試結(jié)果如圖8所示,其中Complete Date表示當(dāng)前接收到的報(bào)文數(shù)據(jù)域部分,所有數(shù)字為十六進(jìn)制表示。以南莊二為例:20表示版本號(hào),14表示流水號(hào),該數(shù)字隨機(jī)產(chǎn)生,03表示該消息幀代表進(jìn)站離站信息,00 25表示消息幀總長(zhǎng)度為十進(jìn)制37,01表示具體的數(shù)據(jù)幀類型是什么,00 04表示該數(shù)據(jù)幀內(nèi)容的長(zhǎng)度為4字節(jié),后面緊跟4字節(jié)的數(shù)據(jù)幀內(nèi)容00 00 17 74,后面的05 00 01 01也是一組完整數(shù)據(jù)幀,以此類推,最后的49表示校驗(yàn)位,如果該值與前面所有的數(shù)字異或值相同,則表示該報(bào)文接收無(wú)誤。根據(jù)消息幀類型、數(shù)據(jù)幀類型以及數(shù)據(jù)幀的內(nèi)容部分,解析當(dāng)前車輛線路是上行下行、當(dāng)前站點(diǎn)是終點(diǎn)站還是其他站點(diǎn)、進(jìn)站離站、站點(diǎn)編號(hào)及站點(diǎn)中文名。
RS485測(cè)試結(jié)果如圖9所示。以團(tuán)島進(jìn)站信號(hào)為例:7e代表會(huì)話包的開(kāi)始,最后的7f代表會(huì)話包的結(jié)束,ff 01表示目標(biāo)地址和源地址,03表示該會(huì)話包的消息幀類型為服務(wù)播報(bào),07是隨機(jī)產(chǎn)生的流水號(hào),00 23表示后面所有的數(shù)據(jù)幀總長(zhǎng)度,02 00 01 01表示數(shù)據(jù)幀類型為02,內(nèi)容長(zhǎng)度為00 01,內(nèi)容為01的一個(gè)完整數(shù)據(jù)幀,以此類推,結(jié)束符前的2f表示校驗(yàn)位,該值應(yīng)與從包頭開(kāi)始到校驗(yàn)位之前所有數(shù)字異或值相同。
當(dāng)車輛進(jìn)站時(shí),發(fā)出到站信號(hào),顯示當(dāng)前站點(diǎn)類型,獲得當(dāng)前站點(diǎn)編號(hào)及站點(diǎn)中文名;當(dāng)車輛離站時(shí),發(fā)出離站信號(hào),顯示當(dāng)前站點(diǎn)類型,獲得下一站的站點(diǎn)編號(hào)及站點(diǎn)中文名。這樣可以將每站的客流量信息對(duì)應(yīng)加在每個(gè)站點(diǎn)上,并且可以與電子站牌相結(jié)合,讓公共交通更加智能化。
3結(jié)束語(yǔ)
本文主要對(duì)車載信息終端在智能客流量系統(tǒng)中的應(yīng)用進(jìn)行研究。分析了CAN總線和RS485協(xié)議標(biāo)準(zhǔn),并對(duì)現(xiàn)場(chǎng)環(huán)境進(jìn)行實(shí)驗(yàn)測(cè)試。測(cè)試結(jié)果表明,本文所設(shè)計(jì)的兩套分析系統(tǒng),能夠精準(zhǔn)的采集并解析車載信息終端的數(shù)據(jù),結(jié)合公交客流計(jì)數(shù)系統(tǒng)的需求特點(diǎn),實(shí)時(shí)獲取公交車的線路類型、站點(diǎn)編號(hào)、站點(diǎn)名稱、進(jìn)站離站等信息;長(zhǎng)時(shí)間的測(cè)試結(jié)果表明,本系統(tǒng)的魯棒性高、算法穩(wěn)定,為客流統(tǒng)計(jì)系統(tǒng)的發(fā)展提供了技術(shù)支持,大大提高公共交通的智能化水平,其應(yīng)用前景廣闊。此外,當(dāng)信號(hào)環(huán)境極差時(shí),GPS對(duì)公交車定位會(huì)出現(xiàn)偏差,間接影響車輛位置信息的精準(zhǔn)度,后期應(yīng)對(duì)該問(wèn)題進(jìn)行優(yōu)化改進(jìn),提高系統(tǒng)的魯棒性。
參考文獻(xiàn):
[1]吳建芳. 嵌入式車載信息終端的實(shí)現(xiàn)研究[D]. 哈爾濱: 哈爾濱工程大學(xué), 2010.
[2]韓敏艷. 車輛監(jiān)控系統(tǒng)研究與設(shè)計(jì)[D]. 哈爾濱: 哈爾濱工程大學(xué), 2007.
[3]許燕萍, 楊代華. RS485串行總線可靠性的研究[J]. 電子科技, 2009, 22(2): 810, 22.
[4]馮子陵, 俞建新. RS485總線通信協(xié)議的設(shè)計(jì)與實(shí)現(xiàn)[J]. 計(jì)算機(jī)工程, 2012, 38(20): 215218.
[5]曹萬(wàn)科. CAN協(xié)議車載網(wǎng)絡(luò)若干關(guān)鍵理論研究[D]. 沈陽(yáng): 東北大學(xué), 2008.
[6]陳曦. CAN總線實(shí)時(shí)性和可靠性若干問(wèn)題的研究[D]. 天津: 天津大學(xué), 2010.
[7]侯竑炤. 基于Android的車載物聯(lián)信息終端研究與設(shè)計(jì)[D]. 上海: 復(fù)旦大學(xué), 2012.
[8]蔡曉利. 公交車人數(shù)統(tǒng)計(jì)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D]. 成都: 電子科技大學(xué), 2016.
[9]Jia Yanxia. Onvehicle information terminal of urban public transit dispatching[J]. China Standardization, 2013 (5): 8285.
[10]安連華, 管德永, 程鵬. CAN總線在智能公交系統(tǒng)中的應(yīng)用[J]. 城市公共交通, 2016(1): 3639.
[11]趙祥模, 閔海根, 常志國(guó), 等. 一種基于視頻的公交客流自動(dòng)統(tǒng)計(jì)方法[J]. 計(jì)算機(jī)工程, 2015, 41(6): 136142.
[12]趙志軍, 王建英. RS232/CAN智能協(xié)議轉(zhuǎn)換器及其通信網(wǎng)絡(luò)[J]. 中國(guó)鐵道科學(xué), 2007, 28(3): 134139.
[13]陸熊, 周杏鵬. 基于ISA總線的RS232/RS485(RS422)通訊轉(zhuǎn)換卡[J]. 工業(yè)控制計(jì)算機(jī), 2003, 16(2): 1718.
[14]全國(guó)文獻(xiàn)工作標(biāo)準(zhǔn)化技術(shù)委員會(huì)第七分委會(huì). T/ITS 0026—2015 海信城市公共汽電車車載智能服務(wù)終端與調(diào)度中心間數(shù)據(jù)通信協(xié)議[S]. 北京: 中國(guó)標(biāo)準(zhǔn)出版社, 2015.
[15]全國(guó)文獻(xiàn)工作標(biāo)準(zhǔn)化技術(shù)委員會(huì)第七分委會(huì). T/ITS 0027—2015 海信城市公共汽電車車載智能服務(wù)終端數(shù)據(jù)總線接口通信規(guī)范[S]. 北京: 中國(guó)標(biāo)準(zhǔn)出版社, 2015.
[16]嚴(yán)賢, 韓秀玲. 基于Qt的串口通信應(yīng)用研究與實(shí)現(xiàn)[J]. 微計(jì)算機(jī)信息, 2012, 28(8): 114116.
[17]李曉鋒, 胡良君, 宋銳. 基于Qt5的MODBUS協(xié)議編程與實(shí)現(xiàn)[J]. 中小企業(yè)管理與科技, 2016(11): 138139.
[18]侯師, 李正新, 王琳. 一種定長(zhǎng)單字節(jié)格式報(bào)文協(xié)議下串口接收預(yù)處理方法: 中國(guó), H04L29/06[P]. 20170615.
[19]陳讓琛. 多線程串口通信技術(shù)在北斗導(dǎo)航中的運(yùn)用分析[J]. 無(wú)線互聯(lián)科技, 2017(15): 89, 79.
[20]岳明, 何波賢, 余博超, 等. 基于VC++串口多線程通信的實(shí)現(xiàn)[J]. 電腦編程技巧與維護(hù), 2016(10): 38, 65.