ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

DoIP诊断测试实战:从接线到CANoe配置的完整指南

DoIP诊断测试实战:从接线到CANoe配置的完整指南 最近在台架上做DoIP诊断测试从样件接线到CANoe里把所有配置跑通前后折腾了两个多星期。中间踩过的坑不少最典型的就是给DUT接好了线、CANoe里也能看到以太网LINK但车辆识别请求发出去就是没有响应——最后查出来是VLAN没配对。DoIPDiagnostic over Internet ProtocolISO 13400听起来高大上本质就是把原本跑在CAN总线上的UDS诊断报文换到车载以太网上跑。好处很直观刷写速度快了几十倍诊断载荷也不用再看CAN帧的脸色。但代价就是测试环境复杂了一截接线、端口、IP、MAC、VLAN这些网络层的弯弯绕绕全冒出来了。这篇文章我就把整个DoIP测试的完整过程记录下来从样件接线开始到CANoe环境配置、端口设置、VLAN配置、IP和MAC地址设定最后到发出第一个UDS诊断请求并验证响应。如果你正在做ECU的DoIP功能验证或者正准备从CAN诊断转到车载以太网诊断这份笔记应该能帮你少走不少弯路。1. DoIP测试的底层逻辑先搞清楚它在做什么1.1 DoIP把UDS诊断从CAN搬到了以太网到底改变了什么传统车载诊断走CAN总线UDS诊断报文被封装在CAN帧里每个CAN帧最多8字节数据稍微大一点的诊断数据就得拆包、连续帧、流控来回折腾。DoIP的思路很简单UDS诊断请求和响应不再放进CAN帧而是放进TCP/IP报文通过车载以太网传输。这里有个容易混淆的点DoIP本身不是一个新的诊断服务它传输的依然是标准UDS诊断比如0x22读数据、0x2E写数据、0x19读DTC、0x27安全访问这些服务。DoIP只是换了一条“运输管道”。ISO 13400标准定义了DoIP的报文格式、端口和交互流程ISO 14229的UDS服务定义依然完全适用。DoIP协议栈有自己的一套“连接流程”这是和CAN诊断最大的区别。CAN诊断一上电就能发请求DoIP不一样测试仪和ECU之间必须先完成三个阶段车辆发现Vehicle Discovery测试仪通过UDP广播发送车辆识别请求0x0004ECU收到后返回车辆识别响应里面带有VIN、逻辑地址、EID、GID等信息路由激活Routing Activation测试仪通过TCP连接发送路由激活请求0x0005ECU确认后建立诊断逻辑连接诊断通信Diagnostic Messages测试仪通过TCP发送0x8001类型的DoIP报文里面装载UDS诊断报文ECU处理后返回诊断响应DoIP标准默认使用UDP和TCP的13400端口也就是网络协议中的“DoIP端口”。整个流程里UDP负责“找人”TCP负责“说话”分工很明确。实际测试中经常有人一上来就发诊断请求结果超时就是因为前面两步没做完。1.2 为什么测试环境首选CANoe做DoIP测试可选的工具其实不少有些人用Python的scapy库自己构造DoIP报文有些人用Wireshark抓包后手动验证还有些OEM有自己的一套诊断工具。但从工程效率来看CANoe依然是当前最主流的方案。CANoe对DoIP的支持是成体系的它有完整的以太网协议栈支持DoIP诊断层能模拟测试仪也能模拟ECU配合Vector的VN5610、VN5640这类硬件接口卡可以直接和DUT建立物理层连接诊断控制台可以像CAN诊断那样一行代码不写就能发UDS请求Trace窗口还能按DoIP协议解析出每个字段的实际含义。我见过不少工程师拿Wireshark抓DoIP的包看得懂底层报文但要循环发送一堆UDS诊断请求做自动化测试效率太低了。CANoe的CAPL脚本和诊断控制台在自动化测试和回归测试上优势非常明显。而且CANoe里的诊断数据库比如工程里导入的CDD、PDX文件可以直接把UDS服务和DID映射成可读的名称不用每次查诊断规范。尤其是做DTC验证、快照数据采集、例程控制这类需要连续交互的测试CANoe的稳定性和可操作性比纯脚本方案高很多。当然Python方案也不是不能用等后面有时间我可以再写一篇用Python脚本做DoIP冒烟测试的对比文章。1.3 测试台架整体架构搞清链路才好排障在实际动手之前我建议先画一条链路图把整个测试台架的物理接线和数据流向理清楚。做DoIP测试最常见的拓扑是DUT样件通过以太网线连接到VN5610的以太网接口VN5610再通过USB或者PCIe连接到上位机上位机运行CANoe软件。CANoe在VN5610上创建以太网虚拟通道通过这个通道发DoIP报文给DUT同时也能收DUT返回的报文。如果你的DUT是通过车载以太网交换机接入比如测试车身域控制器、中央网关那拓扑会变成DUT连接交换机交换机的某个上联口连接VN5610。这时候VLAN配置的复杂度直接上升因为交换机可能有多个VLANDoIP诊断通道可能被划分在某个特定的VLAN里你需要在VN5610侧正确配置VLAN tag才能让报文进到目标VLAN。还有一类场景是DUT本身有多个以太网端口每个端口对应不同的功能域比如一个端口做DoIP诊断另一个端口做SOME/IP服务通信。这种情况下CANoe里需要建立多个以太网通道分别对应不同的端口然后在Diagnostics配置里把DoIP通道绑定到正确的物理端口上。我见过有人在这上面栽过跟头CANoe里建了Diagnostics通道资源类型选的是Ethernet但目标端口选错结果诊断请求从错误的物理端口发出去了DUT收不到还以为是协议栈没起来。所以建工程之前把拓扑图画清楚比急着点鼠标重要得多。2. 样件接线与硬件准备别让物理层拖后腿2.1 测试链路拓扑样件、硬件、电脑怎么连先说硬件选型。Vector的VN5610是入门级以太网接口卡一个以太网通道支持100BASE-TX和100BASE-T1物理层切换VN5640更高级多通道并且带SOME/IP仿真加速价格也上了一个台阶。做常规DoIP诊断测试VN5610足够用如果被测对象比较复杂比如带交换机、同时要监控多路以太网那就得上VN5640。接线方式看起来简单VN5610的以太网口连DUT的DoIP端口VN5610通过USB 3.0连电脑。但里面有个重要区别100BASE-TX和100BASE-T1的线缆并不一样100BASE-TX就是普通百兆以太网使用标准的四芯双绞线线序按T568A/T568B和家用的网线没有区别100BASE-T1也叫BroadR-Reach是车载以太网用的单对双绞线物理层只有一对差分线最大传输距离15米常见于车内ECU互联很多车载ECU的DoIP端口是100BASE-T1物理层如果你拿一根普通网线去连DUT连接指示都不亮。VN5610上一般有拨码开关或者CANoe软件里可以选择物理层类型接线前先确认DUT的PHY芯片是哪种再设置硬件的物理层模式千万别想当然。还有一种情况是DUT的DoIP端口本身就是标准以太网口比如有些域控制器直接引出RJ45座子那就直接用普通网线连VN5610。接线前最好用万用表或者看DUT硬件原理图确认一下接口定义避免把TX、RX搞反。2.2 线缆和供电的坑100BASE-T1与百兆以太网的区别第一次做DoIP测试的人很容易忽略供电和共地问题这块值得单独拿出来说。首先DUT样件通常是开发板或者工程样件供电比较讲究。有的ECU需要12V车载电源有的域控制器是12V转多路低压供电不稳会直接导致以太网PHY工作异常。最常见的问题是电源适配器的纹波太大或者瞬态跌落导致DUT偶尔重启、DoIP服务时断时续。如果你发现DUT的DoIP连接总是莫名掉线先看一眼供电波形。其次共地问题。VN5610通过USB连电脑它的以太网接口信号参考地其实来自电脑的USB地而DUT的以太网接口参考地来自DUT的电源地。如果DUT供电和VN5610之间没有共地PHY芯片的共模电平可能漂移表现就是物理层时通时不通。做DoIP测试的台架DUT的电源地和VN5610的USB地一定要连接在一起简单粗暴的做法是把DUT电源的负极和VN5610外壳地接在一起。还有一个常见的坑是屏蔽网线的接地。如果你使用屏蔽以太网线屏蔽层最好单端接地两头都接地容易形成地环流反而引入噪声。测试台架上如果有其他强电设备网线尽量避开动力线减少电磁干扰。2.3 动手前先确认DUT侧DoIP状态接线完成后先别急着开CANoe先在DUT侧确认DoIP服务真的在跑。不同DUT的启动方式不一样有的ECU上电后DoIP服务自动启动有的需要通过串口命令手动拉起还有的需要先满足特定的整车条件比如点火开关状态、网络管理报文等。做测试前一定要拿到被测件供应商提供的启动说明比如串口命令行提示、日志输出位置。DUT的IP地址获取方式也直接影响你在CANoe里的配置。常见的DoIP节点有几种IP分配方式静态IPDUT固定使用某个IP比如192.168.1.100CANoe侧只要设置成同网段地址就行AutoIPLink-LocalDUT上电后在169.254.0.0/16网段里自己选一个地址测试仪也需要配置成169.254.x.x网段才能通信DHCPDUT通过DHCP获取IP这种场景下测试环境里需要有一个DHCP服务器CANoe侧可以配置成自动获取IP判断DUT的实际IP最直接的方法是在DUT的串口日志里看网络启动信息或者用Wireshark配合交换机镜像口抓包。不过在做DoIP测试之前最好的办法是直接问DUT供应商要一份网络配置说明别靠猜。3. CANoe软件配置从建工程到DoIP协议栈启动3.1 激活以太网通道选对硬件和License硬件接好之后打开CANoe的第一步是配置硬件通道。具体路径是Hardware - Network Hardware在Vector Ethernet设备列表里找到你连的VN5610右键添加网络。这里有几个点需要注意第一VN5610至少需要一个Ethernet通道的license。CANoe的license分为不同等级如果软件提示Ethernet通道不可用多半是license没包含以太网功能。确认方法是启动CANoe后在Hardware窗口中看VN5610的通道是否显示为绿色可配置状态。第二物理层模式必须正确。VN5610支持100BASE-T1和100BASE-TX两种物理层在Hardware配置里选中VN5610的端口后要选择正确的PHY类型。选错了物理层link都建立不起来。有些VN5610硬件上还有物理拨码软件配了还得硬件一致注意看清楚。第三以太网通道添加之后还需要在通道配置里选择“使用CANoe自己的协议栈”还是“绑定到操作系统网卡”。做DoIP测试推荐选择CANoe协议栈也就是让VN5610的以太网端口工作为CANoe专属设备这样IP地址、MAC地址都由CANoe配置不受电脑操作系统的网络配置影响。如果选择绑定到操作系统IP和MAC要在Windows的网络设置里配后续防火墙和网卡节能设置会带来一堆变量不推荐。3.2 绑定诊断数据库让报文可读而不是一坨十六进制编译测试工程之前建议先把诊断数据库导入。DoIP测试核心的数据库是CDDCANdela Diagnostic Description或者PDX文件。PDX是Vector的诊断描述包内部通常包含ODX/OTX等诊断数据。如果你没有CDD/PDX文件也可以用DBC。DBC主要是网络报文的符号定义诊断数据库的语义信息不如CDD丰富但至少能用CANoe的Diagnostic Console发UDS服务了。导入路径是Diagnostics - Diagnostic Description - Add选中你拿到的CDD或者PDX文件。导入之后CANoe就能识别出UDS服务、DID、DTC、诊断会话、安全访问这些内容。比如你要读VIN如果数据库里定义了DID 0xF190是VIN你直接在Diagnostic Console里选择读VINCANoe会帮你组好0x22 0xF1 0x90的请求报文。这里有个实操心得尽量让供应商提供和你DUT软件版本匹配的CDD文件。文件版本不一致诊断服务和DID的定义可能对不上发请求后响应里全是否定响应码。比如0x31例程控制里的子功能编号、DID的有效范围哪怕错一个字节ECU都有可能拒绝执行。3.3 IP地址和MAC地址的设定细节IP地址和MAC地址配置是DoIP测试里最能体现功底的地方很多隐蔽问题都出在这里。先说IP地址。在CANoe里IP地址的配置位置取决于你用的是CANoe协议栈还是绑定操作系统。如果是CANoe协议栈在Hardware Configuration里找到对应的Ethernet网络打开它的IPv4设置填入IP、子网掩码。这里的关键是IP必须和DUT处于同一个子网DUT是静态IP 192.168.1.100CANoe就设置成192.168.1.10掩码255.255.255.0DUT是AutoIP 169.254.x.xCANoe就设置成169.254.x.y掩码255.255.0.0有些DUT对源IP有过滤要求比如只接受指定网段或者指定IP的诊断请求这种场景需要按OEM规范精确设置CANoe侧的IP。我之前碰到一个项目ECU固件里写了只允许和192.168.0.10这个IP通信CANoe默认配了个192.168.0.20结果诊断请求全被丢弃。这种“隐藏的IP过滤”非常让人头疼必须在DUT日志里才能看出来。再说MAC地址。第一次做DoIP测试的人容易忽视MAC地址的作用。DoIP协议里有EID实体ID和GID组ID的概念测试仪的MAC地址在某些OEM的诊断策略里会被当成诊断仪的标识。CANoe默认会自动生成一个MAC地址但有些场景下这个自动生成的地址可能重复或者不符合DUT的预期。更稳妥的做法是给CANoe的以太网通道手动指定一个固定的MAC地址并保证这个MAC和同网段内其他设备不冲突。同时MAC地址不要频繁变化否则ECU侧如果启用了基于MAC的客户端管理可能会因为“新设备”而拒绝已有连接。另外要注意在CANoe里配置的MAC地址只对CANoe协议栈生效如果你绑定了操作系统网卡实际使用的是网卡的物理MAC这点别搞混。3.4 端口设置与DoIP协议栈启动搞定IP和MAC之后接下来是端口和协议栈配置。DoIP标准默认端口号是13400。UDP 13400用于车辆发现阶段的多播/广播报文TCP 13400用于路由激活和诊断消息。这组端口号在CANoe里一般不用手动改OEM如果有特殊需求比如自定义TCP端口才需要在DoIP诊断配置里修改。如果你的诊断连接有TLS加密要求DoIP规范里定义的TLS端口是34995这种场景多见于远程诊断而不是台架测试当前阶段可以暂时不管。在CANoe里启动DoIP协议栈需要在Simulation Setup中添加DoIP节点。具体的操作是在Simulation Setup窗口空白处右键添加Ethernet节点并加载诊断描述文件。随后在节点配置里找到DoIP相关属性把DoIP诊断功能使能打开。这里有一个关键设置是逻辑地址Logical Address。测试仪的逻辑地址一般固定为0x0E00ECU的逻辑地址则要看DUT的实际值常见的有0x0001、0x1040、0x2001等等。在发送路由激活请求时报文里的Source Address字段就是测试仪的逻辑地址Target Address字段是要访问的ECU的逻辑地址。如果源地址和DUT配置的测试仪地址不一致路由激活会被拒绝。我能理解大家第一次看到这些概念时是什么感受——IP是“门牌号”端口是“房间号”逻辑地址是“人名”三者不能混为一谈。IP和端口保证报文能到达DUT的网络协议栈逻辑地址才是DoIP协议层识别诊断设备和ECU身份的工具。DoIP协议栈启动后可以在CANoe中先手动发一个车辆识别请求来验证配置是否就绪。具体操作是Diagnostic Console - 点击DoIP识别按钮或者通过诊断交互窗口发送Vehicle Identification Request如果配置正确Trace窗口里能看到UDP广播报文发出去随后能收到ECU的车辆识别响应响应中带有VIN、逻辑地址等信息。如果这一步就卡住后面就不用谈了赶紧回头查IP、VLAN和物理层。3.5 VLAN配置最容易漏掉的一环VLAN配置是很多人做DoIP测试时最懵的地方我自己也在这上面踩过大坑。为什么DoIP测试会遇到VLAN因为现在很多车载以太网不是平铺的而是通过交换机设备划分了多个VLAN。比如一个中央网关内部分别给动力域、座舱域、智驾域划了不同VLANDoIP诊断通道可能被分配在VLAN 5里。测试仪要访问这个DoIP实体发出的报文就必须携带VLAN 5的tag否则交换机或者DUT内部会直接把报文丢弃。在CANoe里配置VLAN主要看你是静态仿真还是通过硬件发送报文。如果是在CANoe的Ethernet网络配置里可以给某个通道添加VLAN标签设置VLAN ID和优先级。优先级默认0一般就够了除非DUT侧对802.1p有特定要求。还有一种做法是通过Ethernet Packet Builder手动构造带VLAN tag的帧这在定位问题的时候特别好用。比如你怀疑DUT只在带某个VLAN ID的报文上响应就可以用Packet Builder先构一帧带VLAN tag的Vehicle Identification Request发出去看看DUT有没有反应用这种方式快速验证VLAN配置是否配对。具体操作中只要在CANoe的网络配置里给通信通道指定了VLAN ID之后发出的所有以太网帧都会自动带上这个tag。要注意的是tag加在哪里作用完全不一样有的工程师在CANoe的“网络接口属性”里加了VLAN但DoIP诊断层的报文不是从那个接口发出白搭还有的工程师只在某个仿真节点上加了VLAN结果硬件通道发出的报文还是没有tag因为仿真的范围不对。我的建议是遇到VLAN问题先打开Trace窗口看实际发出的报文在Ethernet帧头里有没有VLAN标签显示为“802.1Q”协议类型0x8100并且里面VLAN ID值是多少。用抓包结果反推配置比在软件里盲目点按钮有效得多。4. 实操全流程从零到跑通第一个UDS请求4.1 建工程与静态配置速览前面讲了概念和配置原理这一节我带你从头到尾跑一遍典型流程。假设现在的测试对象是一个支持DoIP的ECU样件静态IP是192.168.1.100逻辑地址0x0001DoIP服务挂在标准端口13400上通过100BASE-T1接入。第一步用CANoe新建一个Ethernet工程。打开CANoe后File - New选择Ethernet模板比如“Ethernet (Standalone)”模板。这个模板会创建默认的以太网仿真环境包括一个Ethernet通道和一个网络节点方便后期添加诊断配置。第二步在Hardware Configuration里配置VN5610选择物理层100BASE-T1通道类型使用CANoe协议栈IP地址配置为192.168.1.10子网掩码255.255.255.0MAC地址手动指定一个固定值比如00:1B:66:00:00:01。第三步导入诊断数据库。通过Diagnostics - Diagnostic Description加载DUT的CDD文件并在Simulation Setup里添加DoIP诊断节点加载同一个诊断文件。第四步设置DoIP参数。在诊断节点的DoIP配置里设置测试仪逻辑地址0x0E00DUT逻辑地址0x0001TCP端口13400UDP端口13400。第五步如果DUT对VLAN有要求在网络配置里添加对应的VLAN ID和优先级。这一步没有统一标准完全看被测系统的组网方式。4.2 车辆发现广播UDP请求并查看响应配置完成之后先做车辆发现验证。打开Diagnostic Console确认当前诊断通道绑定了刚才配置的DoIP节点。点击“发送车辆识别请求”有些版本叫DoIP Vehicle Discovery或类似的名字CANoe会向UDP 13400端口发送一个广播请求。正常情况下DUT收到这个广播包后会回复一个单播的UDP报文响应里面包含了VIN17字节、逻辑地址、EID、GID等字段。在CANoe的Trace窗口里你会看到类似下面的信息一条UDP报文目的IP是广播地址比如255.255.255.255或者240.240.240.240目的端口13400DoIP payload type为0x0004然后一条UDP报文源IP是DUT的IP目的IP是CANoe的IP目的端口是13400DoIP payload type为0x0004payload里能看到VIN和DUT逻辑地址如果这一步收不到响应不要急着怀疑DoIP协议栈先按下面顺序检查CANoe侧IP和DUT IP是否在同一个子网DUT的DoIP服务是否已经启动看串口日志物理层连接是否正常CANoe里有没有Link Up状态VLAN tag是否配对Windows防火墙是不是拦了UDP如果绑定操作系统网卡4.3 路由激活建立TCP诊断通道车辆发现成功之后下一步是路由激活。路由激活的目的是让ECU知道有一个诊断仪要接入并建立一个TCP连接用于后续诊断报文传输。在CANoe的Diagnostic Console里一般会自动执行路由激活或者你可以手动发送一个Routing Activation Request。这个请求的关键字段是Source Address也就是测试仪的逻辑地址0x0E00。ECU收到后如果接受会返回Routing Activation Response响应码通常为0x10表示路由激活成功。随后双方就建立了一个TCP连接端口依然是13400。路由激活被拒绝是常见问题。如果响应码是0x06路由激活类型不支持或者0x07未知源地址就要检查测试仪逻辑地址是否在DUT允许范围内。有些ECU固件里配置了只允许特定逻辑地址的诊断仪接入比如只有0x0E00可以你用0x1800肯定被拒。路由激活成功后TCP连接建立这个时候你才能在DoIP通道上发送UDS诊断请求。这也是很多人容易忽略的地方DoIP连接必须经历“发现-激活-诊断”三个阶段跳过前面任何一步诊断报文都发不出去。4.4 发送UDS请求读取VIN验证全链路路由激活成功后就可以发送真正的UDS诊断请求了。我建议第一次验证用最简单的0x22 DID读取。比如读取VINDID通常定义为0xF190那么UDS请求就是22 F1 90在CANoe的Diagnostic Console里选择目标ECU然后在服务列表里找到ReadDataByIdentifier输入DID 0xF190点击发送。如果一切正常你会收到如下格式的响应62 F1 90 [17个字节的VIN]这个响应说明了什么它说明从UDS请求构造、DoIP封装、TCP分段、IP路由、VLAN标签、物理层传输到DUT的IP协议栈接收、DoIP解包、UDS处理再原路返回全链路都是通的。我建议你在这一步骤通过Trace窗口看清楚DoIP报文的结构。展开一条发送出去的Diagnostic Message报文你会看到DoIP头部协议版本0x02、逆版本0xFD、payload type 0x8001、payload length、然后payload里面是UDS请求。对照ISO 13400标准看一遍对DoIP协议的理解会深入很多。4.5 抓包分析用Trace中的DoIP报文反查配置问题DoIP测试里Trace窗口是你最好的朋友。所有网络层的配置问题几乎都能通过抓包定位。CANoe的Trace窗口默认会显示所有Ethernet报文。为了聚焦DoIP可以在Trace窗口的过滤器里只保留DoIP相关协议或者只显示UDP/TCP端口13400的报文。一个完整的DoIP诊断流程在Trace里应该依次出现以下几类报文UDP Vehicle Identification RequestCANoe发出UDP Vehicle Identification ResponseDUT返回TCP SYN、SYN-ACK、ACKTCP连接建立TCP Routing Activation RequestCANoe发出TCP Routing Activation ResponseDUT返回TCP Diagnostic Message RequestCANoe发出TCP Diagnostic Message ResponseDUT返回如果Trace里缺少某个环节问题就定位在那一步。很多工程师上手DoIP测试时只会在Diagnostic Console里看UDS响应而忽略了Trace窗口里的对话细节。我个人的经验是把Trace窗口的DoIP过滤开起来然后从头看一遍完整交互很多“配置看起来都对但就是不通”的问题第一眼就能从报文交互顺序上看出来。5. 常见问题与排查技巧实录5.1 高频故障速查表下面这张表我从实际项目中整理出来基本覆盖了DoIP测试最常见的几类问题。你可以先收藏遇到问题直接对照来查。问题现象常见原因排查方法CANoe里物理层Link不亮物理层类型选错100BASE-TX/T1接线不良供电异常检查VN5610物理层拨码和CANoe配置用替换法确认网线和端口车辆识别请求发出后无响应IP不在同一网段DUT DoIP服务未启动VLAN不匹配UDP被防火墙拦截先ping DUT IP看DUT串口日志检查VLAN tag关闭操作系统防火墙路由激活被拒绝测试仪逻辑地址不被接受DUT已有激活连接核对逻辑地址范围检查DUT是否限制并发客户端数量重新激活前先断开旧连接诊断请求发送超时TCP连接未建立目标逻辑地址和DUT不一致诊断数据库错误检查Trace中TCP握手是否完成核对诊断数据库里的目标地址能收响应但UDS响应是否定响应服务不支持、DID错误、诊断会话不对、安全访问未解锁查看否定响应码NRC对照ISO 14229排查偶发性断连供电波动网线接触不良EMC干扰检查DUT供电更换屏蔽网线查看Trace里TCP RST出现的时间点MAC地址被DUT拒绝DUT配置了MAC过滤CANoe侧MAC不在白名单从DUT日志确认允许的MAC列表在CANoe里手动指定合法的MAC5.2 三个真实踩坑复盘第一个坑AutoIP地址忘了换。之前测试一个开发阶段ECUDUT的DoIP启动后自动获取了169.254.1.10而我CANoe里还沿用着上一个项目静态配置的192.168.0.10。物理层Link是正常的DUT日志也显示DoIP服务起来了但车辆识别请求就是没有响应。折腾了很久最后把CANoe的IP改成169.254.1.20掩码255.255.0.0马上就好了。做DoIP测试前一定要先确认DUT实际拿到的IP不要想当然沿用上一版的IP配置。第二个坑VLAN tag不匹配导致“有去无回”。那次被测DUT是一个带交换功能的中央网关网关内部把DoIP诊断通道划分到了VLAN 10。我在CANoe里没有配VLAN结果是CANoe发出的车辆识别请求能到达网关的物理端口但被网关内部查VLAN表发现不带tag直接丢弃。后来在CANoe的网络配置里给通道加上了VLAN 10的tag请求立刻就有了响应。从那以后凡是通过车载交换机接入的测试我第一件事就是问清楚VLAN划分策略。第三个坑Windows防火墙拦截UDP广播。有一次图省事把VN5610配置成了绑定操作系统网卡的模式想着这样IP好管理。结果车辆识别请求发出去就石沉大海抓包发现UDP广播确实发了但DUT就是收不到。最后查明是Windows防火墙默认拦截了来自“公用网络”的UDP广播包。后来我把VN5610改回CANoe专属协议栈模式用CANoe内部的IP栈完全绕开操作系统的网络协议栈和防火墙再没出现过这种问题。所以能用CANoe协议栈就尽量用别走操作系统网卡。5.3 一条实用的诊断命令流和CAPL扩展建议如果只是想快速验证DoIP链路是否通畅我会推荐一定先跑一遍标准的“三步验证”车辆识别、路由激活、读VIN。这三个步骤全通说明协议栈链路正常之后再跑复杂的诊断用例。做自动化回归测试时CAPL脚本可以让整个流程自动化。大致思路是在CAPL里通过诊断发送函数封装UDS请求比如调用diagRequest或者直接构造DoIP报文发送。一个最简单的DoIP冒烟测试脚本可以这样组织on start { // 发送车辆识别请求 // 等待车辆识别响应 // 建立TCP连接并发送路由激活请求 // 等待路由激活响应 // 发送UDS读取VIN请求 // 等待响应并判断结果 }当然如果你对CAPL不熟也可以先用CANoe的Diagnostic Console手动跑通全部流程再把录制的交互通过Test Module保存成可重复执行的测试用例。这种方式的入门门槛低非常适合刚接触DoIP的工程师。我个人在实际做DoIP测试时体会最深的一点是链路层的配置细节决定诊断层的成败。IP、MAC、VLAN这些参数只要有一个不对UDS请求根本到不了DUT的DoIP服务。所以接到DoIP测试任务不要急着在CANoe里发诊断请求先把网络配置一项项核对清楚。最后再分享一个实用小习惯每次开始测试前我都会用CANoe的记录功能把Trace完整保存下来这样即使当天没有明显的故障后续DUT或者工具链出了诡异问题也能翻出原始报文来复盘。这个习惯帮我省了不少时间真心建议你也试试。
返回列表