tsmaster 实现 xcp 标定

原因

由于tsmaster xcp 开放了观测量,针对于标定量,再没有相应的硬件激活时无法使用其标定功能的。

解决方法

由于tsmaster 支持 小程序,可以通过修改系统变量,然后 利用小程序访问系统变量,触发xcp标定命令进而实现标定的功能。

实现

添加系统变量

仿真–>系统变量–>用户变量
分别添加

用户变量类型
xcp_u32_addrUInt3232位标定数据地址
xcp_u32_valueUInt3232位标定数据数据
xcp_u8_addrUInt328位标定数据地址
xcp_u8_valueUInt8 Array8位标定数据数据

创建小程序

程序–>c 小程序–>添加 c 小程序

  1. 添加全局定义
    u32 xcp_addr;
    u32 xcp_flag;
    u32 xcp_value;
    u32 xcp_value_sizeof;
    
  2. 添加变量事件
  • 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;
    
  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;
    	}
    }
    
  1. 添加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;
    }
    

使用方法

  1. 连接ECU
    仿真–>系统变量–>用户变量
  2. 添加需要标定的数据到测试列表
  3. 启动观察
  4. 通过修改 xcp_u32_addr(标定量地址)xcp_u32_value(标定量数据),即可修改32位标定量
  5. 通过修改 xcp_u8_addr(标定量地址)xcp_u8_value(标定量数据),即可修改8位标定量
  • 18
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值