INCA軟件
INCA是車輛控制器標定的首選軟件之一,主要包含功能模型標定、測量數據分析(MDA)、標定數據管理(CDM)、控制器刷新(ProF)功能等。而本文將介紹常用卻又陌生的ProF腳本的擴展用法,通過編寫ProF腳本與外面程序配合可實現各種診斷功能。例如通過ProF腳本讀取/解析控制器的故障碼及故障碼凍結幀信息等。
ProF腳本擴展應用效果展示
1、在ProF刷新界面執行讀取控制器故障信息Read - DTC Information,ProF會自動讀取/解析控制器故障碼狀態及凍結幀信息,最終將讀取的故障碼、凍結幀原始數據、故障信息報告記錄成文件保存到ProF文件夾中。
含:故障碼數據文件dtc.dat、凍結幀數據文件snapshot.dat、故障信息文件snapshot.txt
故障信息文件snapshot.txt
2、在ProF刷新界面執行讀取控制器信息Read - Module Information,ProF會自動讀取在用戶配置文件中定義的DID信息,同樣可以生成報告保存到ProF文件夾中。
控制信息文件did.txt
3、通過修改用戶配置文件,可將上述功能適配到不同的控制器或項目
故障碼/凍結幀介紹
當控制器軟件檢測到故障發生時,軟件故障管理模塊會將故障碼以及故障時刻的關鍵的變量信息保存至非易失的存儲區域。在故障碼消失前,用戶均可使用診斷儀讀取故障信息,用于分析故障產生的根本原因。
一、凍結幀類型分為三類:
1、OBD凍結幀:保存與整車排放的變量參數(如水溫、車速、發動機轉速、油門踏板位置等)通常僅有與排放相關控制器帶OBD凍結幀功能
2、全局凍結幀:保存整車/控制器共性的變量參數(如蓄電池電壓、整車里程、萬年歷時鐘、環境溫度等)
3、局部凍結幀:保存與觸發該凍結幀故障碼相關的變量參數(如當出現離合器打滑故障時,保存的參數信息可以是離合器輸入端轉速、輸出端轉速、離合器壓力、離合器傳遞扭矩等)
二、凍結幀分配機制
如下圖1所示,每個故障碼產生時均會保存OBD凍結幀與全局凍結幀以及一個該故障碼指定的局部凍結幀;例如:
故障碼1 保存(OBD凍結幀+全局凍結幀+局部凍結幀n)
故障碼2 保存(OBD凍結幀+全局凍結幀+局部凍結幀1)
故障碼3保存(OBD凍結幀+全局凍結幀+局部凍結幀2)
三、故障碼/凍結幀的讀取
1、首先通過UDS 19 02 08 指令獲取當前已確認的故障碼信息。控制器反饋的故障碼包含4個字節形式如下
2、通過UDS 19 04DTC1 DTC2 DTC300/01/02/FF指令讀取該故障碼的指定類型凍結幀信息。其中DTC1DTC2DTC3表示指定故障碼,
00表示讀取OBD凍結幀信息;
01表示讀取全局凍結幀信息;
02表示讀取對應的局部凍結幀信息(博世/聯電方式)
FF表示讀取OBD凍結幀信息+全局凍結幀信息+對應的局部凍結幀信息
3、控制器反饋的凍結幀數據格式如下(讀取FF類型):
5904DTC1DTC2DTC3FFDTCstatus000X Data... 01 0X Data.... 020X Data... ;OBD凍結幀和全局凍結定義都是一致的,可以按照信號定義做統一解析;而局部凍結幀的解析則相對較麻煩,因為每個故障碼的局部凍結幀編號是不同的;首先需要獲取故障碼的局部故障碼編號后找到對應的局部凍結幀定義來做解析。
PS:當前新一代的控制器,Nvm區域都相當充足。通常局部凍結幀的數據長度可超過200 Bytes,一個局部凍結幀可包含軟件中的幾乎所有關鍵參數,因此也可將所有的故障碼均凍結同一個局部凍結幀,而該局部凍結幀已經包含所有故障碼所需的參數變量。比如(模糊處理)
ProF腳本指令介紹
ProF的全稱是(Programimg Flasher / Flow?) 不太清楚。只知道ProF腳本中包含一些常用的配置、顯示、流控制、字符串變量、數值變量、UDS指令、調用外部程序指令、寫入/讀取文件指令(遺憾的是僅支持二進制格式寫入/讀取,這是最蛋疼的地方)然而僅使用ProF腳本是無法實現自動讀取每個故障碼的凍結幀,更不具備解析凍結幀信息功能。
解決方案 - ProF腳本+Windows控制臺程序+用戶配置文件
基于ProF腳本指令功能的不足現狀,結合分析當前ProF腳本支持的功能,決定采取額外使用C#編寫一個可被ProF腳本調用的Windows控制臺程序(ProFTools.exe),通過與ProF腳本配合使用實現讀取/解析控制器的故障碼及故障碼凍結幀信息等功能。
ProFTools.exe控制臺程序包含的功能函數及使用說明:
定義一個用戶配置文件(config.ini),使用.INI格式包含的信息有
1、OBD和全局凍結幀的信號定義
2、所有局部凍結幀的信號定義
其中formula表示轉換公式:
asc = ASCII碼、bcd = BCD碼、dec =十進制、hex =十六進制、lin =線性轉換
physical_value = data*factor+offset 、emun =枚舉型
bytes表示數據長度:factor表示系數:offset:表示偏移量 unit:表示單位
* struct 表示是信號否包含獨立DID索引號(1 =包含 0 =不包含)
舉個例子:
F4 05 表示凍結幀發動機水溫信號的DID,00是表示發動機水溫信號的數值;
F4 0C 表示凍結幀發動機轉速信號的DID,00 00表示發動機轉速信號數值;
上述狀態表示每個凍結幀信號前都附帶有獨立的DID編號,struct 值應該填入1 ;
若發動機轉速與發動機水溫共用一個DID編號,
F4 05 表示凍結幀發動機水溫信號的DID,00是表示發動機水溫信號的數值,然后直接跟著發動機轉速信號00 00 。發動機轉速信號沒有獨立的DID編號,換言之 F4 05 其實是個結構體數據類型后面帶了多個信號數值。上述狀態下發動機轉速信號 struct 值應該填入0。
總之用戶配置文件的信息要確保正確,才能使故障碼及凍結幀能夠正確地解析。
3、故障碼信息定義(故障碼描述、故障碼與局部凍結幀編號對應關系)
4、控制器數據DID定義,包含DID的解析方式(其中asc =ASCII碼、bcd = BCD碼、dec =十進制、hex =十六進制)
解決方案 -步驟說明
1、在INCA-ProF界面布局文件中增加"Action"下拉選項,在ProF腳本的主流程Main.prm中增加 "Action“ 對應的Calling及procedure。
2、使用ProF腳本讀取控制器故障碼數量(ConfirmedDTC),并保存至變量VAR_DTC_NUM
3、讀取控制器故障碼(ConfirmedDTC),并保存至文件(ProF僅支持二進制格式)
如圖所示包括4個故障碼D404 832F,D406832F,D40383 2F, D50683 2F
故障碼字節含義
4、使用ProF腳本調用控制臺程序ProFTools.exe,將步驟2保存“故障碼”文件轉換為“讀故障碼凍結幀”的指令集文件。ProF腳本調用外部程序函數RUN( xxx)
轉換示例:故障碼D4 04 832F-->讀取故障碼凍結幀指令19 04 D4 04 83 FF
5、使用ProF腳本循環讀取指令集文件(循環次數由故障碼數量VAR_DTC_NUM確定),每次讀取6個字節的數據(指令)并發送至控制器;
GET_STRING_FILE(UDS_CMD_FILE,%r,6,0)
ProF腳本將依次將控制器反饋的每個故障碼的凍結幀數據追加保存至凍結幀數據文件。
UDS_MSG_RET_GET(0, 0, 0)
SET_STRING_FILE(UDS_DID_FILE,0,0,1,0)
由于采取追加保存模式,因此每次循環讀取前都會先使用ClearFile 刪除上次保留的凍結幀數據文件。以免上次讀取到的數據被疊加到本次文件內
凍結幀數據文件的格式如下所示,5904DTC1DTC2DTC3FFDTCstatus000XOBD-Snapshot010X Global-Snapshot020X Local-Snapshot
即一個文件中保存著控制器反饋的每個故障碼的凍結幀原始數據。
6、使用ProF腳本調用Windows控制臺程序ProFTools,解析故障碼及凍結幀數據并保存成文本文件。RUN(PORF_TOOL_FILE, ReadDtc2Txt...)
可打開查看每個過程的數據文件dtc.dat, cmd.dat, snapshot.dat, snapshot.txt以及ProFTools程序運行的日志文件Logs
解決方案 - 技術細節
1、讀取故障碼存儲文件,將故障碼原始值轉換成標準的故障碼格式(Code categories);通過用戶配置文件定義檢索到故障碼對應的局部凍結幀編號、故障碼中文描述。
通過故障狀態位判斷是否為當前或歷史故障碼(bit0 testFailed)
故障碼狀態展示
2、提取凍結幀數據文件中單個故障碼凍結幀的有效數據(下圖中帶顏色填充的部分)
技術方案:兩個故障碼凍結幀正反饋幀頭之間即是凍結幀有效數據
5904DTC1DTC1status{ 有效數據 }5904DTC2DTC2status
3、提取單個凍結幀有效數據中,OBD凍結幀、全局凍結幀、局部凍結幀信號數據,技術方案是完全根據用戶配置文件中各個凍結幀信號定義索引實現。
OBD凍結幀數據的索引 =
凍結幀幀頭(6 bytes) + OBD凍結幀標識(2bytes) +DID數據標識( struct* 2bytes)
全局凍結幀數據的索引 =
OBD凍結幀數據的索引 +全局凍結幀標識(2bytes) +DID數據標識(struct* 2bytes)
全局凍結幀數據的索引 =
OBD凍結幀數據的索引+全局凍結幀數據的索引+ 全局凍結幀標識(2bytes) +DID數據標識(struct* 2bytes)
用戶配置文件
對應凍結幀數據文件
其他
1、為何基于INCAroF腳本制作了讀取/解析故障碼凍結幀的工具?
市面上暫未發現有工具可以的直接讀取/解析上述格式的局部凍結幀(貌似該格式是博世/聯電系統獨有)
或許使用CANoE和VehicleSPY3更容易實現上述功能,標定工程師通常都INCA +ES581/592打天下.. (CANoE和VehicleSPY3貴...)
2、本文結尾處會提供擴展應用所涉及的源代碼,首先說明本人不是專業碼農,對于語言的使用“只求功能實現即可”,因此代碼僅供參考。讀取INI文件部分代碼源于github,特此說明。
3、本文只是提供了一種基于INCAroF腳本擴展應用思路,或許有更便捷的方法。
審核編輯:湯梓紅
-
控制器
+關注
關注
112文章
16334瀏覽量
177813 -
腳本
+關注
關注
1文章
389瀏覽量
14858
原文標題:INCA軟件ProF腳本擴展應用 | 附下載
文章出處:【微信號:eng2mot,微信公眾號:汽車ECU開發】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論