一、首先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_CNFdefault : INIT_CNF
[START_END][INIT_CNF]INIT_FLASH_PROGRAMMING(ECU_ADDRESS,1,CONFIG"phys.cnf")case TRUE : INIT_USBdefault: DSP_ERROR
[INIT_CNF_END][INIT_USB]UDSB_INIT_COMMUNICATIONcase FPA_ACK : CONV1default: DSP_ERROR
[INIT_USB_END][CONV1]CALL (convert)case TRUE : MAINdefault: DSP_ERROR
[CONV1_END][MAIN]CALL (programECUFlash)case TRUE :  successcase ESCAPE: DSP_breakdefault :    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 : startdefault : $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_successdefault : $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文档进行开发。本文基于个人有限的经验整理而得,若有错误敬请指正。

INCA_ProF脚本教程相关推荐

  1. 学习笔记之Linux Shell脚本教程:30分钟玩转Shell脚本编程

    Linux Shell脚本教程:30分钟玩转Shell脚本编程 http://c.biancheng.net/cpp/shell/ 转载于:https://www.cnblogs.com/pegasu ...

  2. 一个不错的shell 脚本教程 入门级

    一个不错的shell 脚本教程 入门级 投稿:mdxy-dxy 字体:[增加 减小] 类型:转载 时间:2011-10-11 我要评论 一个很不错的bash脚本编写教程,至少没接触过BASH的也能看懂 ...

  3. BAT 批处理脚本教程

    BAT 批处理脚本教程 第一章 批处理基础 第一节 常用批处理内部命令简介 批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD.这些命令统 ...

  4. expect脚本教程_Expect脚本SSH示例教程

    expect脚本教程 Expect script is a great linux/unix utility. I have to deal with a lot of unix servers in ...

  5. 【脚本教程】脱机的一些指令参考

    [脚本教程]脱机的一些指令参考 2011-10-13 17:19:22| 分类: 石器脚本 assa |字号 订阅 下载LOFTER我的照片书 | 转自万宇的...很久的贴了..刚刚找到得... 根据 ...

  6. 安卓app对接网络验证系统一机一码源码脚本教程,一键注入网络验证工具

    apk对接网络验证系统一机一码源码脚本教程 APP网络验证源码分享: https://url11.ctfile.com/d/25976711-52588129-416474?p=6724 (访问密码: ...

  7. html5分镜头脚本范例,分镜头脚本教程图解

    这是一份pdf免费高清彩版的分镜头脚本设计教程,全书彩页,排版非常不错,阅读起来充满趣味性,另外,书中有不少分镜头脚本范例以及分镜头脚本教程图解,是一本值得一看的好书.全书详细讲解了分镜头是如何制作的 ...

  8. 第一章 ArcGIS Pro python高级脚本教程介绍

    文章的很多内容来自于ESRI出版的 Advanced Python Scripting for ArcGIS Pro 一书,该书也提供了实验数据与免费的PDF书籍,可以通过官网链接下载. 不想仅仅做一 ...

  9. jmeter代理服务器录制脚本教程(入门篇)

    jmeter代理服务器录制脚本教程 1. jmeter有两种录制脚本的方法,一种下载安装badboy来录制后导入jmeter,另外一种使用jmeter代理服务器来录制脚本:以下就介绍一下jmeter代 ...

最新文章

  1. 中国科学院大学研一课程教材课件共享项目
  2. 软考经过 之 天助自助者
  3. 产品经理必备知识之网页设计系列(三)-移动端适配无障碍设计及测试
  4. upgrade yum 指定版本_CentOS 6.9/7通过yum安装指定版本的MySQL
  5. 用Openswan组建Linux IPSec ---第二部分
  6. printf函数输出格式汇总
  7. Java开发人员简历做假的常见情况
  8. 17. 3D移动 transform:translateX(100px);transform:translateY(100px);transform:translateZ(100px);
  9. 梯形公式和辛普森的Matlab
  10. ATMEL芯片系列介绍2
  11. 数据挖掘:实用案例分析 下载_萌低龄,超实用“萌系”呈现技巧及设计案例分析...
  12. 华为CANN训练营_昇腾AI入门课笔记
  13. 手持PDA助力零售卖场管理
  14. 岁月温柔-18 妈妈在市ICU第8天
  15. JvisualVM使用教程
  16. 诚迈科技发布OpenHarmony发行版鸿诚志远HongZOS
  17. EASYRECOVERY_3.3.29包含注册机、都教授数据恢复含注册码
  18. A+B=X【浙江工商大学oj 详细解析版】
  19. 微信小程序 - <textarea> 多行文本输入框 placeholder 属性换行显示文字(适用于 vant-weapp 的 Field 输入框文本域组件 van-field)样式修改的详细教程
  20. TensorFlow Serving的使用

热门文章

  1. python爬虫详解(七)——使用爬虫查看实时疫情状况
  2. 【Websocket 第三篇】消息推送
  3. Stata——固定效应模型、随机效应模型、混合效应模型(区别、实例)
  4. Microsoft Project 2010 设置子任务
  5. 使用后羿采集器采集数据,并导出到MySql数据库中
  6. 2023-2029全球斑马鱼行业调研及趋势分析报告
  7. 微信网站被误封,不知道为何被封,站长认证一直失败该如何解决?
  8. armbian 斐讯n1_斐讯N1安装Armbian
  9. sublime_字体更换
  10. OPENCV入门教程十四:medianBlur中值平滑