CANoe入门:在CAPL中语言中修改诊断服务的参数

通过CAPL语言发送诊断的必要性说明

在使用CANoe做诊断读取ECU数据的时候,是否有想过这样的一个问题:假设当前有100台车因为某种原因需要读取车上ECU的一些参数或者需要修改某个配置时,如果通过CANoe的诊断功能去一个一个的修改,是不是特别费时费力。如果将这个功能做成一个pannel,需要改动的数据只需要粘贴在输入框中,点一下确认则完成了。另外一个就是,当涉及一些复杂的计算时,每操作一次就必须要计算一次,费时也费力,通过CAPL语言就能解决上述的问题,所以CAPL的用途就是为了减少这种重复的工作而出现的。掌握CAPL语言操作诊断功能,可以在实际应用中,帮助我们减少大量且重复的工作,从而让我们的摸鱼境界更上一层楼。如下图两个功能,可以通过panel面板结合CAPL语言发送诊断请求实现一个修改ECU vin码和读取ECU基本配置信息的工具。

上面这个Panel中,可以实现在文本框中输入VIN码,然后点击“修改”按钮时,可以修改对应ECU的VIN码,省时省力。本文只讲述这其中的一个功能:修改CAPL诊断中的参数。

操作概览

  1. 创建一个CANoe项目(这是基本功,不再多介绍)
  2. 在CANoe主界面->Diagnostics&XCP选项卡中添加一个诊断请求
  3. 在SImulationt选项卡中添加一个Network nodes
  4. 新建一个CAPL脚本,在CAPL编辑器中编写相应的代码

主要使用到的函数

long diagSendRequest (diagRequest obj) //该函数用于发送诊断请求

long diagSetParameter (diagRequest obj, char parameterName[], double newValue) //设置诊断请求对象参数

diagSetParameter 主要用于修改诊断请求中的参数,入参分别为:

diagRequest obj   诊断请求的对象

char parameterName[]  诊断请求的参数名称类型为字符串

double newValue  修改后的值

示例

在CANoe中使用CAPL发送一个带参数的2E服务,参数可以动态修改。

添加诊断请求

1)进入CANoe软件的首页,找到 Diagnostics & XCP -> Diagnostics IOS TP新建一个UDS请求。

2) 找到 Diagnostics & XCP -> Basic Diagnostics 编辑一个诊断请求

 3)以上两个步骤操作完成后,就可以开始编写CAPL脚本了。

添加CAPL测试脚本

1)添加一个Network node

 2)打开CAPL编工辑界面

 示例代码

/*@!Encoding:936*/
includes
{
  
}

variables
{
  diagRequest SBM.WriteDataTest WriteDataTest; //定义诊断请求
}

//通过按键a触发事件
on key 'a' {
  int diagcode;
  
  //修改诊断中的参数
  diagSetParameter(WriteDataTest,"Param0",0x0A); //参数1
  diagSetParameter(WriteDataTest,"Param1",0x0B); //参数1
  diagSetParameter(WriteDataTest,"Param2",0x0C); //参数1
  diagSetParameter(WriteDataTest,"Param3",0x0D); //参数1
  
  //发送诊断请求,返回0则为成功,否则为异常
  diagcode = diagSendRequest(WriteDataTest);
   if (diagcode==0){
      write("--> 发修改vin码诊断报文成功!");
   }else{
      write("--> 发送诊断报文异常,错误码:%s !",diagcode);
   }
}

//报文事件,这里主要用于打印发送的诊断参数、
//说明:因为诊断的本质就是在CAN上发送一条报文
//所以可以通过报文事件截获CANoe发送到CAN总线上的诊断报文
on message 0x71F {
  write("获取到报文byte(0) = %02X",this.byte(0));
  write("当前报文ID = %X",this.id);
  write("获取报文名字 = %s",this.name);
  write("获取当前报文在哪路can上 = %d",this.can);
  write("获取当前报文是TX还是RX = %d",this.dir);
  write("获取当前报文的报文长度 = %d",this.dlc);
  write("获取当前报文的第1个QWord(8个字节) = %02X",this.byte(0));
  write("获取当前报文的第2个QWord(8个字节) = %02X",this.byte(1));
  write("获取当前报文的第3个QWord(8个字节) = %02X",this.byte(2));
  write("获取当前报文的第4个QWord(8个字节) = %02X",this.byte(3));
  write("获取当前报文的第5个QWord(8个字节) = %02X",this.byte(4));
  write("获取当前报文的第6个QWord(8个字节) = %02X",this.byte(5));
  write("获取当前报文的第7个QWord(8个字节) = %02X",this.byte(6));
  write("获取当前报文的第8个QWord(8个字节) = %02X",this.byte(7));
}

运行结果:

 后语

上述例子只是展示了如何修改在CAPL语言中修改诊断请求的参数。我们知道,在UDS中,一般情况下只有2E服务才需要带参数。特别是像修改VIN码或者其他配置参数的情况时,就需要不断的变更参数。实际应用中,需要配合Panel面板,通过输入框获取对应的参数,然后将参数转换成CAPL中的变量值写入到诊断请求中。就如开头中的修改VIN码的功能,就是这样实现的。具体实现方法,可以自已多去参考一下官方文档和网上一些例子。这里只是一个最简单的说明。

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值