系列文章目录
使用CAPL脚本解析hex、S19、vbf文件
使用CAPL脚本对CAN报文的Counter、CRC、周期、错误帧进行实时监控
使用CAPL脚本模拟发送符合协议要求(Counter和CRC)的CAN报文
使用CAPL脚本控制继电器实现CAN线、电源线的通断
使用CAPL脚本实现BUS OFF干扰测试
使用CAPL脚本进行DTC自动化测试
使用CAPL脚本进行UDS刷写及其自动化测试
使用CAPL脚本进行UDS协议测试
使用CAPL脚本进行网络管理测试
粉丝问题解答系列文章… …
其他持续更新中… …
前言
在车载测试中,经常需要测一些异常场景,比如正在执行某个正常功能时,突然一下CAN通信异常,或者突然掉电了。这时候通常需要通过短接CAN_H和CAN_L、断开CAN_H或CAN_L、断开电源正极或负极等。手动短接或断开这些线束比较麻烦,而且无法精确控制在什么时刻进行操作,以及操作的持续时间(通常是毫米级别)。
这些场景我们可以通过CANoe+CAPL脚本来实现,可以精确的控制操作时刻和持续时间。另外,为了实现CAN线的通断,我们会额外需要一些硬件设备。比如VH6501,它可以直接模拟CAN线的短接。但是VH6501的价格相对比较昂贵(几万块钱一个),各个公司的资源一般都不会太多。
今天介绍一种低成本的测试解决方案,使用常规的Vector CAN盒(如VN1630A等)+继电器来实现。优点:1、价格低廉(继电器一般20块钱就能买到);2、不仅能实现CAN线、电源线的通断,理论上能模拟各种线路的通断,可以运用在各种场景。
一、继电器简介
继电器是一种电控制器件,是当输入量的变化达到规定要求时,在电气输出电路中使被控量发生预定的阶跃变化的一种电器。在电路中起着自动调节、安全保护、转换电路等作用。
市面上有非常多的继电器,价格都很便宜,一般在几块钱至几十块钱。其线路连接和操作方法都很简单,一般包括继电器自身供电的正负极,输入控制信号的正负极,输出的连接状态(一般就是断开或者接通),比如我使用的这个继电器,如下图所示:
二、Vector CAN接口盒的I/O通道简介
Vector的CAN接口盒一般都带有一个I/O通道,比如VN1630A的通道5、VH6501的通道2。它是一个D-SUB9接口,相应的接口定义可以在CANoe软件的Hardware->Vector I/O中查看。比如在如下的Vector I/O Configuration界面中,右键添加你的设备,然后就会显示其I/O通道的定义:
三、线路连接示例
除了前面介绍的继电器和Vector的CAN接口盒,还需要用到一个直流电源和一个电阻。需要注意供电电压的大小,比如我用的这款继电器供电电压是12V的,供电的时候需要匹配。为了达到可控目的,在DOUT口外部需要一个上拉电阻(根据继电器的驱动能力选择阻值,一般100Ω左右就行),将Digital output上拉至电源。连线示意图如下:
在上图继电器的右端,引出公共端的接线,以及常开或者常闭端的接线(二选一即可),这两根接线就可以接入你需要进行连接或断开的线路中。常见的场景包括:CAN_H与CAN_L短接、CAN_H/L与电源的正极/负极短接、断开CAN_H/L、断开电源的正极/负极等。
四、CAPL脚本示例
这里仅演示如何通过Vector CAN接口盒的DOUT接口来控制继电器通断。
CAPL脚本示例如下:
on key 'a'
{
// 将数字输出设置为 1
@sysvar::IO::VN1600_1::DOUT = 1;
}
on key 'b'
{
// 将数字输出设置为 0
@sysvar::IO::VN1600_1::DOUT = 0;
}
按下按键“a”,输出DOUT为1;按下按键“b”,输出DOUT为0。从而控制继电器进行接通或断开。比如我把继电器的两根连接状态线分别接到CAN_H和CAN_L的效果,当我按下“a”或“b”时,CAN通信将发生BUS OFF或恢复正常。效果如下:
在此基础上,结合自动化测试用例,就可以写出各种测试场景。比如:
testcase TC01_BusOFF_short_CAN_HL()
{
//前置操作...
// 将数字输出设置为1,控制继电器使CAN_H和CAN_L短路
@sysvar::IO::VN1600_1::DOUT = 1;
TestWaitForTimeout(100);//让CAN_H和CAN_L短接持续100ms
// 将数字输出设置为 0,控制继电器断开CAN_H和CAN_L的短接
@sysvar::IO::VN1600_1::DOUT = 0;
//后续操作...
}
总结
以上就是如何使用CAPL脚本控制继电器实现CAN线、电源线的通断的讲解,并结合了一个运用场景的实例进行介绍,希望对大家有所帮助。各位可根据本文的示例,结合自己的需求,进行完善和二次开发。