系列文章目录
车载网络测试实操源码_使用CAPL脚本解析hex、S19、vbf文件
车载网络测试实操源码_使用CAPL脚本对CAN报文的Counter、CRC、周期、错误帧进行实时监控
车载网络测试实操源码_使用CAPL脚本模拟发送符合协议要求(Counter和CRC)的CAN报文
车载网络测试实操源码_使用CAPL脚本实现安全访问解锁
车载网络测试实操源码_使用CAPL脚本进行DTC自动化测试
车载网络测试实操源码_使用CAPL脚本进行UDS刷写及其自动化测试
车载网络测试实操源码_使用CAPL脚本进行UDS协议测试
粉丝问题解答系列文章… …
其他持续更新中… …
前言
CAN(Controller Area Network)通信中的错误帧是用于在通信过程中检测和通知错误的报文。当CAN总线上的节点在发送或接收报文时检测到错误,会发送错误帧来通知总线上的其他节点,以便采取相应的错误处理措施。
在开发调试或测试时,有时候需要模拟发送错误帧,以验证错误帧对DUT的通信是否有异常影响。本文将介绍如何使用CAPL脚本模拟发送错误帧。
一、模拟发送错误帧
1、方法1
void output(errorFrame);
output除了可以传参message发送相应CAN报文,还可以传参errorframe,直接发送错误帧。详细说明如下:
2、方法2
long canOutputErrorFrame(errorFrame, long dominant, long recessive);
canOutputErrorFrame函数可以发送错误帧,并且可以通过传参设置显性位的数量和隐性位的数量。详细说明如下:
二、示例代码
在日常开发或测试过程中,一般会用在验证错误帧对DUT的通信是否有影响时用到模拟发送错误帧。以下示例为:验证CAN总线上出现100ms的周期错误帧时,DUT发出的报文周期是否收到影响。
(关于如何实时监控CAN报文周期是否异常,可查看之前的文章《车载网络测试实操源码_使用CAPL脚本对CAN报文的通信周期进行实时监控》)
以100ms周期模拟发送错误帧,同时监控DUT发出的报文周期是否异常。CAPL脚本示例如下:
variables
{
msTimer timer_ErrorFrame;//定义定时器
}
//定义定时器
on timer timer_ErrorFrame
{
output(CAN1.errorframe); // output Error Frame on CAN channel 1
// canOutputErrorFrame(CAN1.errorFrame, 6, 0); //output Error Frame with 6 dominant bits on CAN channel 1
setTimer(timer_ErrorFrame,100);//100ms周期发送
}
//测试用例:以100ms周期模拟发送错误帧,持续10秒,此过程中监控DUT发出的0x15C报文周期是否异常
testcase TC_ErrorFrame_test()
{
dword checkId;
// 检查DUT发出的0x15C报文周期是否在40~60ms范围内
checkId = ChkStart_MsgAbsCycleTimeViolation(0x15C, 40, 60);
TestAddCondition(checkId);//添加检测条件
setTimer(timer_ErrorFrame,0);//启动发送错误帧的定时器,以100ms周期发送错误帧
// 持续检查的等待时间,以10秒为例
TestWaitForTimeout(10000);
cancelTimer(timer_ErrorFrame);//停止发送错误帧的定时器
TestRemoveCondition(checkId);//移除检测条件
}
//执行测试用例
void MainTest()
{
TC_ErrorFrame_test();
}
以上是模拟发送错误帧并实时监控DUT发出的报文周期是否受到影响的CAPL脚本示例。执行效果如下:
总结
以上就是如何使用CAPL脚本模拟发送错误帧的讲解,并结合了一个运用场景的实例进行介绍,希望对大家有所帮助。各位可根据本文的示例,结合自己的需求,进行完善和二次开发。