楊艷,馮烙烙,羅鵬飛,蔣濤,喻尚
(陜西重型汽車有限公司,陜西 西安 710200)
隨著商用車整車CAN網(wǎng)絡電子控制單元增多,CAN已成為整車不可或缺的一部分,支持 CAN總線協(xié)議已成為整車電子控制器的基礎功能。而通過 CAN總線收發(fā)工具,實現(xiàn)對各個 CAN總線控制器節(jié)點的仿真測試,已成為測試人員的必備技能。Vehicle Spy(VSPY)是一款能進行節(jié)點仿真的CAN總線收發(fā)工具,本文即以VSPY為基礎,實現(xiàn)CAN總線節(jié)點的仿真,完成仿真環(huán)境的搭建,并將其應用到實際測試中。本文以控制器A為例,實現(xiàn)CAN總線節(jié)點的仿真,并在車載終端的測試中進行應用,完成對應功能的仿真測試。
控制器A的仿真,是依賴于VSPY中各個功能部件進行搭建的,包括報文編輯、圖形面板、Function Block、C Code Interface幾部分。其中報文編輯將創(chuàng)建控制器A的所有收發(fā)報文;圖形面板用于控制報文收發(fā)及修改報文值,在信號集中測試中非常實用;Function Block用于實現(xiàn)簡單邏輯處理;C Code Interface完成邏輯較復雜的功能仿真。
1.2.1 CAN報文編輯
在 VSPY 中建立并進入仿真平臺“Test”,通過 Spy Networks-->Messages Editor進入Messages Editor,在HS CAN(可根據(jù)需要自由選擇網(wǎng)段)上創(chuàng)建控制器A的所有收發(fā)報文。例如創(chuàng)建發(fā)送報文TCO1,單擊Transmit按鈕,點擊on Network下拉框旁邊的“+”號,出現(xiàn)報文編輯界面。在Description描述框中填入報文名字TCO1,CAN Type中選擇“Xtd 29 bit”(可根據(jù)需要選擇標準幀或擴展幀),在仲裁地址框填入報文 ID:CFE6C10(默認情況下就是 16進制),在DLC報文長度欄填入8,默認周期處填寫為50ms。在信號編輯區(qū)域點擊加號,添加車速信號,信號名為“Tachograph vehicle speed”,點擊信號編輯區(qū)域右上方fx Edit按鈕,輸入報文長度16bits,選擇intel格式,在Scalling標簽頁選擇線性mx+b 輸入分辨率為1/256 km/h per bit,偏移量為0,單位km/h,確認OK后,這樣一個報文的一個信號就創(chuàng)建完成了。重復上述步驟,創(chuàng)建其他發(fā)送報文。點擊Receive,進入接收報文編輯界面,同前面步驟創(chuàng)建所有的接收報文。
創(chuàng)建完所有報文后,在Tx Pannel界面將需要周期發(fā)送的報文設置發(fā)送周期和開始發(fā)送條件即可。在仿真運行測試時,即可仿真所有周期報文的發(fā)送。
1.2.2 Graphical Panels
在仿真過程中,可通過 Graphical Panels實時更改信號值。通過在VSPY軟件中建立圖形面板,使得仿真測試變得簡單易行。在整個仿真過程中,將需要通過圖形面板控制的信號篩選出來(如車速、大氣壓力、轉速、里程、扭矩、發(fā)動機冷卻液溫度等),并創(chuàng)建對應控件,方便仿真時控制信號值。下面以TCO1報文以及車速、左轉向燈信號為例簡單說明圖形面板的創(chuàng)建。
1.2.2.1 對報文進行關聯(lián)設置
通過 Measurement-->Graphical Panels打開圖形面板界面,放置TX控件到主界面合適位置后,界面右側區(qū)域出現(xiàn)了該控件屬性對話框。在參數(shù) TransmitMessage下拉框選擇要關聯(lián)的報文TCO1報文,參數(shù)TxType選擇1-Periodic On/Off Button,即點擊后報文周期發(fā)送,再次點擊報文停止發(fā)送。注意要實現(xiàn)報文周期發(fā)送,需先在Tx Pannel報文發(fā)送面板中,將該報文定義成周期報文,同時配置有發(fā)送周期。
1.2.2.2 對車速信號進行關聯(lián)設置
選擇Meter控件放置在主界面對應位置,在Meter控件屬性界面 Signal屬性下拉框選擇 Tx Messages ->HS CAN->TCO1->Tachograph vehicle speed信號,即車速信號,點擊右上角OK確認即可;在屬性菜單中修改最大值250、最小值0;車速指示控件即設置完成。
選擇Text Entry控件放置在主界面合適位置,在其Signal屬性下拉框選擇車速信號,點擊右上角OK確認即可,車速編輯控件制作完成。
1.2.2.3 對左轉向燈進行關聯(lián)設置
選擇 LED控件放置在主界面合適位置,在其屬性界面Signal屬性下拉框選擇左轉向燈信號,點擊右上角OK確認即可;如對LED On Color選擇紅色,LED Off Color選擇綠色,則當信號為1狀態(tài)時顯示紅色,信號為0時顯示綠色。
On Off Button控件對0、1狀態(tài)進行控制,在圖形面板主界面放置該控件,在屬性框中將該控件關聯(lián)到左轉向燈信號,在OnOffType屬性框中選擇1-Toggle Button,方便信號狀態(tài)的保持。
Drop Down List對有多個狀態(tài)的信號非常適用,該控件可通過下拉框設置關聯(lián)信號的信號值。同樣,放置完該控件后,關聯(lián)到左轉向信號,在該控件List屬性中將左轉向信號值表編輯進去,即0對應關閉、1對應開啟,2對應錯誤,3對應無效。完成后就可實現(xiàn)該信號值的下拉選擇。
1.2.2.4 運行圖形面板
可直接在圖形面板編輯界面將當前面板設置為 Lock狀態(tài)、或在Measurement-->Floating Panels選擇要運行的圖形面板名稱。在VSPY軟件運行后,即可通過圖形面板上對報文發(fā)送、信號值修改進行控制,也可通過對應控件查看對應信號當前值。
圖1 圖形面板效果圖
1.2.3 Function Blocks
Function Blocks中有腳本模式方便模擬簡單邏輯報文收發(fā)控制,在仿真過程中,通過Function Blocks模擬事件報文。此處以模擬發(fā)送載重事件報文說明仿真過程。我們按照每小時發(fā)送一次,每次發(fā)送三幀,每幀間隔 50ms對載重數(shù)據(jù)進行發(fā)送。
通過 Scripting and Automation-->Function Blocks進入Function Blocks界面,點擊左上角的“+”號,選擇Script模式,同時在界面下半部分出現(xiàn)腳本編輯窗口,在Script界面我們按照順序編輯腳本命令,選擇行2的Description列雙擊,出現(xiàn)命令下拉窗口,選擇Transmit命令,在Valve列選擇CVW報文;同樣在行3選擇Wait For命令,寫入0.05s,即實現(xiàn)CVW 報文發(fā)送后等待 50ms;重復上面的操作,實現(xiàn) CVW報文發(fā)送3次,在最后一行,等待時間設置為3600s,見圖2。在腳本編輯界面的Start標簽頁,可選擇腳本運行機制,此處采用VSPY運行后立即執(zhí)行,到此事件報文的發(fā)送腳本就創(chuàng)建完成了。
圖2 載重腳本編輯界面
需要注意腳本運行本身就是一個循環(huán),在點擊開始運行后,會重復執(zhí)行該循環(huán)。若需要腳本自動運行結束,需要添加stop語句,腳本運行到stop后停止。
1.2.4 C代碼接口
C代碼是仿真中的重點,可通過C代碼實現(xiàn)仿真節(jié)點的各種交互過程,比如網(wǎng)絡管理、UDS診斷、交互認證等功能。下面以實現(xiàn)控制器A與終端之間UDS中27服務安全等級1的校驗交互過程仿真為例說明C代碼接口在仿真中的使用??刂破鰽與終端交互過程均是以CAN報文為載體,在CAN總線上進行的交互。詳細過程見圖3。
圖3 控制器A與終端認證交互過程
通過Scripting and Automation-->C Code Interface進入C代碼接口界面,新建工程名稱為SecurityAccess,點擊ok后會自動建好對應工程,并直接跳轉到VS軟件中。在VS中邏輯編寫的工作主要在 SpyCCode.c中,自動生產(chǎn)的 vspy.c和vspy.h是對報文初始化、報文發(fā)送等函數(shù)以及VSPY工程中所有的報文、以及需要使用到變量、結構體等進行定義和聲明。
在SpyCCode.c中,首先創(chuàng)建報文Dig_A和Dig_B結構變量(在 vspy.h中有定義),并對其進行初始化操作,然后添加報文事件,在C Code Interface界面SecurityAccess工程前面方框打勾,然后點擊上方的Edit,彈出C Code Module setup 窗口,點擊Message Events標簽,選擇Rx Messages,在下方左側窗口出現(xiàn)HS CAN網(wǎng)絡Dig_B報文,雙擊Dig_B報文,在右側已選擇報文窗口,就出現(xiàn)Dig_B報文,然后點擊標簽頁Event Hander Code,復制接收Dig_B報文事件函數(shù),然后點擊ok按鈕完成配置。隨后將復制的Dig_B報文事件函數(shù)體,粘貼到SpyCCode.c。
新建應用信號Dig_AControl對控制器A發(fā)送交互請求進行控制,通過Scripting and Automation-->Application Signals進入應用報文編輯界面,點擊右上角“+”添加應用信號,設置成數(shù)字信號類型。在圖形面板添加該應用信號的控制后,在C Code Interface中設置應用信號事件,過程同報文事件設置過程,同時將應用信號事件函數(shù)復制到CSpyCCode.c。隨后在該應用信號事件函數(shù)中添加對應功能代碼,實現(xiàn)在圖形面板設置Dig_AControl的值為1時,則設置Dig_A報文的內容為02 27 01,并將Dig_A報文發(fā)送出去。
在接收Dig_B報文事件中,檢測到Dig_B的報文值前三個字節(jié)為04 67 01,則提取Dig_B攜帶的seed,提取出seed后按照算法獲得key,填充到Dig_A中,即報文內容為04 27 02 key,最后將Dig_A發(fā)送出去;當檢測到Dig_B的報文值前三個字節(jié)為02 67 02時,即終端判斷收到的key與內部計算的key一致,則打印認證成功字樣。其中seed和key都是16位變量。
1.2.5 仿真驗證
將VSPY運行在仿真狀態(tài),通過發(fā)送面板將所有周期報文進行發(fā)送,通過messages界面檢查需周期發(fā)送報文是否均能按照正確周期進行發(fā)送;各個周期報文正確發(fā)送后,運行圖形面板,通過圖形面板控制報文的收發(fā)、信號值的更改,通過messages界面觀察報文是否能正常控制收發(fā),及報文值更改;圖形面板執(zhí)行都正確后,運行Function Block腳本,查看是否按照預期進行執(zhí)行;執(zhí)行成功后,運行C代碼部分,由于該部分為交互過程,需要終端本身與仿真的控制器A進行交互,來驗證C代碼的正確性。若上述各過程驗證未通過,需找出失敗原因后進行修改,重新驗證,直至成功。
以終端為被測件,調用仿真節(jié)點控制器A,完成終端如信號采集、交互認證、網(wǎng)絡管理、UDS診斷等功能。按照圖4進行環(huán)境搭建。圖4中neoVI RED為VSPY硬件,電腦運行VSPY軟件。
圖4 測試環(huán)境搭建圖
確認CAN線能正常通訊后,打開VSPY軟件,進入到測試平臺,對neoVI RED上電,軟件運行正常后,給終端供電。通過操作圖形面板,改變信號值,觀察終端對接收報文的響應,判定終端是否功能正常;運行Function Block以及C Code Interface去實現(xiàn)請求或事件型、使能型、事件周期型等報文,以及交互認證過程、網(wǎng)絡管理、UDS功能等功能仿真,測試功能是否正確。
經(jīng)驗證VSPY仿真的控制器A均能滿足預期要求,完成對終端的測試,在后期測試過程中,均可通過該仿真平臺模擬控制器A,完成所有與控制器A進行的交互節(jié)點的測試,方便后期測試執(zhí)行。
為解決車載ECU整車CAN總線測試問題,可通過VSPY軟件的圖形面板、Function Block、C Code Interface等模塊實現(xiàn)對整車CAN總線控制器仿真來模擬整車CAN網(wǎng)絡環(huán)境,完成如終端的測試以及測試平臺的搭建等工作。通過該方法不僅可實現(xiàn)單個控制器的測試仿真,同時可結合VSPY中自帶的節(jié)點仿真功能,模擬整車所有CAN網(wǎng)絡節(jié)點,實現(xiàn)對整車CAN網(wǎng)絡的仿真測試。這不僅利于在設計初發(fā)現(xiàn)整車CAN網(wǎng)絡問題,還能輕松仿真整車CAN網(wǎng)絡環(huán)境,復測CAN網(wǎng)絡的實際問題,提高測試效率及復用率,節(jié)約資源。