999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

純電動(dòng)客車(chē)CAN通信上位機(jī)的設(shè)計(jì)與應(yīng)用

2021-06-25 06:36:32戈小中童曉輝
客車(chē)技術(shù)與研究 2021年3期
關(guān)鍵詞:程序物理

徐 希, 戈小中, 童曉輝, 劉 俊

(東風(fēng)襄陽(yáng)旅行車(chē)有限公司, 湖北 襄陽(yáng) 441004)

CAN總線是汽車(chē)領(lǐng)域目前應(yīng)用最廣泛的現(xiàn)場(chǎng)總線之一[1],也是純電動(dòng)客車(chē)各電氣件最主要的通信方式。其通信協(xié)議是連接CAN報(bào)文與各電氣件物理參數(shù)的紐帶,一般由各車(chē)廠根據(jù)實(shí)際需求制定。人工直接解析CAN報(bào)文是一項(xiàng)費(fèi)事又耗力的工作,而通過(guò)上位機(jī)軟件解析則極大程度上解決了此問(wèn)題,提高了工作效率,縮短了工程時(shí)間。基于此,本文采用一種根據(jù)CAN協(xié)議自動(dòng)解析報(bào)文并保存數(shù)據(jù)的方法,為純電動(dòng)客車(chē)開(kāi)發(fā)上位機(jī)軟件[2-3]。

1 上位機(jī)解析CAN報(bào)文的設(shè)計(jì)方法

1.1 軟件程序的設(shè)計(jì)流程

本上位機(jī)設(shè)計(jì)是基于Qt Creator 4.3.1的接口庫(kù)函數(shù)ControlCAN.lib和NI LabVIEW2018的接口庫(kù)函數(shù)ControlCAN.dll二次開(kāi)發(fā)而成[4-5]。接口庫(kù)函數(shù)的基本處理流程如圖1所示,該處理流程的底層函數(shù)結(jié)構(gòu)如圖2所示。

圖1 接口庫(kù)函數(shù)的基本處理流程圖

圖2 處理流程的底層函數(shù)結(jié)構(gòu)

軟件設(shè)計(jì)過(guò)程中的基本處理流程應(yīng)依次為打開(kāi)設(shè)備→檢測(cè)有無(wú)設(shè)備打開(kāi)信息異常→清空緩沖區(qū)→復(fù)位CAN→讀取CAN緩沖區(qū)幀數(shù)→讀取CAN內(nèi)容→關(guān)閉設(shè)備[6]。在軟件系統(tǒng)內(nèi),根據(jù)接口庫(kù)函數(shù)二次開(kāi)發(fā)的設(shè)計(jì)要求,結(jié)合純電動(dòng)客車(chē)CAN總線數(shù)據(jù)量大的特點(diǎn),為了盡可能不使上位機(jī)丟幀,程序內(nèi)部應(yīng)將讀取CAN報(bào)文程序[7]設(shè)為中斷程序,即當(dāng)收到CAN報(bào)文后,程序立即響應(yīng)中斷,讀取CAN報(bào)文并呈遞給程序設(shè)定參數(shù),然后將報(bào)文解析出來(lái),這樣才能最大幾率保證接收的CAN報(bào)文不丟失[8]。

1.2 對(duì)報(bào)文自動(dòng)解析的邏輯設(shè)計(jì)方法

報(bào)文的自動(dòng)解析過(guò)程是程序設(shè)計(jì)最重要的一環(huán)。根據(jù)CAN報(bào)文SAE J1939的規(guī)定[9],在純電動(dòng)客車(chē)上,從CAN總線接收到的報(bào)文數(shù)據(jù)幀為8個(gè)字節(jié),分別記為BYTE1……BYTE7、BYTE8,該數(shù)據(jù)均為十六進(jìn)制數(shù)。根據(jù)CAN通信協(xié)議[10],找到相應(yīng)ID的報(bào)文,然后由協(xié)議中的比例和偏置解析出相應(yīng)的物理數(shù)據(jù)。本上位機(jī)的數(shù)據(jù)解析設(shè)計(jì)使用以下幾種方式。

1.2.1 對(duì)報(bào)文的直接處理

協(xié)議規(guī)定,需要解析的字節(jié)BYTE。若比例為x、偏置為y,則解析出的結(jié)果z為

z=BYTE×x+y

(1)

假設(shè)上位機(jī)收到BMS的報(bào)文[11]數(shù)據(jù)為{01,02,03,04,05,06,07,08},協(xié)議約定第2個(gè)字節(jié)為駕駛員制動(dòng)踏板值,比例為0.4%,偏置為0,則當(dāng)前駕駛員制動(dòng)踏板值解析為

(0x02)×0.4%+0=0.8%

(2)

