楊艷,馮烙烙,羅鵬飛,蔣濤,喻尚
(陜西重型汽車有限公司,陜西 西安 710200)
隨著商用車整車CAN網(wǎng)絡(luò)電子控制單元增多,CAN已成為整車不可或缺的一部分,支持 CAN總線協(xié)議已成為整車電子控制器的基礎(chǔ)功能。而通過 CAN總線收發(fā)工具,實(shí)現(xiàn)對(duì)各個(gè) CAN總線控制器節(jié)點(diǎn)的仿真測(cè)試,已成為測(cè)試人員的必備技能。Vehicle Spy(VSPY)是一款能進(jìn)行節(jié)點(diǎn)仿真的CAN總線收發(fā)工具,本文即以VSPY為基礎(chǔ),實(shí)現(xiàn)CAN總線節(jié)點(diǎn)的仿真,完成仿真環(huán)境的搭建,并將其應(yīng)用到實(shí)際測(cè)試中。本文以控制器A為例,實(shí)現(xiàn)CAN總線節(jié)點(diǎn)的仿真,并在車載終端的測(cè)試中進(jìn)行應(yīng)用,完成對(duì)應(yīng)功能的仿真測(cè)試。
控制器A的仿真,是依賴于VSPY中各個(gè)功能部件進(jìn)行搭建的,包括報(bào)文編輯、圖形面板、Function Block、C Code Interface幾部分。其中報(bào)文編輯將創(chuàng)建控制器A的所有收發(fā)報(bào)文;圖形面板用于控制報(bào)文收發(fā)及修改報(bào)文值,在信號(hào)集中測(cè)試中非常實(shí)用;Function Block用于實(shí)現(xiàn)簡(jiǎn)單邏輯處理;C Code Interface完成邏輯較復(fù)雜的功能仿真。
1.2.1 CAN報(bào)文編輯
在 VSPY 中建立并進(jìn)入仿真平臺(tái)“Test”,通過 Spy Networks-->Messages Editor進(jìn)入Messages Editor,在HS CAN(可根據(jù)需要自由選擇網(wǎng)段)上創(chuàng)建控制器A的所有收發(fā)報(bào)文。例如創(chuàng)建發(fā)送報(bào)文TCO1,單擊Transmit按鈕,點(diǎn)擊on Network下拉框旁邊的“+”號(hào),出現(xiàn)報(bào)文編輯界面。在Description描述框中填入報(bào)文名字TCO1,CAN Type中選擇“Xtd 29 bit”(可根據(jù)需要選擇標(biāo)準(zhǔn)幀或擴(kuò)展幀),在仲裁地址框填入報(bào)文 ID:CFE6C10(默認(rèn)情況下就是 16進(jìn)制),在DLC報(bào)文長(zhǎng)度欄填入8,默認(rèn)周期處填寫為50ms。在信號(hào)編輯區(qū)域點(diǎn)擊加號(hào),添加車速信號(hào),信號(hào)名為“Tachograph vehicle speed”,點(diǎn)擊信號(hào)編輯區(qū)域右上方fx Edit按鈕,輸入報(bào)文長(zhǎng)度16bits,選擇intel格式,在Scalling標(biāo)簽頁選擇線性mx+b 輸入分辨率為1/256 km/h per bit,偏移量為0,單位km/h,確認(rèn)OK后,這樣一個(gè)報(bào)文的一個(gè)信號(hào)就創(chuàng)建完成了。重復(fù)上述步驟,創(chuàng)建其他發(fā)送報(bào)文。點(diǎn)擊Receive,進(jìn)入接收?qǐng)?bào)文編輯界面,同前面步驟創(chuàng)建所有的接收?qǐng)?bào)文。
創(chuàng)建完所有報(bào)文后,在Tx Pannel界面將需要周期發(fā)送的報(bào)文設(shè)置發(fā)送周期和開始發(fā)送條件即可。在仿真運(yùn)行測(cè)試時(shí),即可仿真所有周期報(bào)文的發(fā)送。
1.2.2 Graphical Panels
在仿真過程中,可通過 Graphical Panels實(shí)時(shí)更改信號(hào)值。通過在VSPY軟件中建立圖形面板,使得仿真測(cè)試變得簡(jiǎn)單易行。在整個(gè)仿真過程中,將需要通過圖形面板控制的信號(hào)篩選出來(如車速、大氣壓力、轉(zhuǎn)速、里程、扭矩、發(fā)動(dòng)機(jī)冷卻液溫度等),并創(chuàng)建對(duì)應(yīng)控件,方便仿真時(shí)控制信號(hào)值。下面以TCO1報(bào)文以及車速、左轉(zhuǎn)向燈信號(hào)為例簡(jiǎn)單說明圖形面板的創(chuàng)建。
1.2.2.1 對(duì)報(bào)文進(jìn)行關(guān)聯(lián)設(shè)置
通過 Measurement-->Graphical Panels打開圖形面板界面,放置TX控件到主界面合適位置后,界面右側(cè)區(qū)域出現(xiàn)了該控件屬性對(duì)話框。在參數(shù) TransmitMessage下拉框選擇要關(guān)聯(lián)的報(bào)文TCO1報(bào)文,參數(shù)TxType選擇1-Periodic On/Off Button,即點(diǎn)擊后報(bào)文周期發(fā)送,再次點(diǎn)擊報(bào)文停止發(fā)送。注意要實(shí)現(xiàn)報(bào)文周期發(fā)送,需先在Tx Pannel報(bào)文發(fā)送面板中,將該報(bào)文定義成周期報(bào)文,同時(shí)配置有發(fā)送周期。
1.2.2.2 對(duì)車速信號(hào)進(jìn)行關(guān)聯(lián)設(shè)置
選擇Meter控件放置在主界面對(duì)應(yīng)位置,在Meter控件屬性界面 Signal屬性下拉框選擇 Tx Messages ->HS CAN->TCO1->Tachograph vehicle speed信號(hào),即車速信號(hào),點(diǎn)擊右上角OK確認(rèn)即可;在屬性菜單中修改最大值250、最小值0;車速指示控件即設(shè)置完成。
選擇Text Entry控件放置在主界面合適位置,在其Signal屬性下拉框選擇車速信號(hào),點(diǎn)擊右上角OK確認(rèn)即可,車速編輯控件制作完成。
1.2.2.3 對(duì)左轉(zhuǎn)向燈進(jìn)行關(guān)聯(lián)設(shè)置
選擇 LED控件放置在主界面合適位置,在其屬性界面Signal屬性下拉框選擇左轉(zhuǎn)向燈信號(hào),點(diǎn)擊右上角OK確認(rèn)即可;如對(duì)LED On Color選擇紅色,LED Off Color選擇綠色,則當(dāng)信號(hào)為1狀態(tài)時(shí)顯示紅色,信號(hào)為0時(shí)顯示綠色。
On Off Button控件對(duì)0、1狀態(tài)進(jìn)行控制,在圖形面板主界面放置該控件,在屬性框中將該控件關(guān)聯(lián)到左轉(zhuǎn)向燈信號(hào),在OnOffType屬性框中選擇1-Toggle Button,方便信號(hào)狀態(tài)的保持。
Drop Down List對(duì)有多個(gè)狀態(tài)的信號(hào)非常適用,該控件可通過下拉框設(shè)置關(guān)聯(lián)信號(hào)的信號(hào)值。同樣,放置完該控件后,關(guān)聯(lián)到左轉(zhuǎn)向信號(hào),在該控件List屬性中將左轉(zhuǎn)向信號(hào)值表編輯進(jìn)去,即0對(duì)應(yīng)關(guān)閉、1對(duì)應(yīng)開啟,2對(duì)應(yīng)錯(cuò)誤,3對(duì)應(yīng)無效。完成后就可實(shí)現(xiàn)該信號(hào)值的下拉選擇。
1.2.2.4 運(yùn)行圖形面板
可直接在圖形面板編輯界面將當(dāng)前面板設(shè)置為 Lock狀態(tài)、或在Measurement-->Floating Panels選擇要運(yùn)行的圖形面板名稱。在VSPY軟件運(yùn)行后,即可通過圖形面板上對(duì)報(bào)文發(fā)送、信號(hào)值修改進(jìn)行控制,也可通過對(duì)應(yīng)控件查看對(duì)應(yīng)信號(hào)當(dāng)前值。

