《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > CAN總線在野外地震數(shù)據(jù)傳輸中的應(yīng)用
CAN總線在野外地震數(shù)據(jù)傳輸中的應(yīng)用
來源:電子技術(shù)應(yīng)用2013年第9期
陳 瑛,宋俊磊,王典洪
中國地質(zhì)大學(xué)(武漢) 機械與電子信息學(xué)院,湖北 武漢430074
摘要: 野外地震數(shù)據(jù)傳輸和組網(wǎng)技術(shù)是地震臺網(wǎng)建設(shè)中的重要組成部分,關(guān)系著地震數(shù)據(jù)的實時性、有效性等問題。采用CAN總線連接分散的地震采集點,并利用ARM微處理器、多任務(wù)操作系統(tǒng)Linux和應(yīng)用程序框架Qt共同構(gòu)建地震臺網(wǎng)局部管理系統(tǒng),大大簡化了流動站管理任務(wù),為組建更大規(guī)模的流動采集站提供了可能。
關(guān)鍵詞: ARM CAN總線 野外傳輸 Linux QT
中圖分類號: TH762
文獻(xiàn)標(biāo)識碼: A
文章編號: 0258-7998(2013)09-0034-04
Application of CAN bus in field seismic data transmission
Chen Ying,Song Junlei,Wang Dianhong
Faculty of Mechanical & Electronic Information,China University of Geosciences,Wuhan 430074,China
Abstract: Technology of transmission and networking on field seismic data is an important part of seismic network,which concerns real-time and effectivity of seismic data.Design of connecting dispersed data acquisition nodes via CAN bus is detailed. A local seismic management system is constructed based on ARM microprocessor, multitask operating system Linux as well as application framework Qt,that simplifies management tasks of mobile station and makes it possible to construct larger-scale mobile station.
Key words : CAN bus;field communication;ARM;Linux;Qt

    目前,地震預(yù)報的信息來源主要依靠遍布在各處的地震觀測臺站所監(jiān)測到的地震數(shù)據(jù)。隨著地震觀測臺網(wǎng)規(guī)模日益擴大,實時性和數(shù)據(jù)量的要求也在不斷提高。除了固定的地方地震觀測臺站以外,還有大量野外流動地震觀測站。流動觀測站主要對一定時間和地區(qū)內(nèi)的數(shù)據(jù)進(jìn)行強化觀測,用以提高監(jiān)測能力和異常跟蹤能力,并可以針對多種物理量進(jìn)行采集,將數(shù)據(jù)反饋到臺網(wǎng)中心[1]。因此,一個流動站常常會布置數(shù)量眾多而又分散的采集點,而如何將這些分散的采集點的數(shù)據(jù)傳輸?shù)降卣鹋_網(wǎng),是野外流動觀測技術(shù)的關(guān)鍵之一。

    在野外復(fù)雜環(huán)境中,通常將采集節(jié)點數(shù)據(jù)匯總至流動站,再由流動站統(tǒng)一接入互聯(lián)網(wǎng)。局部數(shù)據(jù)的傳輸方式可有多種選擇,需要綜合考慮距離、便捷性、可靠性及成本等多種因素。本文中設(shè)計了一種采用控制器局域網(wǎng)(CAN)進(jìn)行地震數(shù)據(jù)傳輸?shù)姆绞剑詽M足分散的采集點能在相對較廣范圍內(nèi)進(jìn)行組網(wǎng)通信的要求。
