|
汽车零部件采购、销售通信录 填写你的培训需求,我们帮你找 招募汽车专业培训老师
一、首先INCA软件是当前主流标定开发软件之一,尤其在动力系统控制器的标定中应用非常广泛;ProF编程脚本是INCA软件提供各种实用功能之一,使用者可根据需求编写ProF脚本对ECU闪存编程等各种自定义操作。
本文福利: 分享技术资料《INCA教程》,公众号对话框回复【汽车ECU开发032】下载。
二、然而ProF脚本语言在ETAS的官网或其他网络上并没有专门的使用教程,通常只有ETAS技术支持人员提供的ProF Documentation文档,然而该文档仅涉及ProF语言的函数的使用说明,没有从全局的框架上介绍ProF脚本的层次结构。
三、本人编写整理了ProF脚本语言编写教程,尽自己的绵薄之力与各位共享(若有错误敬请指正)
ProF安装包结构
profe文件夹
prof文件夹
2、install.ini文件说明, install文件是标准的INI文件格式,定义了ProF安装包的信息(包括ProF名称、版本、文件集内容等)
2.1 [Configuration] ProF配置信息定义[Configuration]Name=TC_Prof_XXXVersion=0301Description="Software download for XXX Project."
2.2 [ChangePath_XX] 需要变更路径的文件及变更内容(后面章节将说明该属性的作用)File = layout 需要变更路径的文件定义ConfigPath = c:\$prof\Install 变更的路径定义[ChangePath_Install]File=layoutConfigPath=c:\$prof\Install[ChangePath_Common.PRI]File=common1.priConfigPath=c:\$prof\InstallEmptyPath=c:\$prof\SecurityPath=c:\$security2.3 [Files] prof文件夹内的文件定义[Files]SecurityFile=seedms6.dll2.4 [LanguageFiles] profe文件夹内的文件定义 [LanguageFiles]File=info.txtLayoutFile=layoutFile=config_func.cnfFile=config_phys.cnfFile=main.prmFile=common1.pri...3、*.cnf文件 定义了ProF脚本操作对象控制器协议的基础信息,它的格式在ProF Documentation文档中有严格的定义。主要包括通信速率、控制器ID、Memory_layout,Checksum计算方式等信息
举例:********************************************************************************** Configuration Software download for xxx access **********************************************************************************;ECU_ADDR:, 0x7C; ; address of ECUPROJECT_NAME:, Software download for xxxPROG_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 freiSSC_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 reiztypKWP2000_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 dataSECURITY_ACCESS_MODE:, 1, 1, 0x05; ; SLD security access mode;; Routine no. Code for RNC Result flag; ; no. of loc. routine for erasing FlashLOC_ROUTINE_ERASE:, 0xFF00, 0x21, 0x01; ;direct result; ; no. of loc. routine for checksum calculationLOC_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 settingAALFI_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 sectionERASE_MEM_AREA:, 2, 0x00, 0x00, 0x020100L, 0x0FFFFFL; APPL;;CAN;===;ECU_TO_INCA_CAN_ID:, 0x000007xx;;TGT_INCA:, 0xE1; EXTENDED ADDRESSINCA_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_ERROR5.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"时
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文档进行开发。本文基于个人有限的经验整理而得,若有错误敬请指正。
|
|