【摘 要】文章首先對(duì)LIN總線的發(fā)展歷史和車(chē)載應(yīng)用場(chǎng)景進(jìn)行簡(jiǎn)單介紹,然后對(duì)LIN總線的測(cè)試環(huán)境進(jìn)行詳細(xì)描述,并結(jié)合實(shí)際案例,對(duì)CAPL語(yǔ)言在LIN總線測(cè)試中的應(yīng)用進(jìn)行重點(diǎn)闡述。分析表明,CAPL語(yǔ)言可實(shí)現(xiàn)對(duì)LIN總線測(cè)試內(nèi)容的全覆蓋,即使搭配普通電源,也可實(shí)現(xiàn)對(duì)測(cè)試時(shí)間和測(cè)試動(dòng)作的精確控制,有利于減少測(cè)試誤差,提高測(cè)試效率。
【關(guān)鍵詞】CAPL;LIN總線;車(chē)載網(wǎng)絡(luò)
中圖分類(lèi)號(hào):U463.6 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1003-8639( 2024 )09-0056-02
Discussion on the Application of CAPL in LIN Bus Test
JI Nan1,LU Haonan1,GAO Ru2,WANG Xicong1,ZHAO Yue1,GU Yuanye1
(1.FAW Bestune Car Co.,Ltd.;2.Changchun Technical University of Automobile,Changchun 130000,China)
【Abstract】Firstly,the development history of LIN bus and vehicle application scenarios are briefly introduced,and then the test environment of LIN bus is described in detail. Combined with actual cases,the application of CAPL language in LIN bus test is emphatically expounded. The analysis shows that CAPL language can achieve full coverage of LIN bus test content,even with ordinary power supply,it can also achieve accurate control of test time and test action,which is conducive to reducing test errors and improving test efficiency.
【Key words】CAPL;LIN bus;vehicle network
目前,車(chē)載總線技術(shù)主要為CAN/CAN FD(CAN with Flexible Data-rate,速率可變的控制器局域網(wǎng)絡(luò))總線、LIN總線等[1]。CAN是一種有效支持分布式控制系統(tǒng)的低成本串行通信網(wǎng)絡(luò),且其功能表現(xiàn)多被用戶(hù)直接感知,直接影響用戶(hù)駕乘體驗(yàn)和駕駛安全,因此LIN控制器的總線測(cè)試至關(guān)重要。但是,LIN總線測(cè)試對(duì)測(cè)試動(dòng)作的執(zhí)行時(shí)間和精確度有著嚴(yán)格的要求,這使得手動(dòng)測(cè)試無(wú)法滿足測(cè)試規(guī)范要求,測(cè)試人員需要借助自動(dòng)化測(cè)試手段,而CANoe內(nèi)置的CAPL(Communication Access Programming Language,通信訪問(wèn)編程語(yǔ)言)可實(shí)現(xiàn)LIN總線測(cè)試自動(dòng)化。
1 LIN總線協(xié)議
LIN是專(zhuān)門(mén)為汽車(chē)開(kāi)發(fā)的一種低成本串行通信網(wǎng)絡(luò),是對(duì)CAN等其它汽車(chē)通信網(wǎng)絡(luò)的一種補(bǔ)充,適用于對(duì)網(wǎng)絡(luò)帶寬、性能或容錯(cuò)功能沒(méi)有過(guò)高要求的環(huán)境。1998年在德國(guó)召開(kāi)的汽車(chē)電子會(huì)議上,LIN總線被首次提出,并由LIN聯(lián)盟發(fā)展、發(fā)布和管理LIN總線規(guī)范。2014年LIN總線規(guī)范《LIN Specification Package Revision 2.2A》正式成為ISO標(biāo)準(zhǔn),目前最新的版本為ISO 17987—2016版。LIN控制器主要應(yīng)用于車(chē)窗升降、門(mén)鎖、方向盤(pán)組合開(kāi)關(guān)、陽(yáng)光雨量傳感器、汽車(chē)天窗、空調(diào)、照明燈等。目前,各個(gè)車(chē)廠使用的主流LIN總線版本為《LIN Specification Package Revision 2.2A》,或依據(jù)此規(guī)范結(jié)合各家車(chē)廠的獨(dú)特功能設(shè)計(jì)進(jìn)行適配開(kāi)發(fā)。
2 CAPL語(yǔ)言
常用的LIN總線測(cè)試工具有CANoe、Emulin、LINgate等,LIN測(cè)試工具種類(lèi)繁多,每個(gè)硬件工具都具有對(duì)應(yīng)配套的上位機(jī)軟件。本文主要介紹德國(guó)Vector(維克多)公司的CANoe在LIN總線測(cè)試的應(yīng)用。其中,CANoe內(nèi)置的CAPL語(yǔ)言是基于C語(yǔ)言開(kāi)發(fā),專(zhuān)門(mén)用于CANoe測(cè)試環(huán)境[2]。CAPL的目標(biāo)是盡可能簡(jiǎn)單地解決特定的任務(wù),對(duì)接收到的消息或事件做出反應(yīng),例如:檢查報(bào)文信號(hào)值、發(fā)送消息和設(shè)置信號(hào)值等。CAPL將自己限制在這些確定的事件上,而不需要任何額外的開(kāi)銷(xiāo)。CAPL語(yǔ)言程序與C語(yǔ)言程序不同的是,CAPL程序是事件觸發(fā)的,這意味著它們由單獨(dú)的函數(shù)組成,每個(gè)函數(shù)都會(huì)對(duì)當(dāng)前系統(tǒng)中的事件做出反應(yīng)。例如,要對(duì)ID為0x100的報(bào)文做出反應(yīng),可以使用關(guān)鍵字“On message 0x100{反應(yīng)的動(dòng)作}”。CAPL程序不提供任何指針類(lèi)型,這從源頭規(guī)避了許多潛在的編程錯(cuò)誤和程序崩潰。雖然指針具有容易出錯(cuò)的缺點(diǎn),但是也具備非常強(qiáng)大的功能,因此CAPL語(yǔ)言提供了一些替代品,例如:聯(lián)合數(shù)組作為動(dòng)態(tài)內(nèi)存的替代品。
3 CAPL語(yǔ)言在LIN總線測(cè)試的應(yīng)用
3.1 LIN總線測(cè)試環(huán)境
LIN總線硬件設(shè)備主要涉及Vector公司的總線設(shè)備、12V直流電源、PC電腦和被測(cè)控制器(下文中使用ECU替代)。其中,總線設(shè)備型號(hào)不受限制,只要具備LIN總線接口和IO控制端口即可,如:VN1640A、VN1630、VN1670等,本文中使用的是VN1640A設(shè)備。LIN總線測(cè)試硬件環(huán)境示意如圖1所示,VN1640A設(shè)備與PC電腦通過(guò)USB數(shù)據(jù)線連接,ECU的LIN總線接口與VN1640A的LIN總線接口通過(guò)DB9插件進(jìn)行連接。直流電源的正極與VN1640A的IO(輸入輸出)模塊接口中的輸入端1連接,IO模塊的輸出端2與ECU的正極端口3連接,ECU的負(fù)極端口4與直流電源的負(fù)極進(jìn)行連接,形成閉合回路。其中,IO端口可以通過(guò)上位機(jī)軟件中的IO模塊經(jīng)CAPL腳本進(jìn)行控制,實(shí)現(xiàn)閉合回路的連通或中斷。
軟件環(huán)境為Vector公司的CANoe11軟件,是一款用于網(wǎng)絡(luò)和ECU開(kāi)發(fā)、測(cè)試、分析的專(zhuān)業(yè)工具,支持總線網(wǎng)絡(luò)開(kāi)發(fā)從需求分析到系統(tǒng)實(shí)現(xiàn)的整個(gè)開(kāi)發(fā)過(guò)程。運(yùn)行環(huán)境為Windows10操作系統(tǒng)。在ECU開(kāi)發(fā)的初期,CANoe可以借助自帶的CAPL語(yǔ)言實(shí)現(xiàn)網(wǎng)絡(luò)節(jié)點(diǎn)仿真。加載ldf文件結(jié)合NetworkNode,通過(guò)CAPL語(yǔ)言編程實(shí)現(xiàn)LIN總線節(jié)點(diǎn)仿真和控制[3],如圖2所示。
3.2 CAPL常用關(guān)鍵字
CAPL常用的事件處理關(guān)鍵字有On timer、On message、On start等。圖3為觸發(fā)測(cè)試系統(tǒng)發(fā)送ID為0x100的報(bào)文。當(dāng)工程開(kāi)始運(yùn)行時(shí),設(shè)置計(jì)時(shí)器LightTimer時(shí)間為100ms并開(kāi)始計(jì)時(shí),當(dāng)計(jì)時(shí)器LightTimer計(jì)時(shí)完成,觸發(fā)On timer事件中的動(dòng)作output(DoorState),即發(fā)送ID為0x100的報(bào)文。如果總線上出現(xiàn)ID為0x123的報(bào)文,也會(huì)發(fā)送ID為0x100的報(bào)文。
3.3 CAPL在LIN總線測(cè)試應(yīng)用
3.3.1 報(bào)文位電平
LIN規(guī)范要求ECU檢測(cè)到報(bào)頭的幀格式錯(cuò)誤需要做出反饋。這需要測(cè)試者仿真LIN報(bào)頭的格式錯(cuò)誤(位電平),使用函數(shù)linInvertHeaderBit(byteIndex、bitIndex、level)可以實(shí)現(xiàn)對(duì)控制器發(fā)出的報(bào)頭結(jié)構(gòu)干擾,改變總線上報(bào)頭的位電平。其中,byteIndex字段可設(shè)置為-1,0,1,分別對(duì)應(yīng)干擾同步間隔場(chǎng),同步場(chǎng),標(biāo)識(shí)符場(chǎng)。bitIndex字段為待操作位,可設(shè)置為0~8,0對(duì)應(yīng)第1個(gè)位,8對(duì)應(yīng)停止位,需要注意的是,0并非對(duì)應(yīng)起始位,因?yàn)闄z測(cè)到起始位時(shí)就已經(jīng)錯(cuò)過(guò)干擾的時(shí)機(jī),即無(wú)法再進(jìn)行干擾。level字段可設(shè)置為0或1,用于對(duì)高低電平進(jìn)行干擾切換,高電平干擾成低電平,低電平干擾成高電平。
LIN報(bào)文由報(bào)頭和報(bào)文數(shù)據(jù)組成。報(bào)文報(bào)頭中的位電平可通過(guò)上述函數(shù)干擾改變,報(bào)文數(shù)據(jù)中的位電平則通過(guò)linSetRespDisturbance(frameId、lengthInBits、level、offsetIn-SixteenthBits)函數(shù)進(jìn)行干擾改變。其中frameId字段為所干擾的目標(biāo)報(bào)文ID;lengthInBits字段標(biāo)識(shí)干擾的位長(zhǎng)度,以位為單位;level字段用于對(duì)位電平的高低干擾;offsetInSixteenthBits字段需要注意的是,計(jì)數(shù)方式從報(bào)頭場(chǎng)結(jié)束開(kāi)始計(jì)算,并且長(zhǎng)度單位為1/16位。
3.3.2 同步間隔與間隔界定符
同步間隔場(chǎng)由同步間隔與間隔界定符組成。LIN規(guī)范要求同步間隔的長(zhǎng)度為13~26bits,間隔界定符的長(zhǎng)度為1~14bits。當(dāng)主節(jié)點(diǎn)的同步間隔和間隔界定符長(zhǎng)度在規(guī)范要求內(nèi)的長(zhǎng)度時(shí),從節(jié)點(diǎn)需要正確識(shí)別主節(jié)點(diǎn)發(fā)送的報(bào)頭。同步間隔和間隔界定符的長(zhǎng)度通過(guò)函數(shù)linSetBreakLength(syncBreakLen、syncDelLen)改變。其中syncBreakLen字段為同步間隔長(zhǎng)度,syncDelLen字段為間隔界定符長(zhǎng)度,2個(gè)字段的單位均為位。
3.3.3 信號(hào)值
主節(jié)點(diǎn)需要能夠識(shí)別到從節(jié)點(diǎn)發(fā)出的LIN_Error信號(hào),當(dāng)從節(jié)點(diǎn)連續(xù)發(fā)出3幀LIN_Error=1的信號(hào)后,主節(jié)點(diǎn)需要記錄總線通信錯(cuò)誤故障碼。這需要更改從節(jié)點(diǎn)發(fā)出的信號(hào)值,而函數(shù)setSignal(aSignal、aValue)可實(shí)現(xiàn)LIN_Error信號(hào)置1。需要注意的是,aSignal字段的內(nèi)容需要和ldf文件中的信號(hào)內(nèi)容保持一致,aValue根據(jù)信號(hào)矩陣設(shè)置成對(duì)應(yīng)的值。
3.3.4 從節(jié)點(diǎn)數(shù)據(jù)發(fā)送控制
LIN規(guī)范要求當(dāng)主節(jié)點(diǎn)在規(guī)定時(shí)間內(nèi)收不到從節(jié)點(diǎn)發(fā)送的報(bào)文數(shù)據(jù)時(shí),主節(jié)點(diǎn)會(huì)記錄從節(jié)點(diǎn)丟失故障碼。為測(cè)試此項(xiàng)內(nèi)容,需要仿真從節(jié)點(diǎn)丟失的情況,即仿真從節(jié)點(diǎn)報(bào)文數(shù)據(jù)發(fā)送的開(kāi)啟和停止,可通過(guò)函數(shù)linDeactivateResps(nodeName)和linActivateResps(nodeName)來(lái)實(shí)現(xiàn)從節(jié)點(diǎn)數(shù)據(jù)發(fā)送的開(kāi)啟和停止。nodeName字段設(shè)置為ldf文件中的節(jié)點(diǎn)名稱(chēng)。
4 結(jié)論
LIN總線憑借線間干擾小、能節(jié)省線束、成本低的優(yōu)勢(shì),仍然存在于各個(gè)車(chē)廠。CAPL作為CAN總線訪問(wèn)編程語(yǔ)言,可實(shí)現(xiàn)對(duì)LIN總線測(cè)試內(nèi)容的全部覆蓋,其搭配普通電源就可實(shí)現(xiàn)對(duì)測(cè)試時(shí)間和動(dòng)作的精確控制,有利于減少測(cè)試誤差,保證測(cè)試的一致性。
參考文獻(xiàn):
[1] 葉強(qiáng)生,陳書(shū)明. 基于CAN/LIN總線的車(chē)身網(wǎng)絡(luò)控制系統(tǒng)[J]. 微計(jì)算機(jī)信息,2008(24):272-273,292.
[2] 吳光強(qiáng),張亮修,劉兆勇,等. 汽車(chē)自適應(yīng)巡航控制系統(tǒng)研究現(xiàn)狀與發(fā)展趨勢(shì)[J]. 同濟(jì)大學(xué)學(xué)報(bào),2017(4):544-553.
[3] 李桂偉,丁健,蔡永祥. 基于CAPL編程的CAN網(wǎng)絡(luò)仿真模型搭建方法研究[J]. 汽車(chē)電器,2002(7):84-87.
(編輯 凌 波)
作者簡(jiǎn)介姬楠(1989—),男,工程師,碩士;陸昊楠(2000—),男,助理工程師;均從事汽車(chē)電器單系統(tǒng)、集成、整車(chē)通信測(cè)試,以及硬件在環(huán)測(cè)試系統(tǒng)的設(shè)計(jì)與應(yīng)用等工作;高茹(1979—),女,高級(jí)工程師,碩士,主要從事汽車(chē)智能網(wǎng)聯(lián)及汽車(chē)電器測(cè)試技術(shù)等教學(xué)方向的工作;王晰聰(1991—),男,工程師,碩士;趙躍(1986—),男,工程師,碩士;谷原野(1984—),男,高級(jí)工程師,碩士;均從事汽車(chē)電氣測(cè)試、虛擬仿真測(cè)試、整車(chē)CAN網(wǎng)絡(luò)和診斷測(cè)試、信息安全測(cè)試、整車(chē)功能測(cè)試,以及硬件在環(huán)測(cè)試系統(tǒng)的設(shè)計(jì)與應(yīng)用等工作。