一文详解CAPL如何发送节点报文-实现节点DTC的丢失与恢复自动化测试

一文详解CAPL如何发送节点报文-实现节点DTC的丢失与恢复自动化测试,第1张

前言
新的一年,新的开始,新的征程;虽说天天大鱼大肉补人,也不能少了知识养分。
今天带来的是用CAPL如何发送节点报文来实现节点DTC的丢失与恢复自动化测试。
————————————————
故障类型很多,不探讨其他,只说节点报文丢失与恢复,直接进入干货区。
关于节点如何丢失与恢复,诊断问卷都有描述,大概长这样:

重点在于故障成熟条件和解除条件。
*我相信大多数同行都在发送节点报文这一步止步不前,毕竟每个项目的报文ID不一定相同,有很多办法:

  • 用IG模块手动发节点报文(累啊)
  • CAPL里写了N个定时器,每个定时器发相同周期节点报文(累啊)
  • 加载数据库发送信号(累啊)

这些方法效率底下且达不到想要的结果,最主要的是不通用啊!所以一个通用的代码是很有必要的,用我这代码,无数个ID都可以按照规定周期发。

*我的思路是只需要一个1ms的定时器:

  • 在定时器里设置一个数组,来记录当前节点报文的历史发送时刻。
  • 判断 节点报文周期 <= (当前时刻 - 当前节点报文的历史发送时刻)?
  • 若真,发送当前节点报文,若假,则继续下一个节点报文检测。
  • 代码量少,寥寥几行,实现全部ID周期发送,指谁谁发,指谁谁停,所有项目通用!

且往下看。

1、CAPL发送节点报文
  • 模拟三个节点0x01/0x02/0x03(存进txmsg[3]),分别以100ms/200ms/300ms(存进txmsg_cycle[3])发送。
  • 只需1个定时器+几行CAPL代码。
  • 适用网关互发

完整代码请关注公众号【总线网络】私信好友领取
效果图如下:

部分代码:完整代码请关注公众号【总线网络】私信好友领取
on timer Ttx{
    int Tempi;
    for(Tempi = 0; Tempi < elCount(txmsg); Tempi++){
        if(timeNow()/100.0 - current[Tempi] >= (txmsg_cycle[Tempi]) || current[Tempi] == 0){
            g_app.id = txmsg[Tempi];g_app.dlc = 8;
            output(g_app);current[Tempi] = timeNow()/100.0;
        }
    }setTimer(Ttx,1);
}
2、CAPL发送节点报文
  • 声明要检测节点DTC(hex)数组元素15个
  • 声明要检测节点报文ID数组元素15个
  • 声明要检测节点报文周期数组元素15个
  • 通过19 02读取到的数据,解析出来比对之前填好的节点DTC(hex)以及状态掩码,给出结果。

效果图如下:

3、延申

以下DTC测试需求,该如何来测试丢失与恢复呢?

  • 一个DTC需要多个节点报文发送,并且是 & 的关系
  • 一个DTC需要多个节点报文发送,并且是 || 的关系
  • 一个DTC需要多个节点报文发送,并且有数据检测
  • 待完善…
4、总结

完整代码请关注公众号【总线网络】私信好友领取
选择合适自己的写脚本的方式,能事半功倍!祝福各位学习CANoe的同学能早日毕业!
有不完善的地方欢迎留言或加我vx补充。
请输入公众号:总线网络。关注我,获取汽车网络开发及测试方面资料,更新干货!
分享总线开发知识
分享CAN/CANFDLIN/ETH等网络资料
分享CANoe/TSMaster/PCAN等设备工具使用
分享UDS/NM/Bootloader测试用例等
一起来学习,进步,交流吧!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/718605.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-25

发表评论

登录后才能评论

评论列表(0条)

保存