国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于嵌入式Linux的智能重型拖拉機(jī)遠(yuǎn)程監(jiān)控系統(tǒng)開發(fā)

2021-03-13 02:51朱青松李軍偉王進(jìn)李德芳高松
關(guān)鍵詞:內(nèi)核串口報(bào)文

朱青松,李軍偉*,王進(jìn),李德芳,高松

1.山東理工大學(xué) 交通與車輛工程學(xué)院,山東 淄博 255049;2.雷沃重工股份有限公司,山東 濰坊 261200

0 引言

通信技術(shù)的發(fā)展推動(dòng)了農(nóng)業(yè)智能化的蓬勃發(fā)展,智能化重型拖拉機(jī)不再是傳統(tǒng)的純機(jī)械式的拖拉機(jī),它集成了眾多電控單元,各個(gè)單元相互協(xié)作共同完成對(duì)重型拖拉機(jī)的控制。為實(shí)現(xiàn)對(duì)重型拖拉機(jī)運(yùn)行狀態(tài)的監(jiān)控,實(shí)時(shí)獲取重型拖拉機(jī)的運(yùn)行狀態(tài),及時(shí)發(fā)現(xiàn)異常狀態(tài)并進(jìn)行處理,開發(fā)一套基于Linux的智能重型拖拉機(jī)監(jiān)控系統(tǒng)非常有必要。文獻(xiàn)[1]中基于Fescale 9S12X128芯片研究了電控拖拉機(jī)遠(yuǎn)程監(jiān)控系統(tǒng),通過控制器局域網(wǎng)絡(luò)(controller area network,CAN)總線采集拖拉機(jī)的運(yùn)行數(shù)據(jù),通用無線分組業(yè)務(wù)(general packet radio service,GPRS)網(wǎng)絡(luò)將數(shù)據(jù)發(fā)送到Internet,但此系統(tǒng)受控制芯片處理能力,局限較大,而且可移植性較差。

本文中采用具有先進(jìn)處理性能和多內(nèi)核處理器的IMAX6Q芯片,該芯片可搭載嵌入式Linux系統(tǒng),嵌入式Linux系統(tǒng)具有開源、多體系、多驅(qū)動(dòng)的優(yōu)點(diǎn),并且具有定制化功能,使設(shè)計(jì)的監(jiān)控系統(tǒng)具有高效、穩(wěn)定以及處理能力強(qiáng)大的優(yōu)點(diǎn),系統(tǒng)結(jié)合GPRS和全球定位系統(tǒng)(global positioning system,GPS)模塊使用,能夠?qū)崟r(shí)高效地監(jiān)控智能重型拖拉機(jī)的運(yùn)行狀態(tài)。

1 系統(tǒng)總體方案

圖1 遠(yuǎn)程監(jiān)控系統(tǒng)總體設(shè)計(jì)圖

基于嵌入式Linux的智能重型拖拉機(jī)遠(yuǎn)程監(jiān)控系統(tǒng)總體方案如圖1所示。由圖1可知:重型拖拉機(jī)的整車控制器(vehicle control unit,VCU)通過CAN總線與監(jiān)控系統(tǒng)相連接,監(jiān)控系統(tǒng)接收來自VCU的CAN報(bào)文并根據(jù)文獻(xiàn)[2]協(xié)議對(duì)接收到的CAN報(bào)文進(jìn)行解析[3-5],獲取當(dāng)前拖拉機(jī)運(yùn)行的狀態(tài)信息;監(jiān)控系統(tǒng)的GPS模塊接收到來自衛(wèi)星的信息,由監(jiān)控系統(tǒng)選取所需的數(shù)據(jù)進(jìn)行提取,獲取當(dāng)前拖拉機(jī)的位置信息;然后監(jiān)控系統(tǒng)將采集到的重型拖拉機(jī)的運(yùn)行數(shù)據(jù)通過傳輸控制協(xié)議/網(wǎng)際協(xié)議(transmission control protocol/Internet protocol,TCP/IP)進(jìn)行打包處理[6-7],并通過4G模塊將打包好的數(shù)據(jù)發(fā)送到移動(dòng)基站,轉(zhuǎn)發(fā)至Internet,上傳到云服務(wù)器,在云服務(wù)器將數(shù)據(jù)包進(jìn)行解析,后臺(tái)監(jiān)控端訪問服務(wù)器獲取數(shù)據(jù),從而實(shí)現(xiàn)對(duì)重型拖拉機(jī)行駛狀態(tài)的遠(yuǎn)程監(jiān)控。

2 程序設(shè)計(jì)及測(cè)試

