【技術(shù)領(lǐng)域】
本發(fā)明涉及can通信技術(shù)領(lǐng)域,尤其涉及一種基于can通信的報(bào)文解析方法。
背景技術(shù):
can是一種具有國際標(biāo)準(zhǔn)而且性能價(jià)格比又較高的現(xiàn)場總線,它在當(dāng)今自動(dòng)控制領(lǐng)域的發(fā)展中能發(fā)揮重要的作用,can的高性能和可靠性已被認(rèn)同,并被廣泛地應(yīng)用于工業(yè)自動(dòng)化、船舶、醫(yī)療設(shè)備、工業(yè)設(shè)備等方面。但是can的數(shù)據(jù)內(nèi)容均為十六進(jìn)制數(shù)據(jù),讀起來生澀難懂,所以制定一種方法來快速的識別內(nèi)容
現(xiàn)有的can分析上位機(jī)系統(tǒng),只能接收和發(fā)送can報(bào)文,例如在電池管理系統(tǒng)(bms)中常用到的電壓和電流等信息,現(xiàn)在can通信報(bào)文需要使用計(jì)算器、協(xié)議文檔等經(jīng)過多次變換才能得到真實(shí)值。當(dāng)數(shù)據(jù)快速變換時(shí),一分鐘的數(shù)據(jù)可能要用幾小時(shí)甚至更長的時(shí)間才能分析完畢,效率低下。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是提供一種可以快速解析can通信報(bào)文且解析結(jié)果直觀易懂的基于can通信的報(bào)文解析方法。
為了實(shí)現(xiàn)上述目的,本發(fā)明提供一種基于can通信的報(bào)文解析方法,包括以下步驟:
步驟s1:判斷是否接到can通信報(bào)文,若是,則進(jìn)入到步驟s2,若否,則繼續(xù)行者等待can通信報(bào)文;
步驟s2:判斷每幀can通信報(bào)文的id與idmask兩者是否相同,若是,則進(jìn)入到步驟s3,若否,則直接退出;
步驟s3:判斷是否達(dá)到更新時(shí)間,若是,則進(jìn)入到步驟s5,若否,則進(jìn)入到步驟s4;
步驟s4:判斷是否位跳變,若是,則進(jìn)入到步驟s5;
步驟s5:清除時(shí)間標(biāo)識,進(jìn)入步驟s6;
步驟s6:選擇是否低字節(jié)在前,若是,則進(jìn)入步驟s61;若否則進(jìn)入步驟s62;
步驟s61:以byte0作為lsb,然后進(jìn)入步驟s7;
步驟s62:以byte7作為lsb,然后進(jìn)入步驟s7;
步驟s7:將數(shù)據(jù)重組為64bit數(shù)據(jù),然后進(jìn)入步驟s8;
步驟s8:抽取重組為64bit數(shù)據(jù),然后進(jìn)入步驟s9;
步驟s9:選擇所述的為64bit數(shù)據(jù)的輸出類型,若選擇輸出類型為整數(shù)型,則進(jìn)入到步驟s91,若選擇輸出類型為浮點(diǎn)型,則進(jìn)入步驟s92;
步驟s91:輸出整數(shù)型數(shù)據(jù);
步驟s92:輸出浮點(diǎn)型數(shù)據(jù)。
相比于現(xiàn)有技術(shù),本方法不僅解析速度快,而且可解析出直觀的輸出數(shù)據(jù),使用方便。例如當(dāng)本方法應(yīng)用電池管理系統(tǒng)時(shí),解析出的can通信報(bào)文可以直觀讀出電壓、電流、電荷狀態(tài)等數(shù)據(jù)。
【附圖說明】
圖1為本發(fā)明基于can通信的報(bào)文解析方法流程圖。
【具體實(shí)施方式】
為了使本發(fā)明的目的、技術(shù)方案和有益技術(shù)效果更加清晰明白,以下結(jié)合附圖和具體實(shí)施方式,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解的是,本說明書中描述的具體實(shí)施方式僅僅是為了解釋本發(fā)明,并不是為了限定本發(fā)明。
如圖1所示,為本發(fā)明基于can通信的報(bào)文解析方法,包括以下步驟:
步驟s1:判斷是否接到can通信報(bào)文,若是,則進(jìn)入到步驟s2,若否,則繼續(xù)行者等待can通信報(bào)文;
步驟s2:判斷每幀can通信報(bào)文的id(標(biāo)識)與idmask(即id掩碼)兩者是否相同,若是,則進(jìn)入到步驟s3,若否,則直接退出;
步驟s3:判斷是否達(dá)到更新時(shí)間,若是,則進(jìn)入到步驟s5,若否,則進(jìn)入到步驟s4;
步驟s4:判斷是否位跳變,若是,則進(jìn)入到步驟s5;
步驟s5:清除時(shí)間標(biāo)識,進(jìn)入步驟s6;
步驟s6:選擇是否低字節(jié)在前?若是,則進(jìn)入步驟s61;若否則進(jìn)入步驟s62;
步驟s61:以byte0(字節(jié)0)作為lsb(leastsignificantbit,最低有效位),然后進(jìn)入步驟s7;
步驟s62:以byte7(字節(jié)7)作為lsb(leastsignificantbit,最低有效位),然后進(jìn)入步驟s7;
步驟s7:將數(shù)據(jù)重組為64bit數(shù)據(jù),然后進(jìn)入步驟s8;
步驟s8:抽取重組為64bit數(shù)據(jù),然后進(jìn)入步驟s9;
步驟s9:選擇所述的為64bit數(shù)據(jù)的輸出類型,若選擇輸出類型為整數(shù)型,則進(jìn)入到步驟s91,若選擇輸出類型為浮點(diǎn)型,則進(jìn)入步驟s92;
步驟s91:輸出整數(shù)型數(shù)據(jù);
步驟s92:輸出浮點(diǎn)型數(shù)據(jù)。
由此完成對can通信報(bào)文的解析,本方法不僅解析速度快,而且可解析出直觀的輸出數(shù)據(jù),使用方便。例如當(dāng)本方法應(yīng)用電池管理系統(tǒng)時(shí),解析出的can通信報(bào)文可以直觀讀出電壓、電流、電荷狀態(tài)等數(shù)據(jù)。
本發(fā)明基于can通信的報(bào)文解析方法還進(jìn)一步包括以下步驟:
步驟s10:在步驟s91或步驟s92之后,以列表的形式顯示出整數(shù)形數(shù)據(jù)或者浮點(diǎn)型數(shù)據(jù)。
本發(fā)明基于can通信的報(bào)文解析方法還進(jìn)一步包括以下步驟:
步驟11:在步驟s10之后,存儲整數(shù)形數(shù)據(jù)或者浮點(diǎn)型數(shù)據(jù)。
本發(fā)明基于can通信的報(bào)文解析方法在步驟s4中,若位跳變?yōu)榉?,則進(jìn)入到上述步驟s11。
本發(fā)明基于can通信的報(bào)文解析方法還進(jìn)一步包括以下步驟:
在步驟s1之前,還包括以下步驟:
步驟s11:選擇配置文件(程序開發(fā)者可以自定義配置文件的關(guān)鍵字);
步驟s12:對配置文件格式進(jìn)行分析;
步驟s13:初始化解析數(shù)據(jù)。
本發(fā)明并不僅僅限于說明書和實(shí)施方式中所描述,因此對于熟悉領(lǐng)域的人 員而言可容易地實(shí)現(xiàn)另外的優(yōu)點(diǎn)和修改,故在不背離權(quán)利要求及等同范圍所限定的一般概念的精神和范圍的情況下,本發(fā)明并不限于特定的細(xì)節(jié)、代表性的設(shè)備和這里示出與描述的圖示示例。