一、首先INCA軟件是當前主流標定開發軟件之一,尤其在動力系統控制器的標定中應用非常廣泛;ProF編程腳本是INCA軟件提供各種實用功能之一,使用者可根據需求編寫ProF腳本對ECU閃存編程等各種自定義操作。
二、然而ProF腳本語言在ETAS的官網或其他網絡上並沒有專門的使用教程,通常只有ETAS技術支持人員提供的ProF Documentation文檔,然而該文檔僅涉及ProF語言的函數的使用說明,沒有從全局的框架上介紹ProF腳本的層次結構。
三、本人編寫整理了ProF腳本語言編寫教程,儘自己的綿薄之力與各位共享(若有錯誤敬請指正)
1、ProF腳本(安裝包)架構
ProF安裝包結構
profe文件夾
prof文件夾
2、install.ini文件說明, install文件是標準的INI文件格式,定義了ProF安裝包的信息(包括ProF名稱、版本、文件集內容等)
2.1 [Configuration] ProF配置信息定義
[Configuration]
Name=TC_Prof_XXX
Version=0301
Description="Software download for XXX Project."
2.2 [ChangePath_XX] 需要變更路徑的文件及變更內容(後面章節將說明該屬性的作用)
File = layout 需要變更路徑的文件定義
ConfigPath = c:\$prof\Install 變更的路徑定義
[ChangePath_Install]
File=layout
ConfigPath=c:\$prof\Install
[ChangePath_Common.PRI]
File=common1.pri
ConfigPath=c:\$prof\Install
EmptyPath=c:\$prof\
SecurityPath=c:\$security
2.3 [Files] prof文件夾內的文件定義
[Files]
SecurityFile=seedms6.dll
2.4 [LanguageFiles] profe文件夾內的文件定義
[LanguageFiles]
File=info.txt
LayoutFile=layout
File=config_func.cnf
File=config_phys.cnf
File=main.prm
File=common1.pri
...
3、*.cnf文件 定義了ProF腳本操作對象控制器協議的基礎信息,它的格式在ProF Documentation文檔中有嚴格的定義。主要包括通信速率、控制器ID、Memory_layout,Checksum計算方式等信息
舉例:
*****************************************************************************
***** Configuration Software download for xxx access *****
*****************************************************************************
;
ECU_ADDR:, 0x7C; ; address of ECU
PROJECT_NAME:, Software download for xxx
PROG_ST_ADDR:, 0xF1; ; address of tester on K-Line
;
PENDING_TIMEOUT:, 5000; ; timeout value for 'pending response'
;
; ; V_Prog = (Vpp * MAX) / 4096
; 0 Volt 5 Volt 12 Volt 16 Volt frei
SSC_UPROG_VALUES:, 0x0000, 0x02bc, 0x0690, 0x08c0, 0x0000;
;
; ; timing parameter for stimulation
; Index p1Max p2Min p2Max p3Min p3Max p4Min
;
;KWP2000_TP:, 1, 0x0014, 0x0000, 0x0032, 0x0037, 0x1388, 0x0000;
;
; timing parameter for maximum speed
;
;
; ; parameter for key71 stimulation
; baud w1 w2 w3 w4Min w4Max w5
;KWP2000_STP:, 0x14, 0x1e, 0xc8, 0xc8, 0x19, 0x32, 0x1e;
;
; ; parameter for KWP2000 stimulation
; Index tiniL wuP reizLtg reiztyp
KWP2000_SP:, 1, 0x0019, 0x0032, 0x00, 0x81;
;
; Index Baudrate i k ; some baud rates for this ECU
;HIGH_BDR:, 1, 500000, 0, 20;
;
DIAG_MODE:, 0x02; ; xx Flash programming
;
; index count data
SECURITY_ACCESS_MODE:, 1, 1, 0x05; ; SLD security access mode
;
; Routine no. Code for RNC Result flag
;
; no. of loc. routine for erasing Flash
LOC_ROUTINE_ERASE:, 0xFF00, 0x21, 0x01; ;direct result
;
; no. of loc. routine for checksum calculation
LOC_ROUTINE_CHK:, 0xFF01, 0x23, 0x01; ;direct result
;
VERIFY_METHOD:, 0x02; ; code for CRC32
;
CHECKSUM_RESULT_INVERSION:, 0x01 ; activate checksum inversion
;
ADDRESS_AND_LENGTH_FORMAT_IDENTIFIER:, 0x44; general setting
AALFI_FOR_CHECKSUM_CALCULATION:, 0x44;
AALFI_FOR_WRITE_MEMORY_BY_ADDR:, 0x33;
AALFI_FOR_READ_MEMORY_BY_ADDR:, 0x33;
AALFI_FOR_DYNAMICALLY_DEFINE_DATA_ID:, 0x33;
AALFI_FOR_REQUEST_DOWNLOAD:, 0x44;
DATA_FORMAT_IDENTIFIER:, 0x00;
;
;
MAX_LENGTH:, 0xfc; ; Patch for maximum length of transfer
;
;
ERASE_MEM_AREA:, 1, 0x00, 0x00, 0x100000L, 0x13FFFFL; Data section
ERASE_MEM_AREA:, 2, 0x00, 0x00, 0x020100L, 0x0FFFFFL; APPL
;
;CAN
;===
;
ECU_TO_INCA_CAN_ID:, 0x000007xx;
;TGT_INCA:, 0xE1; EXTENDED ADDRESS
INCA_TO_ECU_CAN_ID:, 0x000007xx;
;TGT_ECU:, 0xE9; EXTENDED ADDRESS
;
4、layout文件 ProF界面設置文件。這裏是最蛋疼的地方(ETAS完全沒有說明,只能窮舉的方式進行嘗試,很多數字都不知道具體含義)
3 1 1 "#File name: " 1 1 1 1 1
"*.HEX"
2 1 1 "#Channel: " 1 1 1 1 2
"CAN_HS" "1"
"CAN_MS" "1"
2 1 1 "#Action: " 1 1 1 1 4
"Read Identification" "ident noconv c:\$prof\Install\main.prm"
"Download - Application Code, Data" "prog_app_data convert c:\$prof\Install\main.prm"
"Download - Application Code" "prog_app convert c:\$prof\Install\main.prm"
"Download - Application Data" "prog_data convert c:\$prof\Install\main.prm"
選項1: 當取值是3時,表示此參數採用按鍵(button)方式選擇一個參數,如File name選項所示
當取值是2時,表示此參數採用下來選項方式選擇一個參數,如Channel選項所示
選項2:當選項1等於2時,選項2的值表示下拉欄中有多少個選擇項
* 當然上述界面僅在進行Action = Flash programming時有效
5、*.prm文件和*.pri文件說明:
一個ProF腳本文件只有一個.prm文件,它類似C語言中的main函數; 而一個ProF腳本文件卻可以有一個或者多個.pri文件,它類似C語言中的子函數。
舉例:
;%
;% <conv>: hex file conversion
;% convert = convert
;% noconv = do not convert
;%========================================================================
#include "define.pri"
#include "error_mess.pri"
#include "%7.pri"
#include "%8.pri"
;----------------------------------------------------------------------------
; Main programm
;----------------------------------------------------------------------------
[START]
DEFAULT_SCREEN_LAYOUT (FALSE)
EXTENDED_MESSAGE(FALSE)
DISPLAY_MESSAGE ("START section!!! ",FALSE)
case TRUE : INIT_CNF
default : INIT_CNF
[START_END]
[INIT_CNF]
INIT_FLASH_PROGRAMMING(ECU_ADDRESS,1,CONFIG"phys.cnf")
case TRUE : INIT_USB
default: DSP_ERROR
[INIT_CNF_END]
[INIT_USB]
UDSB_INIT_COMMUNICATION
case FPA_ACK : CONV1
default: DSP_ERROR
[INIT_USB_END]
[CONV1]
CALL (convert)
case TRUE : MAIN
default: DSP_ERROR
[CONV1_END]
[MAIN]
CALL (programECUFlash)
case TRUE : success
case ESCAPE: DSP_break
default : DSP_ERROR
[MAIN_END]
[success]
EXTENDED_MESSAGE(FALSE)
default : EXIT
[success_END]
5.1 上述主流程描述文件大體上逐步按照每個[Section] ...[Section_END] 之上而下執行。在每個[Section]內部會根據上一個函數的執行結果來判斷下一步跳轉的位置
執行INIT_FLASH_PROGRAMMING(ECU_ADDRESS,1,CONFIG"phys.cnf") 成功時TRUE,
則執行INIT_USB,否則執行DSP_ERROR
5.2 執行子流程文件(子函數)
當prm文件中調用子流程時,CALL ( programECUFlash ) ,ProF腳本會自動跳轉到對應的xxx.pri文件中執行對應的procedure ,
以下是prog_app_data.pri文件中procedure programECUFlash 子函數/流程的定義
procedure programECUFlash
{
[INFO]
SHOW_PROGRAMMING_INFO (1,"%1."EXT,1)
case TRUE : start
default : $return
[INFO_END]
#include "flash.pri" ; common routines
[erase]
DISPLAY_MESSAGE("", FALSE)
DISPLAY_MESSAGE("Erasure of Code area in the TCU Flash ", FALSE)
UDSX_ERASE_MEMORY_FORMAT(2, FMT_AALFI, FMT_START_ADDR, FMT_MEM_LEN, 50000)
case FPA_ACK : erase_success
default : $return FALSE
[erase_END]
[erase_success]
DISPLAY_MESSAGE ("Erase of Code area successfully completed. ",GREEN_FALSE)
default : prog
[erase_success_END]
6、重點/難點說明
大家都知道在進行控制器的刷新操作時,可以選擇刷新的區域;或者可以選擇進行讀取控制器信息的操作。那樣的話 我們該怎麼樣對不同的操作需求進行跳轉流程控制呢?
6.1 返回查看layout文件,其實當選擇不同的Action時,ProF會傳遞不同的參數進入主流程描述文件中,例如當我們選擇
"Download - Application Code, Data" "prog_app_data convert c:\$prof\Install\main.prm"時
實際上傳遞了多個參數到prm文件,根據空格符號進行區分。
- prog_app_data(參數7)
- convert (參數8)
- c:\$prof\Install\main.prm(參數9) 關於[ c:\$prof\Install ]後續與變更路徑一起
6.2 再次返回prm文件,在#include "%7.pri" #include "%8.pri" 表示載入參數7名 和 參數8名對應的文件
#include "%7.pri" == #include "prog_app_data.pri"
#include "%8.pri" == #include "convert.pri"
在ProF文件夾中編寫多個不同名字的.pri文件, 實際主流程描述文件根據用戶在Action的選擇,而選擇了對應文件的xxx.pri子流程文件來執行。當用戶選擇了"Download - Application Code, Data" "prog_app_data convert c:\$prof\Install\main.prm"時
實際等價於選擇了 main.prm , convert.pri, prog_app_data.pri
6.3 細心的同學會發現,我展示的layout文件略有差異:差異之處在於 參數9中的地址:
ProF安裝包中layout文件,地址是相對地址
ProF安裝安裝到本機後文件,變成了電腦中ETAS數據文件夾(ETASDATA)所在的地址
這裏就是之前 2.2 章節中提及的 install.ini 安裝文件[ChangePath]屬性作用,實際上INCA在安裝ProF腳本的過程中會自動將install.ini [Files][LanguageFiles] 裏面的文件全部複製到INCA指定的目錄中。
而後INCA會根據[ChangePath_XX]裏面的信息,變更裏面指定文件File = XX
指定配置路徑的ConfigPath = XX 全部轉換成安裝後的實際路徑
當然也而已採用類似swith語句的方式實現以上操作。
四、總結
ProF腳本還可以調用基於windows的控制檯*.exe文件或.dll文件,實現更多擴展功能。各位可參照ProF Documentation文檔進行開發。本文基於個人有限的經驗整理而得,若有錯誤敬請指正。