【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.0on 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不停波动,且不会高亮颜色
![图片]()










浙公网安备 33010602011771号