1.2.2 高低字節(jié)并行處理

某ID的報(bào)文BYTE2和BYTE1對(duì)應(yīng)電機(jī)控制器直流電壓的高字節(jié)與低字節(jié),且比例都為x、偏置為y,則在程序中電機(jī)控制器直流電壓解析的公式為

z=(BYTE2×16×16+BYTE1)×x+y

(3)

假如此ID接收到的數(shù)據(jù)為{01,3F,03,04,05,06,07,08},協(xié)議約定BYTE1為低字節(jié),BYTE2為高字節(jié),比例為0.1 V/bit,偏置為-1 000 V,則電機(jī)控制器直流側(cè)電壓值通過(guò)十六進(jìn)制轉(zhuǎn)換解析為

(0x3F×16×16+0x01)×0.1-1 000=612.9 V

(4)

1.2.3 單個(gè)位判斷處理

根據(jù)通信協(xié)議,對(duì)報(bào)文的解析并不都是對(duì)數(shù)據(jù)的處理,還有對(duì)報(bào)文某位的判斷。例如報(bào)文中某字節(jié)的某位為1代表純電動(dòng)客車(chē)后艙門(mén)打開(kāi),為0代表后艙門(mén)關(guān)閉,則此時(shí)需要先采用布爾運(yùn)算,然后再判斷。

對(duì)某字節(jié)中單個(gè)位的判斷邏輯:將某字節(jié)與需要判斷的位為1、其他位為0的單字節(jié)數(shù)進(jìn)行與運(yùn)算。若與運(yùn)算后的數(shù)據(jù)與該單字節(jié)數(shù)相同,則表示該位為1,反之為0。

設(shè)某報(bào)文為{x1,x2,x3,x4,x5,x6,x7,x8},假設(shè)需要將報(bào)文BYTE8轉(zhuǎn)換為二進(jìn)制數(shù)后的最高位(第7位)進(jìn)行判斷。根據(jù)上段判斷規(guī)則,應(yīng)在程序設(shè)計(jì)中首先應(yīng)該將BYTE8與0x80(第7位為1的二進(jìn)制 1 000 000 的十六進(jìn)制)進(jìn)行與運(yùn)算,如果運(yùn)算結(jié)果為0x80,則說(shuō)明BYTE8最高位bit7為1;反之為0,偽代碼如式(5)所示:

if((x8&0x80)==0x80)
{BYTE8最高位為1;}
else if((x8&0x80)==0x00)
{BYTE8最高位為0;}

(5)

例如,某字節(jié)的BYTE3 bit0位代表車(chē)輛當(dāng)前狀態(tài)為前進(jìn)擋,1有效,0無(wú)效。若收到該幀報(bào)文為{01,02,03,04,05,06,07,08},首先應(yīng)將BYTE3與0x01作與運(yùn)算,判斷bit0位,(0x03)&(0x01)=0x01,此時(shí)可以得出BYTE3的bit0為1,所以應(yīng)將車(chē)輛前進(jìn)擋的狀態(tài)發(fā)送給上位機(jī),偽代碼如式(6)所示:

if((BYTE3&0x01)==0x01)
{上位機(jī)顯示車(chē)輛為前進(jìn)擋;}
else if((BYTE3&0x01)==0x00)
{上位機(jī)顯示車(chē)輛為非前進(jìn)擋;}

(6)

綜上所述,對(duì)字節(jié)中單個(gè)位的判斷即與所對(duì)應(yīng)字節(jié)的位置1的字節(jié)數(shù)相與,當(dāng)?shù)玫较嗤氖M(jìn)制數(shù),即可說(shuō)明當(dāng)前位為1,反之為0,然后在程序中使用判斷語(yǔ)句達(dá)到相應(yīng)的效果。

1.2.4 對(duì)多個(gè)位判斷處理

多個(gè)位聯(lián)合判斷的處理方式與單個(gè)位處理方式類(lèi)似,但多了對(duì)多位進(jìn)行與運(yùn)算的處理。

例如某ID的BYTE5,bit7~4表示整車(chē)高壓電池電芯類(lèi)型,0001表示磷酸鐵鋰電芯,0010表示錳酸鋰電芯,0011表示鈷酸鋰電池,1111表示其他。由于是對(duì)bit7~4位的邏輯判斷,則應(yīng)當(dāng)對(duì)相應(yīng)位作邏輯與運(yùn)算處理,偽代碼如式(7)所示:

(7)

2 上位機(jī)物理數(shù)據(jù)顯示的設(shè)計(jì)

