原因
由于tsmaster xcp 开放了观测量,针对于标定量,再没有相应的硬件激活时无法使用其标定功能的。
解决方法
由于tsmaster 支持 小程序,可以通过修改系统变量,然后 利用小程序访问系统变量,触发xcp标定命令进而实现标定的功能。
实现
添加系统变量
仿真–>系统变量–>用户变量
分别添加
用户变量 | 类型 | |
---|---|---|
xcp_u32_addr | UInt32 | 32位标定数据地址 |
xcp_u32_value | UInt32 | 32位标定数据数据 |
xcp_u8_addr | UInt32 | 8位标定数据地址 |
xcp_u8_value | UInt8 Array | 8位标定数据数据 |
创建小程序
程序–>c 小程序–>添加 c 小程序
- 添加全局定义
u32 xcp_addr; u32 xcp_flag; u32 xcp_value; u32 xcp_value_sizeof;
- 添加变量事件
-
On_xcp_u32_addr关联系统变量xcp_u32_addr
-
On_xcp_u32_value关联系统变量xcp_u32_value
app.get_system_ar_uint32("xcp_u32_addr",&xcp_addr); app.get_system_ar_uint32("xcp_u32_value",&xcp_value); xcp_flag = 1; xcp_value_sizeof = 4;
-
On_xcp_u8_addr关联系统变量xcp_u8_addr
-
On_xcp_u8_value关联系统变量xcp_u8_value
app.get_system_ar_uint32("xcp_u32_addr",&xcp_addr); app.get_system_ar_uint32("xcp_u8_value",&xcp_value); xcp_flag = 1; xcp_value_sizeof = 1;
- 添加 can 与发送事件
-
CAN_PreTx_xcp_addr(任意标识符:发送任务ID的报文都会触发),用于发送标定数据地址
if(xcp_flag == 1) { xcp_flag = 2; ACAN->Fidentifier = 0x610; ACAN->FData[0]= 0xF6; ACAN->FData[1]= 0x00; ACAN->FData[2]= 0x00; ACAN->FData[3]= 0x00; ACAN->FData[4]= xcp_addr&0XFF; ACAN->FData[5]= (xcp_addr>>8)&0XFF; ACAN->FData[6]= (xcp_addr>>16)&0XFF; ACAN->FData[7]= (xcp_addr>>24)&0XFF; }
-
CAN_PreTx_xcp_value(任意标识符:发送任务ID的报文都会触发),用于发送标定数据
if(xcp_flag == 3) { xcp_flag = 4; ACAN->Fidentifier = 0x610; if(xcp_value_sizeof == 1) { ACAN->FData[0]= 0xF0; ACAN->FData[1]= xcp_value_sizeof ; ACAN->FData[2]= xcp_value; ACAN->FData[3]= 0x00; ACAN->FData[4]= 0x00; ACAN->FData[5]= 0x00; ACAN->FData[6]= 0x00; ACAN->FData[7]= 0x00; }else if(xcp_value_sizeof == 4) { ACAN->FData[0]= 0xF0; ACAN->FData[1]= xcp_value_sizeof ; ACAN->FData[2]= xcp_value&0XFF; ACAN->FData[3]= (xcp_value>>8)&0XFF; ACAN->FData[4]= (xcp_value>>16)&0XFF; ACAN->FData[5]= (xcp_value>>24)&0XFF; ACAN->FData[6]= 0x00; ACAN->FData[7]= 0x00; } }
- 添加CAN接受事件
-
CAN_Rx_xcp_addrack(0x61A:接收到0x61aID的报文都会触发),用于控制标定发送阶段
if((ACAN-FData[0]= 0xFF)&&(xcp_flag == 2)) { //接受到地址应答 xcp_flag = 3; }else if((ACAN-FData[0]= 0xFF)&&(xcp_flag == 4)) { //接受到数据应答 xcp_flag = 5; }
使用方法
- 连接ECU
仿真–>系统变量–>用户变量 - 添加需要标定的数据到测试列表
- 启动观察
- 通过修改 xcp_u32_addr(标定量地址)xcp_u32_value(标定量数据),即可修改32位标定量
- 通过修改 xcp_u8_addr(标定量地址)xcp_u8_value(标定量数据),即可修改8位标定量