1 系統(tǒng)框架
    本文以激光多普勒地震儀項目為背景進(jìn)行系統(tǒng)構(gòu)建,主要解決將分散的采集點進(jìn)行集中管理的問題。由于野外采集點數(shù)量眾多,且安裝位置較分散,若都與流動站之間直接組建局部網(wǎng)絡(luò)連接,則無論采用何種組網(wǎng)方式,都必將加重人力、物力的投入,同時也會加重流動站的管理負(fù)擔(dān)。因此,本文采用中繼站的思想,將一定區(qū)域內(nèi)的采集點利用總線方式匯總到主控機上,再由主控機統(tǒng)一將數(shù)據(jù)傳輸?shù)搅鲃诱荆到y(tǒng)結(jié)構(gòu)如圖1所示。采用這種分布式結(jié)構(gòu),一方面可以降低采集點組建網(wǎng)絡(luò)的成本,另一方面主控機可以取代部分流動站的功能,對本局域網(wǎng)內(nèi)的采集點進(jìn)行管理和監(jiān)控,便于組成規(guī)模更大的野外流動站。

    系統(tǒng)采用的控制器局域網(wǎng)(CAN)是一種ISO國際標(biāo)準(zhǔn)化的串行通信協(xié)議,能有效支持具有很高安全等級的分布實時控制。相對于其他總線,CAN總線具有傳輸距離遠(yuǎn)、速度較快、抗干擾能力強、介質(zhì)簡單、可靠性高等優(yōu)勢[2-3],適合野外無人值守的環(huán)境。
2 采集節(jié)點的CAN通信實現(xiàn)
    項目中采集點的主控芯片采用TI公司C54系列DSP,因芯片不帶CAN控制端口,所以要在DSP平臺上實現(xiàn)CAN通信節(jié)點的設(shè)計。
2.1 基于DSP的傳輸節(jié)點設(shè)計
    項目選取SPI接口的獨立控制器MCP2515作為總線控制端,收發(fā)器采用帶有隔離的總線收發(fā)器ADM3054,該芯片直接將隔離器和收發(fā)器集成到一起,省去了控制器與收發(fā)器之間的光耦隔離,同時也可解決控制器與收發(fā)器之間的電平匹配問題,簡化外圍電路設(shè)計。
    將DSP的多通道緩沖串行口(McBSP)配置成SPI兼容模式,這種模式下每一幀的長度是固定的。但MCP2515的SPI控制指令長度并不統(tǒng)一,因此,采取折中方案以最長的指令位數(shù)來配置串行口。
    使用SPI模式通信時,關(guān)鍵的問題是時序的匹配,因為DSP的工作時鐘頻率遠(yuǎn)高于SPI傳輸時鐘頻率,所以需要在讀操作時加入足夠長的延時。圖2中的(a)、(b)可反映這一情況,采用控制器的環(huán)回模式進(jìn)行測試,DataSend數(shù)組中存放的是發(fā)送的8 B數(shù)據(jù),RecvBuff數(shù)組中存放的則是通過SPI讀取接收數(shù)據(jù)寄存器得到的值。圖2(a)是沒有加入足夠延時的讀操作,從虛線框標(biāo)出的數(shù)據(jù)看出,讀操作在時間上發(fā)生了錯位,當(dāng)前的讀操作實際讀到的是上一個指令傳送回來的數(shù)據(jù),而圖2(b)在加入了足夠長的延時之后,能在時間上對應(yīng),讀到正確的數(shù)值。

2.2 節(jié)點的通信策略
    CAN協(xié)議所采用的對報文進(jìn)行地址編碼的方式便于在總線上增刪節(jié)點。在本項目中,由于各個節(jié)點都只與主控機進(jìn)行通信,所以,充分利用CAN報文幀ID識別碼的特性,將發(fā)送幀的識別碼、本節(jié)點的編碼以及本節(jié)點接收濾波器的識別碼相統(tǒng)一。而主控機的節(jié)點則可以讀取所有總線上的報文,所采用的通信策略如圖3所示,這樣的設(shè)計實際上就將原先總線式的拓?fù)浣Y(jié)構(gòu)轉(zhuǎn)換成了類似星形拓?fù)涞慕Y(jié)構(gòu),便于主機管理所有節(jié)點。

3 主控制點的設(shè)計
    相對于采集節(jié)點單一的采集處理任務(wù)而言,主控機需要實現(xiàn)更多的功能,單任務(wù)的MCU則無法滿足要求。因此,本文選用嵌入式微處理器ARM11作為主控機的硬件平臺,ARM處理器具有豐富的外設(shè)接口和良好的實時控制性能,無論從尋址空間還是處理性能上,都要優(yōu)于一般的單片機,適合充當(dāng)小型控制中心。