在CAN通信上位機(jī)中對(duì)數(shù)據(jù)邏輯解析后,再將數(shù)據(jù)顯示到前面板上同樣也是一項(xiàng)重要的工作[12]。工程應(yīng)用中,由于需要處理的CAN報(bào)文數(shù)據(jù)量巨大,純電動(dòng)客車(chē)CAN總線在波特率為250 kbps的情況下,一般能達(dá)到200~600幀/s的數(shù)據(jù)量。因此,如果處理不好前面板顯示任務(wù),會(huì)由于數(shù)據(jù)量過(guò)大,造成數(shù)據(jù)擁堵、程序卡死、崩潰等情況。本上位機(jī)采用兩種方法處理物理數(shù)據(jù)的顯示,分別稱(chēng)為中斷法顯示和多任務(wù)處理顯示。

2.1 中斷法顯示物理數(shù)據(jù)

中斷法[13]顯示的程序處理流程如圖3所示。當(dāng)主程序處理其他程序接收到CAN報(bào)文觸發(fā)程序中斷后,在中斷中將會(huì)發(fā)生4個(gè)步驟,先將接收到的CAN報(bào)文提取出來(lái),然后使用邏輯算法將報(bào)文自動(dòng)解析成各物理值,最后將物理值傳遞給前面板,最終前面板將數(shù)據(jù)顯示在軟件界面上。

圖3 中斷法處理流程示意圖

中斷法顯示物理數(shù)據(jù)的優(yōu)點(diǎn)是能夠第一時(shí)間使接收到的CAN報(bào)文得到處理,不會(huì)因?yàn)槠渌蚨箶?shù)據(jù)的處理延遲,數(shù)據(jù)處理的實(shí)時(shí)性較高;缺點(diǎn)為對(duì)處理器的運(yùn)算速度要求較高。若上位機(jī)需要導(dǎo)出EXCEL數(shù)據(jù),則可能會(huì)出現(xiàn)周期小的報(bào)文的物理數(shù)據(jù)量多于周期大的報(bào)文的物理數(shù)據(jù)量。因此,中斷法適用于需要實(shí)時(shí)顯示車(chē)輛狀態(tài)的上位機(jī)軟件,不適合需要導(dǎo)入物理數(shù)據(jù)到圖表類(lèi)的數(shù)據(jù)顯示軟件。

2.2 多任務(wù)法顯示物理數(shù)據(jù)

多任務(wù)處理顯示的流程圖如圖4所示。主程序1處理初始化程序和其他類(lèi)型程序,而CAN總線有報(bào)文發(fā)送后觸發(fā)中斷響應(yīng),中斷子程序接收CAN報(bào)文并自動(dòng)解析出來(lái),然后將各物理數(shù)據(jù)呈遞給全局變量;主程序2負(fù)責(zé)顯示全局變量,并呈遞給軟件前面板顯示。

圖4 多任務(wù)處理流程示意圖

多任務(wù)處理的優(yōu)點(diǎn)是能夠大大減少中斷程序處理數(shù)據(jù)的時(shí)間,主程序2按一定的周期循環(huán)執(zhí)行,從而使得顯示數(shù)據(jù)與自動(dòng)解析報(bào)文分離,互不干擾,也大大保證了數(shù)據(jù)的穩(wěn)定性,尤其適合需要用EXCEL圖表類(lèi)顯示數(shù)據(jù)的CAN上位機(jī)軟件;其缺點(diǎn)是顯示的數(shù)據(jù)有一定的延遲。由于接收到CAN報(bào)文后才能更新全局變量,因此,如果不觸發(fā)中斷,那么全局變量便得不到更新,有一定的延遲性。

因此,在實(shí)際應(yīng)用中,如果需要將CAN報(bào)文物理數(shù)據(jù)呈遞給EXCEL顯示,則使用多任務(wù)處理顯示的方式;如果是需要實(shí)時(shí)顯示純電動(dòng)客車(chē)各項(xiàng)參數(shù),更適合使用中斷法顯示。

3 CAN上位機(jī)的應(yīng)用

本上位機(jī)是根據(jù)某公司純電動(dòng)城市客車(chē)整車(chē)CAN網(wǎng)絡(luò)通訊協(xié)議V3.1.2版本開(kāi)發(fā)而成,主要用于通過(guò)整車(chē)CAN網(wǎng)絡(luò)讀取純電動(dòng)城市客車(chē)的相關(guān)信息。由于是需要實(shí)時(shí)快速顯示整車(chē)各項(xiàng)狀態(tài),所以前面板采用中斷法顯示物理數(shù)據(jù),上位機(jī)截圖如圖5所示。

圖5 CAN上位機(jī)截圖

用于記錄數(shù)據(jù)的上位機(jī),由于需要將數(shù)據(jù)呈遞給EXCEL,所以采用多任務(wù)處理模式,其上位機(jī)截圖如圖6所示。

