【CAPL】测量CAN周期

测试CAN周期的必要性

周期

  • 周期 = 当前帧的时间 - 前一帧的时间

周期的重要性

  • 周期是一个非常重要的测试项目
  • 周期的设置值与真实值之间会有一定的偏移
  • 在功能安全部分要求较高
    • 如果某条总线上发送的信号的周期不符合要求,会触发该总线的DTC错误码

思路分析

  • 系统变量:

    • 2个系统变量:timer和period
    • 在panel和capl中:分别用来关联周期的输入框、输出框
  • panel设置:

    • 设置input/output box控件
    • 分别用来关联周期的输入框、输出框
    • 可以设置alarm值并高亮预警值
  • CAPL思路:

    • 新建message,赋ID值,监控周期发送的时间间隔
    • 模拟周期发送:用定时器的第2个参数 -- 设置特定值的发送时间间隔
    • 真实周期计算:每次循环用当前时间timeNow() - 上一次时间,赋值输出,并更新上一次时间为当前时间值

系统变量和panel设置

网络节点

  • 图片

系统变量

  • 新建系统变量:timer和period,分别设置初始值和最值
  • 注意:新增系统变量后,记得点右下角的apply,否则panel关联会看不到新增变量
    图片

panel设置

  • 选择input/output box控件,并设置显示text等
  • 分别关联以上的2个系统变量
  • alarm display部分设置:超过范围后高亮报警
    图片
    图片

关于panel中input/output的最值预警设置

  • help中的官方解释
    image

CAPL

switch.can:报文发送方

  • 声明变量:报文和定时器
    variables
    {
      message 0x1CD MyMessage;
      msTimer myTimer;
    }
    
  • on start触发定时器
    on start
    {
      setTimer(myTimer,0);
    }
    
  • 定时器:
    on timer myTimer
    {
      setTimer(myTimer,@MyNameSpace::timer);
      output(MyMessage);
    }
    

light.can:报文接收方

  • 变量声明:存放前一帧和后一帧时间
    variables
    {
      dword period1;
      dword period2;
    }
    
  • on start:给两个时间点赋初始值为0
    on start
    {
      period1 = 0;
      period2 = 0;
    }
    
  • 监控报文0x1CD;差值赋值给系统变量period,并更新前一帧时间点为后一帧时间点
  • 注意:timeNow()的单位,转换为ms,需要/100.0
    on message 0x1CD
    {
      period2 = timeNow();
      @MyNameSpace::period = (period2 - period1)/100.00;
      period1 = period2;
      
    }
    

代码完善

  • 可以加入一些细节
  • 以message为例
    • 报文定义时:message 0x1CD FrameOutput = {dlc=4};
    • 发送报文前,给报文发送的data赋值:FrameOutput.byte(1)=0x1a;

运行效果

panel

  • input初始值为200
    图片
  • input位置输出其他值:如400,output会在399-401不停波动,且高亮颜色
    图片
  • input输入500,output会在399-401不停波动,且不会高亮颜色
    图片

trace中:按ID筛选-1??模糊匹配

  • image

参考链接

END

posted @ 2025-08-12 16:57  anliux  阅读(96)  评论(0)    收藏  举报