3.1 Linux下CAN網(wǎng)絡(luò)設(shè)備驅(qū)動的實現(xiàn)
    項目中移植了Linux 3.0.1版本內(nèi)核作為軟件運行的系統(tǒng)平臺,內(nèi)核會為驅(qū)動提供統(tǒng)一的接口。在較新版本的內(nèi)核中,CAN設(shè)備已經(jīng)不再簡單定義成字符設(shè)備,而是定義成網(wǎng)絡(luò)設(shè)備,這更接近于CAN是一種局域網(wǎng)的本質(zhì),從而可以使用Socket套接字操作CAN設(shè)備,并使用內(nèi)核提供的高級功能。
    對內(nèi)核已提供的MCP2515的驅(qū)動文件進(jìn)行修改以符合硬件平臺的實現(xiàn)。通過定義mcp251x_priv結(jié)構(gòu)體來管理設(shè)備所有的信息,如下所示:
struct mcp251x_priv {
    struct can_priv       can;
    struct net_device *net;
    struct spi_device *spi;
    ……
};
    以上3個結(jié)構(gòu)體變量分別存放了設(shè)備需要使用的協(xié)議層、網(wǎng)絡(luò)層和硬件層的相關(guān)信息。通常,網(wǎng)絡(luò)設(shè)備驅(qū)動模塊主要包括網(wǎng)絡(luò)協(xié)議接口層、網(wǎng)絡(luò)設(shè)備接口層、設(shè)備驅(qū)動功能層和網(wǎng)絡(luò)設(shè)備與媒介層4層[4],各部分模塊在內(nèi)核中的結(jié)構(gòu)關(guān)系如圖4所示。設(shè)備通過SPI子系統(tǒng)來實現(xiàn)硬件層操作,網(wǎng)絡(luò)設(shè)備與SPI設(shè)備之間的連接橋梁是驅(qū)動功能層struct net_device_ops,通過它向上層提供網(wǎng)絡(luò)設(shè)備的底層硬件操作接口函數(shù):
struct net_device_ops mcp251x_netdev_ops = {
    .ndo_open = mcp251x_open,
    .ndo_stop = mcp251x_stop,
    .ndo_start_xmit = mcp251x_hard_start_xmit,
};

    采用“頂半部”和“底半部”的機制來處理中斷,可以解決在中斷中讀寫SPI耗時的問題,這種機制將耗時過長的中斷程序放到更安全的時段中運行,以使系統(tǒng)能及時響應(yīng)其他的中斷請求[5]。因此,僅僅在中斷函數(shù)中喚醒一個處理函數(shù)的工作隊列:schedule_work(&priv->irq_
work),而將真正的處理程序放到這個工作隊列中運行,以保證系統(tǒng)實時響應(yīng)的性能。
    運行驅(qū)動還需要向內(nèi)核注冊必要的硬件信息,如晶振頻率(.oscillator_frequency)、SPI總線號(.bus_num)、硬件中斷號(.irq)等硬件信息。其中設(shè)備名(.modalias)必須要和驅(qū)動中定義的設(shè)備名相同,否則內(nèi)核無法把這些信息傳遞到驅(qū)動中。
struct mcp251x_platform_data mcp251x_info = {
    .oscillator_frequency = 8000000,
    .board_specific_setup = mcp251x_ioSetup,
    ……
};
struct spi_board_info spi_mcp251x_info[] = {
    {    .modalias = "mcp2515",
        .platform_data = &mcp251x_info,
        .irq = IRQ_EINT(16),
        .bus_num = 1,
    ……
    },
};
3.2 基于Qt的控制應(yīng)用程序開發(fā)
    上層應(yīng)用程序是實現(xiàn)主控制點所有功能的入口,也是人機交互的平臺。項目采用跨平臺的C++應(yīng)用程序開發(fā)框架Qt來實現(xiàn)圖形化用戶界面程序的開發(fā),其具有良好的適應(yīng)性和可移植性[6]。
    本系統(tǒng)中移植了4.8.0版本的Qt庫,如圖5所示。項目應(yīng)用程序的主要框架通過窗體部件類QWidget來構(gòu)建。為了使界面更直觀,加入了對標(biāo)簽窗體類QTabWidget的支持。同時,主控機的Socket CAN通信功能由多線程來實現(xiàn),多線程機制可以使Qt程序在同時運行多個阻塞式任務(wù)時,不會影響用戶界面的響應(yīng)。

 

 

    子線程類RecvThrd主要實現(xiàn)對CAN口的監(jiān)聽任務(wù),并通過信號-槽機制將數(shù)據(jù)傳給主線程,重寫虛成員函數(shù)void RecvThrd :: run( )加載新的線程任務(wù)。Socket CAN的使用類似于其他網(wǎng)絡(luò)協(xié)議操作,主要包括建立套接字、綁定端口和監(jiān)聽等,不同的是CAN通信不需要與對方建立連接,主要實現(xiàn)方式如下:

