欢迎大家学习我的《带你玩转车载测试——CAPL入门篇》系列课程,我是分享人M哥,目前从事车载控制器的软件开发及测试工作。
学习过程中如有任何疑问,可底下评论!
如果觉得文章内容在工作学习中有帮助到你,麻烦点赞收藏评论+关注走一波!感谢各位的支持!
为了方便用户能够灵活使用CAPL进行开发,其内置了我们所使用的大部分库函数。在车载开发测试领域常用的库函数可以分为以下几类:
- (1) CAN总线库函数,包含CAN软硬件相关函数,如:canGetConfiguration(long channel, canSettings settings);
(2) LIN总线库函数,如:linStartScheduler()等;
(3) 诊断库函数,包括诊断请求的发送及响应等,如:diagSendRequest (diagRequest obj)等;
(4) Test Support库函数;
(5) CAN Disturbance Interface库函数,主要借助VH6501进行干扰测试等,如:BusOff和采样点测试;
(6) RS232串口库函数,主要用于在测试中控制可编程电源进行自动化测试;
(7) File Accress库函数,包括打开文件及获取文件数据等函数,如:fileGetString (char buff[], long buffsize, dword fileHandle)获取文件内字符串;
接下来将对上述常用库函数进行一一举例说明。
1.CAN总线库函数
CAN总线库函数众多,这里只介绍几个常用的,如下表1所示:
函数名 | 功能 |
canGetBusLoad | 返回CAN通道的负载率百分比 |
canOutputErrorFrame | 向CAN总线输出指定错误帧 |
canGetErrorFrameCount | 返回CAN通道的总错误帧数 |
resetCan | 复位CAN控制器 |
resetCanEx | 复位指定通道的CAN控制器 |
output | 向总线输出CAN报文或错误帧 |
(1)canGetBusLoad:返回CAN通道的负载率百分比,如下图1所示:当按下按键‘a’时,write窗口输出当前的总线负载率;
includes
{
}
variables
{
long gBusLoad;
}
on key 'a'{
gBusLoad = canGetBusLoad(1,eCurrValue);
write("CAN总线负载率为:%d",gBusLoad);
}
![](https://i-blog.csdnimg.cn/blog_migrate/ddd2a7e945e8746f76dcc43e2e7cd273.png)
(2)向CAN总线输出错误帧,可以采用output和canOutputErrorFrame函数,同时可以通过canGetErrorFrameCount函数来返回CAN通道的总错误帧数量。如下图2所示:当按下按键‘a’时,Trace窗口输出错误帧,并且Write窗口输出总的错误帧数量;
includes
{
}
variables
{
long gErrCount;
}
on key 'a'{
output(errorframe);
gErrCount = canGetErrorFrameCount(1);
write("CAN总线错误帧发送成功,错误帧数量为:%d",gErrCount);
}
![](https://i-blog.csdnimg.cn/blog_migrate/4d35ea80538801bc39ddcc9c01a93933.png)
(3)当CAN控制器产生BusOff进行复位时,就必然使用resetCan和resetCanEx这两个函数;如:当按下按键‘a’时,CAN控制器复位;
on busOff
{
resetCan();
//resetCanEx(1);
}
(4)output函数不仅可以向总线发送错误帧,还能发送任意报文,如下图3所示:当定时器触发后,报文0x100被发送到总线上;
includes
{
}
variables
{
msTimer tSendMsg;
message * gCanMsg;
}
on start
{
setTimer(tSendMsg,200);
}
on timer tSendMsg
{
gCanMsg.id = 0x100;
gCanMsg.dlc = 8;
gCanMsg.byte(1) = 0x0;
gCanMsg.byte(1) = 0x01;
gCanMsg.byte(2) = 0x02;
gCanMsg.byte(3) = 0x03;
gCanMsg.byte(4) = 0x04;
gCanMsg.byte(5) = 0x05;
gCanMsg.byte(6) = 0x06;
gCanMsg.byte(7) = 0x07;
output(gCanMsg);
cancelTimer(tSendMsg);
}
![](https://i-blog.csdnimg.cn/blog_migrate/31ae13adebbdd8fa2348ac63cbd240d9.png)
感谢对本期内容不遗余力的学习,下期内容即将奉上,欢迎下次光临!