1 背景
对于刚接触网关路由测试的同学来说,CANoe自动测试环境的fail项分析总会显得无从下手。笔者整理了工作过程中的一些经验笔记,希望能帮到您。
2 常见问题
2.1 问题1
-
问题描述:CANoe出现错误帧
-
原因分析1:可能硬线连接有误;
-
解决方法1:需要根据ICD检查VN1640硬件设备与DUT(被测控制器)线束连接是否有误。
简易测试环境如下图:
检查GW——>CANoe硬件端的线束是否有误;
-
原因分析2:终端电阻配置有误;
-
解决方法2:需要根据CAN通信规范检查是否需要配置终端电阻且是否配置正确。
-
原因分析3:CAN网络配置有误;
-
解决方法3:需要按照系统需求确认CANoe上位机的CAN总线类型(如:CAN类型还是CANFD、标准帧还是扩展帧)、波特率、采样点是否配置有误。
网络类型、波特率、采样点配置界面如下图:
-
原因分析4:线束或者连接器故障;
-
解决方法4:需要用万用表检查是否存在短路、断路已经接触不良的情况。
-
原因分析5:CAPL脚本的发送函数逻辑问题;
-
解决方法5:需要检查CAPL脚本的output()或者CanTp相关函数的发送逻辑(可结合Trace界面检查发送报文是否合理)。
-
原因分析6:DUT内的软件有误;
-
解决方法6:需要确定当前版本软件是否存在问题或者软件当前状态是否被执行某些操作(比如波特率的切换等)。
2.2 问题2
- 问题描述:CANoe测试报告中出现 “not supported by the interaction layer” 错误提示
如下图:
-
原因分析:
通常与**诊断交互层(Interaction Layer, IL)**的配置或消息属性不匹配有关。 -
原因分析1:DBC文件中未启用
GenMsgILSupport
属性; -
解决方法1:
检查DBC配置,使用CANdb++ Editor等工具打开DBC文件,找到相关消息(如诊断请求/响应消息),确认其GenMsgILSupport
属性是否为1
(Enabled);如下图:
-
原因分析2:诊断描述文件(CDD/ODX)与DBC不匹配;在诊断配置中(如加载的CDD/ODX文件),如果引用了某条CAN消息,但该消息在DBC中未标记为支持交互层,会导致此错误。需
-
解决方法2:
同步诊断配置:- 确保CDD/ODX文件中定义的诊断服务(如UDS的
0x22 ReadDataByIdentifier
)与DBC中的消息ID一致。 - 在CANoe中重新关联DBC和诊断描述文件:
- 打开 Diagnostics & XCP > Diagnostic/ISO TP Configuration
- 检查关联的DBC和CDD/ODX文件是否匹配。
- 确保CDD/ODX文件中定义的诊断服务(如UDS的
-
原因分析3:CAPL脚本或测试模块的误用;在CAPL脚本或Test Module中,若尝试通过交互层API(如
diagRequest
)操作一条未启用交互层支持的消息,会触发此错误。 -
问题解决3:检查CAPL代码,确保操作的诊断请求对象(
diagRequest
)与DBC中支持IL的消息绑定。// 正确示例:绑定到支持IL的消息 diagRequest MyDiagReq * 0x7E0::MyService;
-
原因分析4:CANoe版本或配置问题;旧版本CANoe可能对交互层支持不完善,或工程配置中未启用诊断功能。
-
问题解决4:更新CANoe,升级到最新版本(如v16.0 SP3+); 启用诊断功能,在 Diagnostics & XCP 配置中勾选 Enable Diagnostic Communication。
2.3 问题3
- 问题描述:CANoe测试报告中报No message can网段::报文名 could be found的问题;
如下图:
-
原因分析:常见原因可能是报文在DBC中未定义、报文名称有误、网段配置错误等;
-
原因分析1:报文未在DBC文件定义;报文(名称或ID)未在DBC数据库文件中定义,导致CANoe无法识别,报文名称拼写错误或大小写不匹配(DBC对大小写敏感)。
-
解决方法1:检查DBC文件
- 检查DBC文件
使用CANdb++ Editor打开DBC文件,确认报文已正确定义,名称和ID与报错信息一致。 - 验证拼写和格式
- 报文名称中的空格、下划线等符号需与代码或配置中完全一致。
- 例如:DBC中定义为
Message SC
,代码中若写为Message SC1
会报错。
- 检查DBC文件
-
原因分析2: DBC文件未正确加载到工程,DBC文件未关联到CANoe工程,或关联后被意外移除。
-
问题解决2:
加载DBC文件- 在CANoe中点击 Database > Open,选择DBC文件。
- 右键单击 Configuration > Networks > CAN Networks,选择 Add Network Database 关联DBC。
检查数据库映射
- 确保DBC文件已映射到对应的CAN通道(如CAN1、CAN2)。
-
原因分析3:通道配置错误,报文所在的CAN通道未在工程中启用,或硬件配置与实际通道不匹配。
-
问题解决3:
检查通道配置- 进入 Hardware > Network Hardware,确认目标CAN通道(如CAN1)已启用。
验证报文所属通道
- 在DBC文件中,报文可能被分配到特定通道。
- 在CANoe的 Channel Mapping 中,确保DBC的通道与实际硬件通道一致(如CAN1对应VN1630的Channel 1)。
-
原因分析4:CAPL脚本或测试模块引用错误,在CAPL脚本、Test Module或Panel中引用了未定义的报文名称或ID。
-
问题解决4:
检查CAPL代码// 错误示例:消息名称拼写错误 message Message SC1; // DBC中实际为 "Message SC" output(msg);
使用
this
关键字(避免硬编码)// 正确示例:通过消息名称绑定 message Message SC; // 直接使用DBC中的报文名称
-
原因分析5:数据库版本冲突,工程中加载了多个DBC文件,且同名消息在不同DBC中定义不一致。
-
问题解决5:
检查数据库冲突- 在 Configuration > Networks > CAN Networks 中,查看所有关联的DBC文件。
统一数据库版本
- 删除重复或冲突的DBC文件,确保工程中仅保留唯一的消息定义。
3 总结
在日常学习和工作过程中,或多或少会反复遇到很多同类型的问题,这些问题无形之中浪费咱们很多时间去解决。笔者平常习惯将类似问题做一些分类整理和总结,方便后续再次遇到能快速、高效地解决。以上三个问题的解决方法希望对各位看官有所帮助,如果存在编写问题,欢迎大家联系我,一起探讨!