2.1 CAN模塊設(shè)計(jì)

CAN模塊的使用在整個(gè)智能重型拖拉機(jī)遠(yuǎn)程監(jiān)控系統(tǒng)中至關(guān)重要,因此重點(diǎn)對(duì)CAN模塊進(jìn)行程序設(shè)計(jì)。本文中智能重型拖拉機(jī)遠(yuǎn)程監(jiān)控系統(tǒng)開發(fā)時(shí),由于所用的Ubuntu系統(tǒng)缺少使用CAN模塊所必須的庫文件,因此首先應(yīng)設(shè)計(jì)CAN模塊的庫文件并掛載到Ubuntu系統(tǒng),將設(shè)計(jì)的庫文件設(shè)置為普通用戶級(jí)讀寫權(quán)限,將庫文件生成鏈接文件,確保程序能夠正常運(yùn)行。CAN模塊的程序設(shè)計(jì)及數(shù)據(jù)收發(fā)過程的流程如圖2所示。

圖2 CAN模塊收發(fā)數(shù)據(jù)流程圖

設(shè)計(jì)CAN模塊程序時(shí),應(yīng)將CAN模塊禁止,將波特率設(shè)置為500 kbits/s。Linux系統(tǒng)中,CAN設(shè)備被當(dāng)作網(wǎng)絡(luò)設(shè)備進(jìn)行管理,所以需要設(shè)計(jì)專用于CAN通信的套接字來實(shí)現(xiàn)CAN通信,分配CAN設(shè)備,設(shè)計(jì)CAN模塊的連接程序,進(jìn)入接收或發(fā)送數(shù)據(jù)狀態(tài)[8]。CAN模塊接收數(shù)據(jù)程序時(shí),首先在can_filter結(jié)構(gòu)體中定義接收 CAN節(jié)點(diǎn)的報(bào)文ID和掩碼(MASK),設(shè)計(jì)該結(jié)構(gòu)體,并進(jìn)入接收狀態(tài),read函數(shù)讀取can_frame結(jié)構(gòu)體中的報(bào)文信息。

將監(jiān)控系統(tǒng)的CAN_H和CAN_L用雙絞線連接到智能重型拖拉機(jī)VCU的CAN_H和CAN_L上完成硬件連接[9],通過CAN總線獲取重型拖拉機(jī)的車速、發(fā)動(dòng)機(jī)轉(zhuǎn)速、動(dòng)力輸出軸(power take off,PTO)轉(zhuǎn)速、差動(dòng)鎖狀態(tài)、行駛里程、剩余油量等信息[10]。

2.2 GPS模塊程序設(shè)計(jì)

2.2.1 串口初始化

由于IMAX6Q開發(fā)板中外擴(kuò)了GPS模塊,利用GPS模塊可以實(shí)現(xiàn)全球范圍內(nèi)的定位,滿足實(shí)時(shí)監(jiān)測(cè)智能重型拖拉機(jī)位置的需求。Linux內(nèi)核中安裝了相應(yīng)的驅(qū)動(dòng),GPS模塊對(duì)應(yīng)的文件名為/dev/ttymxc,GPS模塊通過串口進(jìn)行數(shù)據(jù)傳輸,程序設(shè)計(jì)流程如圖3所示。

圖3 GPS串口程序設(shè)計(jì)流程圖

Linux系統(tǒng)中設(shè)備是以文件的方式進(jìn)行讀寫,因此首先在程序中設(shè)置串口的文件句柄用于打開文件”/dev/ttymxc”,將串口設(shè)為阻塞狀態(tài),并檢測(cè)是否為終端設(shè)備,獲取串口對(duì)應(yīng)終端的相關(guān)參數(shù)并在程序中將其初始化,然后設(shè)置串口的波特率、初始位、停止位、奇偶校驗(yàn)位和處理未接收的字符。串口初始化函數(shù)是串口初始化的通用函數(shù),其它需要使用的模塊可直接移植調(diào)用。

2.2.2 數(shù)據(jù)解析

由于GPS的數(shù)據(jù)$GPRMC為結(jié)構(gòu)體格式,因此首先定義一個(gè)結(jié)構(gòu)體data[ ],用于存放GPS數(shù)據(jù),然后定義buffer[ ]數(shù)組作為緩沖數(shù)組存放從串口中讀到的數(shù)據(jù)[11]。讀取數(shù)據(jù)時(shí),從文件句柄 fd 中讀取一個(gè)字符存放在buffer[ ]數(shù)組中,并將該數(shù)據(jù)連接至dest[ ]的尾部。GPS數(shù)據(jù)解析流程如圖4所示。