圖1 圖形面板效果圖
1.2.3 Function Blocks
Function Blocks中有腳本模式方便模擬簡(jiǎn)單邏輯報(bào)文收發(fā)控制,在仿真過程中,通過Function Blocks模擬事件報(bào)文。此處以模擬發(fā)送載重事件報(bào)文說明仿真過程。我們按照每小時(shí)發(fā)送一次,每次發(fā)送三幀,每幀間隔 50ms對(duì)載重?cái)?shù)據(jù)進(jìn)行發(fā)送。
通過 Scripting and Automation-->Function Blocks進(jìn)入Function Blocks界面,點(diǎn)擊左上角的“+”號(hào),選擇Script模式,同時(shí)在界面下半部分出現(xiàn)腳本編輯窗口,在Script界面我們按照順序編輯腳本命令,選擇行2的Description列雙擊,出現(xiàn)命令下拉窗口,選擇Transmit命令,在Valve列選擇CVW報(bào)文;同樣在行3選擇Wait For命令,寫入0.05s,即實(shí)現(xiàn)CVW 報(bào)文發(fā)送后等待 50ms;重復(fù)上面的操作,實(shí)現(xiàn) CVW報(bào)文發(fā)送3次,在最后一行,等待時(shí)間設(shè)置為3600s,見圖2。在腳本編輯界面的Start標(biāo)簽頁,可選擇腳本運(yùn)行機(jī)制,此處采用VSPY運(yùn)行后立即執(zhí)行,到此事件報(bào)文的發(fā)送腳本就創(chuàng)建完成了。

