前言
新的一年,新的开始,新的征程;虽说天天大鱼大肉补人,也不能少了知识养分。
今天带来的是用CAPL如何发送节点报文来实现节点DTC的丢失与恢复自动化测试。
————————————————
故障类型很多,不探讨其他,只说节点报文丢失与恢复,直接进入干货区。
关于节点如何丢失与恢复,诊断问卷都有描述,大概长这样:
重点在于故障成熟条件和解除条件。
*我相信大多数同行都在发送节点报文这一步止步不前,毕竟每个项目的报文ID不一定相同,有很多办法:
- 用IG模块手动发节点报文(累啊)
- CAPL里写了N个定时器,每个定时器发相同周期节点报文(累啊)
- 加载数据库发送信号(累啊)
这些方法效率底下且达不到想要的结果,最主要的是不通用啊!所以一个通用的代码是很有必要的,用我这代码,无数个ID都可以按照规定周期发。
*我的思路是只需要一个1ms的定时器:
- 在定时器里设置一个数组,来记录当前节点报文的历史发送时刻。
- 判断 节点报文周期 <= (当前时刻 - 当前节点报文的历史发送时刻)?
- 若真,发送当前节点报文,若假,则继续下一个节点报文检测。
- 代码量少,寥寥几行,实现全部ID周期发送,指谁谁发,指谁谁停,所有项目通用!
且往下看。
- 模拟三个节点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)以及状态掩码,给出结果。
效果图如下:
以下DTC测试需求,该如何来测试丢失与恢复呢?
- 一个DTC需要多个节点报文发送,并且是 & 的关系
- 一个DTC需要多个节点报文发送,并且是 || 的关系
- 一个DTC需要多个节点报文发送,并且有数据检测
- 待完善…
完整代码请关注公众号【总线网络】私信好友领取
选择合适自己的写脚本的方式,能事半功倍!祝福各位学习CANoe的同学能早日毕业!
有不完善的地方欢迎留言或加我vx补充。
请输入公众号:总线网络。关注我,获取汽车网络开发及测试方面资料,更新干货!
分享总线开发知识
分享CAN/CANFDLIN/ETH等网络资料
分享CANoe/TSMaster/PCAN等设备工具使用
分享UDS/NM/Bootloader测试用例等
一起来学习,进步,交流吧!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)