對(duì)該組數(shù)據(jù)進(jìn)行解析的軟件流程如圖5所示。首先定義一個(gè)標(biāo)志位變量 SectionID,用于標(biāo)識(shí)數(shù)據(jù)組的不同信息,然后通過判斷$GPRMC 數(shù)據(jù)組中的字符串是否是“,”來區(qū)分不同的數(shù)據(jù)信息。每當(dāng)檢測(cè)到一個(gè)“,”,則 SectionID加1,通過 switch 語句根據(jù) SectionID判別該字符屬于哪個(gè)數(shù)據(jù),并根據(jù)不同的數(shù)據(jù)(如時(shí)間、經(jīng)緯度等)進(jìn)行相應(yīng)的計(jì)算,將信息存儲(chǔ)到 data[ ]數(shù)組里,便于打印或傳輸。

圖4 GPS數(shù)據(jù)解析流程圖 圖5 GPS_$GPRMC組數(shù)據(jù)提取流程圖

2.3 4G通信模塊

2.3.1 USB驅(qū)動(dòng)架構(gòu)

圖6 USB驅(qū)動(dòng)架構(gòu)

設(shè)計(jì)時(shí)選用EC20模塊用于4G通信,由于IMAX6Q開發(fā)板中沒有EC20模塊的驅(qū)動(dòng)程序,導(dǎo)致無法識(shí)別該設(shè)備,因此需要向 Linux 內(nèi)核源碼中添加EC20模塊驅(qū)動(dòng)程序,再編譯生成Ubuntu系統(tǒng)文件后燒錄到開發(fā)板,才能使用EC20模塊與服務(wù)器進(jìn)行數(shù)據(jù)傳輸[12]。EC20模塊驅(qū)動(dòng)程序設(shè)計(jì)完成后,在Ubuntu下作為通用串行總線(universal serial bus,USB)設(shè)備使用。USB是分級(jí)的總線結(jié)構(gòu),通過USB模塊實(shí)現(xiàn)USB設(shè)備與主機(jī)之間的數(shù)據(jù)傳輸。USB驅(qū)動(dòng)程序的體系結(jié)構(gòu)如圖6所示。

Linux USB主機(jī)驅(qū)動(dòng)程序包括USB主機(jī)控制器驅(qū)動(dòng)程序、USB 內(nèi)核和 USB 設(shè)備驅(qū)動(dòng)程序3部分。USB主機(jī)控制器驅(qū)動(dòng)程序是架構(gòu)的底層,直接與硬件交互;USB內(nèi)核是整個(gè)USB主機(jī)驅(qū)動(dòng)程序的核心,負(fù)責(zé)管理USB總線、USB總線設(shè)備和USB總線帶寬,為USB設(shè)備驅(qū)動(dòng)程序提供接口,應(yīng)用程序可以通過接口訪問USB系統(tǒng)文件;USB設(shè)備驅(qū)動(dòng)程序與應(yīng)用程序交互,主要提供訪問特定USB設(shè)備的接口。

2.3.2 Linux內(nèi)核源碼修改

將EC20模塊連接到USB串口即設(shè)置成USB串口設(shè)備,并將EC20模塊的廠商識(shí)別碼和產(chǎn)品識(shí)別碼添加到設(shè)計(jì)程序中,Ubuntu系統(tǒng)會(huì)自動(dòng)識(shí)別該設(shè)備,但應(yīng)在相關(guān)文件中刪除和EC20沖突的USB驅(qū)動(dòng)的代碼。設(shè)計(jì)修改內(nèi)核源碼時(shí),添加回調(diào)代碼,用來恢復(fù)由于Linux系統(tǒng)進(jìn)入掛起或休眠模式時(shí)部分USB主機(jī)控制器或USB集線器的斷電或復(fù)位。完成上述設(shè)計(jì)后進(jìn)入內(nèi)核目錄下,修改環(huán)境變量ARCH為arm、交叉編譯器為arm-none-linux-gnueabi,輸入相關(guān)命令使能USB驅(qū)動(dòng),完成后輸入加載驅(qū)動(dòng)的命令并重啟Ubuntu。

2.3.3 Ubuntu系統(tǒng)文件編譯

