一、 如何查看CAPL中有哪些可以用的库函数呢?
放心,当然是有手册的,如何找到呢?在Vector CAPL Browser 中找,如下图

点击CAPL Functions后界面右侧会出现CAPL Functions小窗口,如下图:

在CAPL Functions小窗口选择函数名,下方可看到函数的接口定义,如下图:
当你想不起函数的入参和返回值时可查看,若您像看函数的作用,示例等更详细的介绍可点击小问号进入帮助界面,


以这个setTimer为例,下面有CANoe官网给的简单示例,告知这个函数的简单用法。
从参数列表中,可以看到这个函数的几个参数
mstimer t:一个mstimer定时器
timer t:一个秒级别定时器
duration:定时器持续的时间,即定时器超时时间
durationsec:定时器超时时间的秒
durationnanosec:定时器超时时间的纳秒
二、常用库函数可分为以下几类:
-
消息处理函数
output():发送消息到总线,需先定义message对象并设置DLC等参数this关键字:在on message事件中引用当前接收的消息内容getValue():从信号数据库获取信号物理值
-
定时器控制
setTimer():启动定时器,配合on timer事件实现定时触发cancelTimer():取消已设置的定时器- 示例:
on message 0x100 {
if (this.byte(0) == 0xFF) {
cancelTimer(1);
ReportWriteString("收到终止信号");
}
}
-
调试输出函数
write():向Write窗口输出调试信息writeLineEx():带格式控制的多行输出ReportWriteString():向报告文件写入数据,需配合reportOpen使用
-
事件处理函数
on key:响应键盘按键事件on timer:定时器超时事件on message:特定ID报文接收事件
-
变量特性
- 局部变量默认具有static特性,需注意初始化位置影响
- 数据比较时需注意不同位宽变量的符号处理差异
典型应用场景示例:
on message 0x100 {
if (this.byte(0) == 0xFF) {
cancelTimer(1);
ReportWriteString("收到终止信号");
}
}
注意事项:
- 函数调用前需确保关联事件已正确注册
- 报告文件操作需成对调用open/close
- 变量比较建议显式转换数据类型
三、常用的CAN总线库函数主要分为以下几类:
📊 1. 总线状态监控函数
-
canGetBusLoad:获取指定CAN通道的总线负载百分比,用于评估网络实时性能。 -
canGetErrorFrameCount:统计通道错误帧总数,诊断网络稳定性。 -
canGetChipState:读取CAN控制器芯片状态(如"Active"、"BusOff")。
📨 2. 报文操作函数
-
output(message):发送CAN报文(支持标准帧/扩展帧)。message 0x100 msg; msg.dlc = 8; output(msg); // 发送ID为0x100的报文 -
on message事件处理:接收特定报文并解析数据。on message 0x200 { write("Received byte0: %x", this.byte(0)); // 解析报文首字节 } -
canGetMinSendDistance:检测两帧报文的最小发送间隔(毫秒),用于时序分析。
⚠️ 三、错误注入与诊断
-
canOutputErrorFrame:主动发送错误帧,模拟网络异常场景。 -
canGetTransceiverErrorCount:获取收发器错误计数器值(TEC/REC)。 -
diagSendRequest(扩展):发送诊断请求(UDS/OBD)并处理响应。
🔧 四、辅助工具函数
-
settimer/on timer:定时任务管理,如周期发送报文。 -
canEnableStatistics:启用/禁用通道统计功能(如帧速率、突发传输)。
💡 关键注意事项:
- ACK处理:CAPL通过硬件自动处理ACK位,无需手动操作。
- 报文属性:使用
this.ID、this.DIR(方向)、this.RTR(远程帧标志)访问报文属性。 - 通道指定:函数调用需声明通道(如
CAN1.),默认操作当前通道
先写到这里,下篇写LIN总线相关函数。
9393

被折叠的 条评论
为什么被折叠?



