INCA_ProF腳本教程

一、首先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文件,根據空格符號進行區分。

  1.   prog_app_data(參數7)
  2.   convert (參數8)
  3.   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文檔進行開發。本文基於個人有限的經驗整理而得,若有錯誤敬請指正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章