Ubuntu系統(tǒng)包括引導(dǎo)文件、內(nèi)核文件、文件系統(tǒng)3個(gè)文件。因此,設(shè)計(jì)完成 EC20 的內(nèi)核驅(qū)動(dòng)后,應(yīng)交叉編譯生成上述3個(gè)文件。在源碼文件夾下的引導(dǎo)文件目錄中,編譯腳本build_uboot.sh,編譯該文件即可在該文件夾下生成uboot.bin文件,即引導(dǎo)文件。在內(nèi)核文件目錄中,編譯腳本文件build_qt_kernel.sh,生成uImage文件即內(nèi)核鏡像。將Ubuntu系統(tǒng)壓縮包上傳至虛擬機(jī)并進(jìn)行解壓,可以在解壓后的文件中進(jìn)行修改,實(shí)現(xiàn)相應(yīng)的功能。源碼修改完成后,再壓縮生成.tar.gz文件,即為 Ubuntu 的文件系統(tǒng)。

2.3.4 Ubuntu系統(tǒng)燒錄

將引導(dǎo)文件、內(nèi)核文件和文件系統(tǒng)使用飛思卡爾燒寫工具M(jìn)fgtools燒錄至開發(fā)板,并根據(jù)開發(fā)板的型號(hào)進(jìn)行相應(yīng)的屏幕參數(shù)設(shè)置。燒錄成功的Ubuntu系統(tǒng),使用ls /dev/ttyUSB*命令可以看到系統(tǒng)中已存在ttyUSB 0~4共5個(gè)文件。其中,ttyUSB1用于GPS信息的輸出接口,ttyUSB2用于終端設(shè)備與PC應(yīng)用之間的連接與通信指令(attention,AT)的輸入接口,ttyUSB3既可以用于AT指令的輸入接口,也可以作為點(diǎn)到點(diǎn)協(xié)議連接的接口。

2.3.5 EC20 數(shù)據(jù)傳輸軟件設(shè)計(jì)

EC20模塊的驅(qū)動(dòng)設(shè)計(jì)安裝完成后,對(duì)其進(jìn)行數(shù)據(jù)傳輸?shù)能浖O(shè)計(jì)。EC20模塊的初始化程序設(shè)計(jì)流程為:首先給模塊上電,通過“AT + CPIN?”指令查詢SIM卡的狀態(tài),如果返回“READY! OK”,則進(jìn)行下一步,否則重新啟動(dòng)該模塊。繼續(xù)使用“AT + CREG?” “AT + CGREG?”指令查詢相關(guān)初始狀態(tài)值;在查詢狀態(tài)為全部正常后,使用“AT + QIAT=”指令激活相應(yīng)的報(bào)文ID;使用“AT+QIACT?”可以查詢到本機(jī)IP;然后使用“AT + QIOPEN”指令進(jìn)行服務(wù)器的連接,在參數(shù)中可以設(shè)置數(shù)據(jù)傳輸方式[13-14]。

2.4 監(jiān)控系統(tǒng)設(shè)計(jì)

圖7 系統(tǒng)總體程序流程圖

遠(yuǎn)程監(jiān)控系統(tǒng)所需要的各個(gè)模塊的程序設(shè)計(jì)完成后,需要在Linux開發(fā)環(huán)境下對(duì)系統(tǒng)總體程序進(jìn)行開發(fā)設(shè)計(jì),程序設(shè)計(jì)流程如圖7所示。首先要Linux開發(fā)環(huán)境下分別對(duì)CAN設(shè)備、GPS串口、EC20模塊進(jìn)行初始化,然后向Linux系統(tǒng)內(nèi)核注冊(cè)中斷,最后對(duì)程序的主函數(shù)進(jìn)行設(shè)計(jì),主函數(shù)設(shè)計(jì)包括將GPS數(shù)據(jù)采用輪詢方式采集,CAN總線數(shù)據(jù)采用中斷方式采集,并且設(shè)置每隔一段時(shí)間對(duì)采集的GPS和CAN總線信息進(jìn)行數(shù)據(jù)處理和打包,通過4G模塊發(fā)送至遠(yuǎn)程服務(wù)器端[15-16]。

2.5 系統(tǒng)測(cè)試

將開發(fā)板作為CAN總線的一個(gè)節(jié)點(diǎn),掛載在重型拖拉機(jī)的CAN總線網(wǎng)絡(luò),然后將開發(fā)板設(shè)置為可以接收所有的報(bào)文信息。來自重型拖拉機(jī)VCU的報(bào)文經(jīng)開發(fā)板傳送到監(jiān)控端,開發(fā)板與車載端連接,在 PC 機(jī)上登錄監(jiān)控后臺(tái)界面,通過訪問遠(yuǎn)程服務(wù)器,實(shí)現(xiàn)車載端與PC端的連接,客戶端工作界面如圖8所示。部分監(jiān)控系統(tǒng)端采集到的報(bào)文信息及其解析如表1所示,其中報(bào)文信息為車速、整車狀態(tài)(“1”為運(yùn)行狀態(tài),“0”為停止?fàn)顟B(tài))、緯度、經(jīng)度信息,經(jīng)解析后轉(zhuǎn)化為重型拖拉機(jī)的車速、發(fā)動(dòng)機(jī)轉(zhuǎn)速、PTO轉(zhuǎn)速、差動(dòng)鎖狀態(tài)、行駛里程、剩余油量、地理位置等信息。