void RecvThrd :: run( )
{
    rv_sk=socket(PF_CAN,SOCK_RAW,CAN_RAW);
    recv_addr.can_family = AF_CAN;
    recv_addr.can_ifindex = 0;
    bind(rv_sk, (struct sockaddr *)&recv_addr, len);
    recvfrom(rv_sk,(void*)&recv_frame,sizeof(struct can_frame),0,(struct sockaddr *)&recv_addr, &len);
    ……
}
    如圖6所示,使用繪圖類QPainter在子窗口Graph中實時顯示動態(tài)數(shù)據(jù)曲線和坐標(biāo)。繪制坐標(biāo)曲線時首先要使用QPainter的視窗轉(zhuǎn)換函數(shù)將Qt中默認(rèn)的繪圖坐標(biāo)原點從屏幕的左上角移到左下角。動態(tài)曲線采用折線方式繪制,當(dāng)曲線超過一定寬度后,會實時向左平移。由于在Qt中使用專門定義的數(shù)據(jù)類型,所以C中的通用數(shù)據(jù)類型都需經(jīng)過特定轉(zhuǎn)換后才能供Qt使用和顯示。管理數(shù)據(jù)和文件時使用流操作可有效減少系統(tǒng)調(diào)用次數(shù),提高運行速度[7]。
4 測試與總結(jié)
    將Qt應(yīng)用程序交叉編譯后,下載到ARM平臺上運行,產(chǎn)生圖6中的標(biāo)簽式窗口界面。在構(gòu)造主窗體時傳入Qt :: FramelessWindowHint參數(shù),可以讓界面不產(chǎn)生標(biāo)題欄,使窗口界面能準(zhǔn)確并完整地顯示在液晶屏上。
    當(dāng)主線程檢測到新的地震采集節(jié)點號時,會彈出消息框通知用戶處理,新節(jié)點會被加入每個子窗口的設(shè)備列表中,或被丟棄。引入Qt的互斥鎖QMutex機制,可以有效避免因命令沒有得到及時處理而導(dǎo)致重復(fù)添加相同ID號的情況。在另外兩個子窗口中可以瀏覽接收的數(shù)據(jù)以及管理對應(yīng)節(jié)點。

    測試表明,基于ARM平臺的主控機可以滿足數(shù)據(jù)收發(fā)、實時顯示、節(jié)點監(jiān)控以及異常記錄等多任務(wù)要求,在不影響與地震采集節(jié)點間通信的前提下,實現(xiàn)良好的人機交互和實時控制性能,在整個網(wǎng)絡(luò)系統(tǒng)中起中繼站的作用,方便了流動站對分散的地震采集節(jié)點的控制和管理。
    本文設(shè)計了一種采用CAN總線通信技術(shù)在地震數(shù)據(jù)采集點與流動站之間進(jìn)行數(shù)據(jù)傳輸?shù)姆绞剑肅AN總線通信傳輸距離長、抗干擾能力強、易于施工布線的特點,以及微處理器ARM優(yōu)越的實時控制能力和良好的通信能力,在地震采集節(jié)點與流動站之間構(gòu)建中間控制點,以星形拓?fù)涞姆绞綄⒁欢ǚ秶鷥?nèi)分散的采集點集中控制。同時,通過在ARM硬件平臺上構(gòu)建Linux多任務(wù)系統(tǒng)平臺,采用Qt嵌入式應(yīng)用程序框架搭建人機交互界面,實現(xiàn)了良好的實時控制和管理功能。這種基于CAN總線和嵌入式技術(shù)的地震數(shù)據(jù)傳輸方式,既便于野外環(huán)境中網(wǎng)絡(luò)的組建和拓展,也有利于減輕流動站的管理任務(wù)。