圖6 記錄數(shù)據(jù)的CAN上位機(jī)截圖

上位機(jī)記錄數(shù)據(jù)有兩個(gè)任務(wù):一個(gè)是負(fù)責(zé)處理初始化程序和解析數(shù)據(jù);另一個(gè)是以周期為50 ms循環(huán)顯示全局變量。截取的EXCEL如圖7所示。

圖7 導(dǎo)入到EXCEL中的物理數(shù)據(jù)示意

可以看出,雖然各物理數(shù)據(jù)來(lái)自于不同周期的報(bào)文,但是依然能夠以每秒20幀的速度顯示出完整的數(shù)據(jù)表格。這是由于顯示程序是一個(gè)周期為50 ms的循環(huán)子程序,所以如果對(duì)應(yīng)物理值的全局變量沒(méi)有得到更新,那么下一時(shí)刻的EXCEL數(shù)據(jù)記錄將會(huì)繼續(xù)繼承上一時(shí)刻全局變量的數(shù)據(jù)。

4 結(jié)束語(yǔ)

本文介紹了一種可行性高的CAN上位機(jī)軟件制作方法,著重論述了將原始報(bào)文轉(zhuǎn)換成物理數(shù)據(jù)的處理方法。對(duì)于上位機(jī)前面板處理數(shù)據(jù)的顯示方式,可根據(jù)實(shí)際情況采用多任務(wù)法和中斷法兩種不同的處理方式。有針對(duì)性地處理,不僅能夠提高變成效率,而且還能使上位機(jī)運(yùn)行穩(wěn)定。

猜你喜歡
程序物理
只因是物理
井岡教育(2022年2期)2022-10-14 03:11:44
如何打造高效物理復(fù)習(xí)課——以“壓強(qiáng)”復(fù)習(xí)課為例
處處留心皆物理
試論我國(guó)未決羈押程序的立法完善
失能的信仰——走向衰亡的民事訴訟程序
我心中的物理
“程序猿”的生活什么樣
三腳插頭上的物理知識(shí)
英國(guó)與歐盟正式啟動(dòng)“離婚”程序程序
創(chuàng)衛(wèi)暗訪程序有待改進(jìn)
主站蜘蛛池模板: 日韩一二三区视频精品| 91久久夜色精品国产网站| 青青热久麻豆精品视频在线观看| 日韩高清成人| 精品视频91| 中文字幕人妻无码系列第三区| 国产精品页| 一区二区三区成人| 国产日韩精品欧美一区灰| 免费看一级毛片波多结衣| 日本三区视频| 免费看的一级毛片| 国产性爱网站| 91www在线观看| 无码一区中文字幕| 久久综合色88| 免费在线成人网| 亚洲美女操| 国产亚洲精品精品精品| 国产精品毛片一区视频播| 成年午夜精品久久精品| 欧美国产三级| 日韩欧美高清视频| 成人免费网站久久久| 亚洲另类色| 福利国产微拍广场一区视频在线| 国产大全韩国亚洲一区二区三区| 麻豆精品在线视频| 无码人中文字幕| 色哟哟精品无码网站在线播放视频| 亚洲成aⅴ人片在线影院八| 亚洲天堂久久新| 黄色成年视频| 色有码无码视频| 日韩AV无码免费一二三区| 97精品伊人久久大香线蕉| 日韩国产一区二区三区无码| 亚洲中文字幕久久精品无码一区| 日本道综合一本久久久88| 黄色一级视频欧美| 国产精品污污在线观看网站| 国产精品太粉嫩高中在线观看| 久久国产乱子| 国产精品视频第一专区| 久久www视频| 精品偷拍一区二区| 伊人久久综在合线亚洲91| 国产高清在线丝袜精品一区| 国产95在线 | 在线精品欧美日韩| 91福利在线观看视频| 国产成人毛片| 亚洲性网站| 看国产毛片| 极品私人尤物在线精品首页| 国产亚洲精品无码专| 欧美有码在线观看| 全部免费毛片免费播放| 99国产精品免费观看视频| 波多野结衣二区| 成年A级毛片| 在线无码av一区二区三区| 99热最新网址| 99精品视频在线观看免费播放| 99久久国产综合精品女同| 欧美区一区二区三| 高潮爽到爆的喷水女主播视频| 波多野结衣一区二区三区AV| 久久人体视频| 狠狠操夜夜爽| 不卡的在线视频免费观看| 精品国产毛片| 久久久久免费精品国产| 欧美www在线观看| 亚洲综合专区| 久久综合亚洲色一区二区三区| 国产丝袜无码精品| 日韩福利视频导航| 99这里只有精品免费视频| 欧美在线中文字幕| 人人91人人澡人人妻人人爽| 亚洲精品第一页不卡|