圖2 載重腳本編輯界面
需要注意腳本運(yùn)行本身就是一個(gè)循環(huán),在點(diǎn)擊開始運(yùn)行后,會(huì)重復(fù)執(zhí)行該循環(huán)。若需要腳本自動(dòng)運(yùn)行結(jié)束,需要添加stop語句,腳本運(yùn)行到stop后停止。
1.2.4 C代碼接口
C代碼是仿真中的重點(diǎn),可通過C代碼實(shí)現(xiàn)仿真節(jié)點(diǎn)的各種交互過程,比如網(wǎng)絡(luò)管理、UDS診斷、交互認(rèn)證等功能。下面以實(shí)現(xiàn)控制器A與終端之間UDS中27服務(wù)安全等級(jí)1的校驗(yàn)交互過程仿真為例說明C代碼接口在仿真中的使用??刂破鰽與終端交互過程均是以CAN報(bào)文為載體,在CAN總線上進(jìn)行的交互。詳細(xì)過程見圖3。

圖3 控制器A與終端認(rèn)證交互過程
通過Scripting and Automation-->C Code Interface進(jìn)入C代碼接口界面,新建工程名稱為SecurityAccess,點(diǎn)擊ok后會(huì)自動(dòng)建好對(duì)應(yīng)工程,并直接跳轉(zhuǎn)到VS軟件中。在VS中邏輯編寫的工作主要在 SpyCCode.c中,自動(dòng)生產(chǎn)的 vspy.c和vspy.h是對(duì)報(bào)文初始化、報(bào)文發(fā)送等函數(shù)以及VSPY工程中所有的報(bào)文、以及需要使用到變量、結(jié)構(gòu)體等進(jìn)行定義和聲明。
在SpyCCode.c中,首先創(chuàng)建報(bào)文Dig_A和Dig_B結(jié)構(gòu)變量(在 vspy.h中有定義),并對(duì)其進(jìn)行初始化操作,然后添加報(bào)文事件,在C Code Interface界面SecurityAccess工程前面方框打勾,然后點(diǎn)擊上方的Edit,彈出C Code Module setup 窗口,點(diǎn)擊Message Events標(biāo)簽,選擇Rx Messages,在下方左側(cè)窗口出現(xiàn)HS CAN網(wǎng)絡(luò)Dig_B報(bào)文,雙擊Dig_B報(bào)文,在右側(cè)已選擇報(bào)文窗口,就出現(xiàn)Dig_B報(bào)文,然后點(diǎn)擊標(biāo)簽頁Event Hander Code,復(fù)制接收Dig_B報(bào)文事件函數(shù),然后點(diǎn)擊ok按鈕完成配置。隨后將復(fù)制的Dig_B報(bào)文事件函數(shù)體,粘貼到SpyCCode.c。
新建應(yīng)用信號(hào)Dig_AControl對(duì)控制器A發(fā)送交互請(qǐng)求進(jìn)行控制,通過Scripting and Automation-->Application Signals進(jìn)入應(yīng)用報(bào)文編輯界面,點(diǎn)擊右上角“+”添加應(yīng)用信號(hào),設(shè)置成數(shù)字信號(hào)類型。在圖形面板添加該應(yīng)用信號(hào)的控制后,在C Code Interface中設(shè)置應(yīng)用信號(hào)事件,過程同報(bào)文事件設(shè)置過程,同時(shí)將應(yīng)用信號(hào)事件函數(shù)復(fù)制到CSpyCCode.c。隨后在該應(yīng)用信號(hào)事件函數(shù)中添加對(duì)應(yīng)功能代碼,實(shí)現(xiàn)在圖形面板設(shè)置Dig_AControl的值為1時(shí),則設(shè)置Dig_A報(bào)文的內(nèi)容為02 27 01,并將Dig_A報(bào)文發(fā)送出去。
在接收Dig_B報(bào)文事件中,檢測(cè)到Dig_B的報(bào)文值前三個(gè)字節(jié)為04 67 01,則提取Dig_B攜帶的seed,提取出seed后按照算法獲得key,填充到Dig_A中,即報(bào)文內(nèi)容為04 27 02 key,最后將Dig_A發(fā)送出去;當(dāng)檢測(cè)到Dig_B的報(bào)文值前三個(gè)字節(jié)為02 67 02時(shí),即終端判斷收到的key與內(nèi)部計(jì)算的key一致,則打印認(rèn)證成功字樣。其中seed和key都是16位變量。
1.2.5 仿真驗(yàn)證
將VSPY運(yùn)行在仿真狀態(tài),通過發(fā)送面板將所有周期報(bào)文進(jìn)行發(fā)送,通過messages界面檢查需周期發(fā)送報(bào)文是否均能按照正確周期進(jìn)行發(fā)送;各個(gè)周期報(bào)文正確發(fā)送后,運(yùn)行圖形面板,通過圖形面板控制報(bào)文的收發(fā)、信號(hào)值的更改,通過messages界面觀察報(bào)文是否能正??刂剖瞻l(fā),及報(bào)文值更改;圖形面板執(zhí)行都正確后,運(yùn)行Function Block腳本,查看是否按照預(yù)期進(jìn)行執(zhí)行;執(zhí)行成功后,運(yùn)行C代碼部分,由于該部分為交互過程,需要終端本身與仿真的控制器A進(jìn)行交互,來驗(yàn)證C代碼的正確性。若上述各過程驗(yàn)證未通過,需找出失敗原因后進(jìn)行修改,重新驗(yàn)證,直至成功。
以終端為被測(cè)件,調(diào)用仿真節(jié)點(diǎn)控制器A,完成終端如信號(hào)采集、交互認(rèn)證、網(wǎng)絡(luò)管理、UDS診斷等功能。按照?qǐng)D4進(jìn)行環(huán)境搭建。圖4中neoVI RED為VSPY硬件,電腦運(yùn)行VSPY軟件。