參考文獻(xiàn)
[1] 王晨,滕云田,王曉美,等.地震前兆野外流動觀測無線組網(wǎng)系統(tǒng)[J].地球物理學(xué)進(jìn)展,2012,27(3):945-949.
[2] 郭成鎮(zhèn),何迪.CAN總線的PLC通信網(wǎng)絡(luò)的研究[J].通信技術(shù),2012,45(7):51-53,74.
[3] 梁金芝.CAN總線協(xié)議在嵌入式系統(tǒng)中的應(yīng)用[J].電腦知識與技術(shù),2011,7(20):5003-5004.
[4] 宋寶華.Linux設(shè)備驅(qū)動開發(fā)詳解(第2版)[M].北京:人民郵電出版社,2010.
[5] CORBET J,RUBIN A,KROAH-HARTMAN G.Linux設(shè)備驅(qū)動程序(第3版)[M].魏永明,耿岳,鐘書毅,譯.北京:中國電力出版社,2005.
[6] BLANCHETTE J,SUMMERFIELD M.C++ GUI Qt 4編程(第2版)[M].閆鋒欣,譯.北京:電子工業(yè)出版社,2008.
[7] MATTHEW N,STONES R.Linux程序設(shè)計(第4版)[M].陳健,宋健建,譯.北京:人民郵電出版社,2010.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲人成绝费网站色www| 亚洲午夜一级| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 久久伊人精品天天| 香蕉成人久久| 羞羞答答国产精品www一本 | 国产一区三区三区| 国产欧美日韩视频| 国产精品一区一区三区| 国产精品国产三级国产a| 欧美日韩在线一区| 欧美日韩另类一区| 欧美日韩在线视频观看| 欧美午夜不卡| 国产精品高潮呻吟久久av无限 | 亚洲欧美日韩国产中文| 亚洲视频一区二区免费在线观看| 中国亚洲黄色| 亚洲一区二区三区中文字幕在线| 亚洲一区二区3| 亚洲尤物在线| 欧美一进一出视频| 久久精品论坛| 久久综合网hezyo| 欧美成人免费网| 欧美极品在线观看| 欧美视频精品一区| 国产精品美女久久| 国产日韩一区二区三区| 国产在线精品自拍| 在线国产精品播放| 99精品久久久| 亚洲精品日韩欧美| 一本色道久久综合一区| 亚洲视频精选| 欧美亚洲网站| 久久综合九色综合欧美狠狠| 欧美成人综合| 国产精品99一区| 国产一区二区日韩精品| 亚洲福利av| 一本色道久久综合亚洲精品不卡| 亚洲主播在线| 亚洲国产精品va在看黑人| 亚洲美女中出| 午夜精品影院| 免费不卡在线视频| 欧美午夜不卡影院在线观看完整版免费| 国产精品毛片在线| 狠狠色综合色综合网络| 亚洲精品视频在线看| 亚洲在线观看视频| 亚洲精品123区| 亚洲一线二线三线久久久| 久久久噜噜噜久噜久久| 欧美剧在线观看| 国产美女精品视频| 亚洲国产一成人久久精品| av成人免费在线| 久久精品视频亚洲| 在线综合视频| 久久天堂成人| 国产精品www色诱视频| 一区在线视频观看| 亚洲婷婷国产精品电影人久久| 久久成人国产精品| 中文亚洲免费| 看欧美日韩国产| 国产精品视频久久一区| 亚洲丶国产丶欧美一区二区三区| 在线综合亚洲欧美在线视频| 亚洲国产精品成人久久综合一区| 亚洲中字在线| 欧美二区在线播放| 国产日韩欧美成人| 99在线精品视频在线观看| 久久se精品一区精品二区| 亚洲一区二区三区四区五区黄 | 欧美激情亚洲| 国产亚洲精品久久飘花| 亚洲免费精品| 亚洲第一视频| 久久精品国产第一区二区三区| 欧美经典一区二区三区| 国产一区二区三区在线观看免费视频 | 亚洲人成在线免费观看| 欧美一区二区三区四区在线观看| 亚洲国产电影| 午夜国产欧美理论在线播放| 一区二区三区福利| 欧美成人乱码一区二区三区| 国内精品模特av私拍在线观看| 亚洲一区在线看| 亚洲午夜国产一区99re久久| 欧美成人午夜免费视在线看片| 狠狠久久综合婷婷不卡| 午夜精品在线| 新67194成人永久网站| 欧美午夜www高清视频| 亚洲精品中文字幕在线观看| 亚洲激情综合| 嫩模写真一区二区三区三州| 国语自产偷拍精品视频偷| 亚洲欧美国产日韩天堂区| 亚洲综合日韩中文字幕v在线| 欧美精品自拍| 亚洲黄色在线视频| 亚洲人成网站777色婷婷| 另类人畜视频在线| 国内外成人在线视频| 欧美在线不卡| 久久精品2019中文字幕| 国产视频久久久久| 欧美一二三区在线观看| 欧美影院久久久| 国产偷国产偷精品高清尤物| 亚洲欧美日韩综合一区| 欧美一区二区观看视频| 国产精品一区二区三区成人| 亚洲免费在线电影| 午夜久久电影网| 国产精品一区二区三区久久| 亚洲专区免费| 久久国产精品一区二区三区四区| 国产麻豆精品theporn| 先锋影音国产一区| 久久国产精品99精品国产| 国产日韩精品一区二区三区在线| 欧美亚洲在线视频| 久久国产精品久久久久久| 国产专区一区| 亚洲国产高清视频| 你懂的视频欧美| 91久久视频| 中日韩高清电影网| 欧美视频一区二区三区…| 国产精品夜夜嗨| 亚洲一区视频| 久久久国产视频91| 亚洲福利视频一区| 一本一本大道香蕉久在线精品| 欧美午夜精品| 亚洲制服少妇| 麻豆免费精品视频| 亚洲欧洲日韩综合二区| 亚洲午夜激情| 国产日韩欧美精品在线| 久久精品一区蜜桃臀影院| 欧美成人影音| 亚洲视频观看| 久久精品一区二区国产| 亚洲电影免费观看高清完整版在线观看| 亚洲精品美女91| 国产精品va在线播放我和闺蜜| 亚洲欧美综合另类中字| 久久中文字幕一区| 最新亚洲激情| 性欧美video另类hd性玩具| 国外成人在线视频| 一区二区91| 国产精品一卡二| 亚洲国产经典视频| 国产精品v欧美精品v日韩| 欧美专区一区二区三区| 欧美区日韩区| 欧美一区二区三区四区视频| 欧美精品国产精品| 亚洲免费视频在线观看| 欧美国产一区在线| 亚洲免费综合| 欧美精品一区二区三| 香蕉视频成人在线观看| 欧美二区在线播放| 亚洲欧美日韩另类精品一区二区三区| 裸体一区二区三区| 亚洲特级片在线| 女同一区二区| 亚洲欧美国产不卡| 欧美高清视频在线| 亚洲欧美在线网| 欧美日韩一区二区在线| 久久精品国产77777蜜臀| 欧美视频精品一区| 亚洲韩国精品一区| 国产精品日韩一区二区| 亚洲毛片视频| 韩国在线一区| 亚洲欧美激情精品一区二区| 在线观看亚洲| 欧美一区二区免费视频| 亚洲裸体俱乐部裸体舞表演av| 久久九九热re6这里有精品| 亚洲狼人综合| 久热精品视频在线观看一区| 亚洲天堂av在线免费| 欧美久久影院| 亚洲国产综合在线看不卡| 国产日韩精品一区| 一区二区三区精品视频| 亚洲性xxxx|