基于Python/Capl脚本 对通信矩阵报文(Flexray/Can)的周期检测(二)

📘前言

  • 🍅在基于Python/Capl脚本 对通信矩阵报文(Flexray/CAN)的周期检测(一)中我们完成了完成测试的基本操作,即自动解析文件,抓取到关键数据
  • 🍅 下面我们需要根据CAPL 中自带的周期测试的内置函数完成 CAPL脚本的编写,完善测试case。
  • 🍅演示软硬件环境 Win10 x64 ; CANoe 11 SP2 x64

请添加图片描述

请添加图片描述

📙 CAPL 脚本的周期测试 API

  • 1️⃣ vector 的capl 提供了测试周期的API接口,帮助文档中有很多重载的函数,我选了两个说明:

  • dword ChkStart_MsgAbsCycleTimeViolation (Message aObservedMessage,duration aMinCycleTime, duration aMaxCycleTime,
    char[] aCallback);

  • dword ChkStart_MsgAbsCycleTimeViolation (lo

  • 7
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
是的,您可以使用CAPL编写脚本来实现全程检测报文周期的功能。以下是一个示例代码,可以帮助您实现这个功能: ```CAPL variables { int messageCounter = 0; // 报文计数器 float messagePeriod = -1; // 报文周期 float messageFrequency = -1; // 报文频率 dword lastMessageTime = 0; // 上一次接收到报文的时间戳 } on message * // 监听所有CAN报文 { if (this.ext == 0) // 只处理标准帧 { messageCounter++; // 计数器加1 dword currentTime = timeNow(); // 获取当前时间戳 if (lastMessageTime != 0) // 如果不是第一次接收到报文 { float timeDiff = (currentTime - lastMessageTime) / 1000000.0; // 计算时间差,单位为秒 if (messagePeriod < 0) // 如果是第一次计算报文周期 { messagePeriod = timeDiff; } else { messagePeriod = 0.9 * messagePeriod + 0.1 * timeDiff; // 采用滑动平均法计算报文周期 } messageFrequency = 1.0 / messagePeriod; // 计算报文频率 } lastMessageTime = currentTime; // 更新上一次接收到报文的时间戳 } } on timer event 1 // 定时器事件,定时输出报文周期和频率 { write("Message period: %.3f s, frequency: %.3f Hz\n", messagePeriod, messageFrequency); setTimer(1, 1000); // 重新设置定时器,每隔1秒输出一次 } ``` 在上面的代码中,我们使用 `on message *` 监听所有的CAN报文,并通过计数器和时间戳计算出报文周期和频率。每隔1秒,我们使用 `write()` 函数输出报文周期和频率。您可以根据需要修改代码中的参数和输出格式。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蚂蚁小兵

慢慢长夜磨一章好文章,费烟!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值