圖4 測(cè)試環(huán)境搭建圖
確認(rèn)CAN線能正常通訊后,打開VSPY軟件,進(jìn)入到測(cè)試平臺(tái),對(duì)neoVI RED上電,軟件運(yùn)行正常后,給終端供電。通過操作圖形面板,改變信號(hào)值,觀察終端對(duì)接收?qǐng)?bào)文的響應(yīng),判定終端是否功能正常;運(yùn)行Function Block以及C Code Interface去實(shí)現(xiàn)請(qǐng)求或事件型、使能型、事件周期型等報(bào)文,以及交互認(rèn)證過程、網(wǎng)絡(luò)管理、UDS功能等功能仿真,測(cè)試功能是否正確。
經(jīng)驗(yàn)證VSPY仿真的控制器A均能滿足預(yù)期要求,完成對(duì)終端的測(cè)試,在后期測(cè)試過程中,均可通過該仿真平臺(tái)模擬控制器A,完成所有與控制器A進(jìn)行的交互節(jié)點(diǎn)的測(cè)試,方便后期測(cè)試執(zhí)行。
為解決車載ECU整車CAN總線測(cè)試問題,可通過VSPY軟件的圖形面板、Function Block、C Code Interface等模塊實(shí)現(xiàn)對(duì)整車CAN總線控制器仿真來模擬整車CAN網(wǎng)絡(luò)環(huán)境,完成如終端的測(cè)試以及測(cè)試平臺(tái)的搭建等工作。通過該方法不僅可實(shí)現(xiàn)單個(gè)控制器的測(cè)試仿真,同時(shí)可結(jié)合VSPY中自帶的節(jié)點(diǎn)仿真功能,模擬整車所有CAN網(wǎng)絡(luò)節(jié)點(diǎn),實(shí)現(xiàn)對(duì)整車CAN網(wǎng)絡(luò)的仿真測(cè)試。這不僅利于在設(shè)計(jì)初發(fā)現(xiàn)整車CAN網(wǎng)絡(luò)問題,還能輕松仿真整車CAN網(wǎng)絡(luò)環(huán)境,復(fù)測(cè)CAN網(wǎng)絡(luò)的實(shí)際問題,提高測(cè)試效率及復(fù)用率,節(jié)約資源。