圖8 PC端客戶端工作界面

表1 部分報(bào)文數(shù)據(jù)解析表

由圖8和表1可知,來自監(jiān)控系統(tǒng)端的CAN報(bào)文能夠通過開發(fā)板傳送至服務(wù)器端,再通過服務(wù)器傳到后臺(tái)客戶端。重型拖拉機(jī)的車速、發(fā)動(dòng)機(jī)轉(zhuǎn)速、PTO轉(zhuǎn)速、差動(dòng)鎖狀態(tài)、行駛里程、剩余油量、地理位置等數(shù)據(jù)均可以在監(jiān)控界面實(shí)時(shí)顯示,達(dá)到設(shè)計(jì)要求。

3 結(jié)論

基于嵌入式Linux操作系統(tǒng)研究開發(fā)了智能重型拖拉機(jī)遠(yuǎn)程監(jiān)控系統(tǒng),包括CAN模塊、GPS模塊、4G通信模塊及控制軟件,并對(duì)開發(fā)的監(jiān)控系統(tǒng)進(jìn)行了測(cè)試。

1)設(shè)計(jì)了智能重型拖拉機(jī)遠(yuǎn)程監(jiān)控系統(tǒng)的總體方案。

2)在Linux開發(fā)環(huán)境下設(shè)計(jì)CAN通信模塊程序,通過CAN總線將監(jiān)控系統(tǒng)掛載到重型拖拉機(jī)的控制器上,實(shí)現(xiàn)數(shù)據(jù)采集。通過Linux系統(tǒng)自帶GPS驅(qū)動(dòng),將GPS模塊作為USB設(shè)備在Linux系統(tǒng)中進(jìn)行程序設(shè)計(jì)并獲取位置信息,針對(duì)4G通信模塊,修改了Linux內(nèi)核驅(qū)動(dòng)及相關(guān)文件,對(duì)修改后的 Linux 內(nèi)核進(jìn)行編譯,4G模塊程序設(shè)計(jì)完成后能夠?qū)?shù)據(jù)上傳到服務(wù)器端。

3)對(duì)開發(fā)的基于嵌入式Linux的智能重型拖拉機(jī)遠(yuǎn)程監(jiān)控系統(tǒng)進(jìn)行試驗(yàn)測(cè)試,遠(yuǎn)程監(jiān)控端能夠接收到來自重型拖拉機(jī)的車速、發(fā)動(dòng)機(jī)轉(zhuǎn)速、PTO轉(zhuǎn)速、差動(dòng)鎖狀態(tài)、行駛里程、剩余油量、地理位置等數(shù)據(jù),滿足設(shè)計(jì)要求。

猜你喜歡
內(nèi)核串口報(bào)文
基于J1939 協(xié)議多包報(bào)文的時(shí)序研究及應(yīng)用
以太網(wǎng)QoS技術(shù)研究及實(shí)踐
多內(nèi)核操作系統(tǒng)綜述①
強(qiáng)化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
活化非遺文化 承啟設(shè)計(jì)內(nèi)核
基于API函數(shù)庫實(shí)現(xiàn)串口數(shù)據(jù)通信的分析與設(shè)計(jì)
基于EM9000工控板高性能雙串口通信模型設(shè)計(jì)與實(shí)現(xiàn)
淺析反駁類報(bào)文要點(diǎn)
微軟發(fā)布新Edge瀏覽器預(yù)覽版下載換裝Chrome內(nèi)核
MCS—51單片機(jī)中的多串口通訊技術(shù)的應(yīng)用
三明市| 滦南县| 三台县| 酒泉市| 碌曲县| 宜州市| 铁力市| 临洮县| 方城县| 本溪| 荆门市| 西和县| 铁岭市| 福贡县| 苍南县| 从江县| 福海县| 安国市| 山东省| 民县| 石首市| 深圳市| 德庆县| 招远市| 象山县| 尤溪县| 津市市| 黎川县| 栖霞市| 淮滨县| 太保市| 河源市| 冀州市| 尼木县| 闽侯县| 建水县| 鄂托克前旗| 沙田区| 七台河市| 南康市| 东阿县|