首页 > 编程语言 >车载网络测试实操源码_使用CAPL脚本对CAN报文的通信周期进行实时监控

车载网络测试实操源码_使用CAPL脚本对CAN报文的通信周期进行实时监控

时间:2024-07-09 14:00:25浏览次数:21  
标签:脚本 周期 报文 CAPL 源码 实操 监控 time

系列文章目录

车载网络测试实操源码_使用CAPL脚本解析hex、S19、vbf文件
车载网络测试实操源码_使用CAPL脚本对CAN报文的Counter、CRC和周期进行实时监控
车载网络测试实操源码_使用CAPL脚本模拟发送符合协议要求(Counter和CRC)的CAN报文
车载网络测试实操源码_使用CAPL脚本实现安全访问解锁
车载网络测试实操源码_使用CAPL脚本进行DTC自动化测试
车载网络测试实操源码_使用CAPL脚本进行UDS刷写及其自动化测试
车载网络测试实操源码_使用CAPL脚本进行UDS协议测试
粉丝问题解答系列文章… …
其他持续更新中… …


文章目录


前言

在之前的文章《车载网络测试实操源码_使用CAPL脚本对CAN报文的Counter和CRC进行实时监控》中,已经讲解了如何实时监控报文的Counter和校验码,今天我们接着来讲一下如何使用CAPL脚本对CAN报文的通信周期进行实时监控。


一、实时监控报文周期

1、函数说明

timeNow()函数可以获取当前的时间,单位是10微秒。详细说明如下:
在这里插入图片描述

2、CAPL脚本示例

针对0x123报文的通信周期进行实时监控的CAPL脚本示例如下:

on message can1.0x123
{
  float msg_cycle;
  float cycle_error;
  float time_last,time_now;

  msg_cycle = 50;  //假设要监控的报文周期为50ms
  cycle_error = 0.05;  //假设允许的周期误差为5%

  time_now = timeNow() / 100;  //ms

  if( (time_now - time_last >= msg_cycle*(1-cycle_error)) && (time_now - time_last <= msg_cycle*(1+cycle_error)) )
  {
    //write("msgTEST_0x123:Cycle RIGHT! cycle_error = %f",time_now - time_last);
  }
  else
  {
    write("msgTEST_0x123:Cycle ERROR!!! cycle_error = %f",time_now - time_last);
  }

  time_last = timeNow() / 100;  //ms
}

以上是针对CAN报文的通信周期进行实时监控的CAPL脚本示例,可根据需要修改需要进行监控的报文ID,以及报文周期和允许的误差值。实时监控过程中,如果监控的报文周期不符合要求,会在canoe的write窗口中进行打印输出,以便定位问题。效果如下:
在这里插入图片描述

二、定时监控报文周期

1、方法一

①、函数说明

ChkStart_MsgAbsCycleTimeViolation函数可用于检查一段时间内指定ID的报文周期是否在指定的时间范围内。详细说明如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

②、CAPL脚本示例

针对0x123报文的通信周期持续监控10秒的CAPL脚本示例如下:

testcase TC_Monitor_MsgAbsCycleTimeViolation()
{
  dword checkId;
  
  // 检查报文周期是否在45~55ms之间
  checkId = ChkStart_MsgAbsCycleTimeViolation(0x123, 45, 55);
  TestAddCondition(checkId);
  // 检查报文的等待时间
  TestWaitForTimeout(10000);
  TestRemoveCondition(checkId);
}

执行上述测试用例,可得到设定的这一段监控时间内,该报文周期的时间分布情况。测试报告如下:
在这里插入图片描述

2、方法二

①、函数说明

ChkStart_MsgRelCycleTimeViolation函数可用于检查一段时间内指定报文(必须在DBC中存在)周期是否在允许的误差范围内。详细说明如下:
在这里插入图片描述
在这里插入图片描述

②、CAPL脚本示例

针对ACU_state报文(DBC中的报文名)的通信周期持续监控10秒的CAPL脚本示例如下:

testcase TC_Monitor_MsgRelCycleTimeViolation()
{
  dword checkId;
  
  // 检查报文周期是否在DBC规定报文周期的90%~110%范围内
  checkId = ChkStart_MsgRelCycleTimeViolation(ACU_state, 0.9, 1.1);
  TestAddCondition(checkId);
  // 检查报文的等待时间
  TestWaitForTimeout(10000);
  TestRemoveCondition(checkId);
}

执行上述测试用例,可得到设定的这一段监控时间内,该报文周期的时间分布情况。测试报告如下:
在这里插入图片描述


总结

以上就是如何使用CAPL脚本对CAN报文通信周期进行实时监控的讲解,希望对大家有所帮助。各位可根据本文的示例,结合自己的需求,进行完善和二次开发。

标签:脚本,周期,报文,CAPL,源码,实操,监控,time
From: https://blog.csdn.net/Vista7Malone/article/details/139890251

相关文章