2. 车载以太网协议栈与CANoe建模

车载以太网测试的第一道门槛,不是"能不能发通",而是"协议栈分层是否与真实 ECU 一致"。CANoe 对以太网的建模本质上是把 OSI 模型在工程上压缩为四层可配置对象:物理层(PHY 与线束)、数据链路层(VLAN、MAC、交换机)、网络/传输层(IP、UDP、TCP、DoIP)、应用层(SOME/IP、诊断、TSN 时间同步)。只有这四层在 CANoe 工程里被正确实例化,后续的通信矩阵导入、拓扑搭建和诊断仿真才有意义。

一、物理层:100BASE-T1 与 1000BASE-T1 的建模差异

100BASE-T1(IEEE 802.3bw)与 1000BASE-T1(IEEE 802.3bp)都使用单对非屏蔽双绞线,但速率、编码和链路建立过程不同。100BASE-T1 采用 PAM3、66.67 MBd,全双工通过回声消除实现;1000BASE-T1 采用 PAM3、750 MBd,需要更严格的回波损耗与模式转换指标。在 CANoe 中,物理层并不由软件"仿真",而是通过 VN5640、VN5620 等以太网接口卡与真实 PHY 对接,或在纯仿真场景下用 Channel 抽象表示。

建模时需要在 CANoe 的 Hardware 配置中为每个以太网通道指定接口类型、主从模式(Master/Slave)和链路速率。例如将 VN5640 的 Port 1 设为 100BASE-T1 Master,用于连接被测 ECU 的 Slave PHY;Port 2 设为 1000BASE-T1,用于骨干网交换机。若速率或主从配置错误,链路无法 Link Up,此时在 CANoe 的 Trace 窗口看不到任何报文,应先检查物理层而非应用层。

二、数据链路层:VLAN 与交换机拓扑

车载以太网普遍使用 VLAN 隔离不同域(如动力、座舱、诊断)。CANoe 的以太网配置中,每个 Network 可绑定一个或多个 VLAN ID,报文在 Trace 中会显示 VLAN 标签。交换机建模有两种方式:一是用真实交换机(如中央网关),CANoe 仅作为节点接入;二是用 CANoe 的 Switch 模块或 CAPL 实现虚拟交换,把多个端口映射到同一 VLAN 广播域。

拓扑搭建时,建议先在 CANoe 的 Network Topology 视图中画出节点与交换机的连接关系,再为每条链路指定速率与 VLAN。这样通信矩阵导入后,CANoe 能自动校验报文的目的 MAC、VLAN 与端口是否匹配。

三、网络/传输层:DoIP 与 IP 配置

DoIP(Diagnostic over IP,ISO 13400)是车载诊断的 IP 承载协议,使用 UDP 13400 做车辆发现与路由激活,TCP 13400 做诊断数据传输。在 CANoe 中,DoIP 由 DoIP.dll 或 CANoe.DiVa 提供的节点实现。关键参数包括:逻辑地址(如 0x0E00 表示诊断仪,0x1000 表示网关)、VIN、EID/GID。建模时需在节点属性中填写这些值,否则路由激活会返回 NACK。

IP 层配置包括 IP 地址、子网掩码、网关。车载以太网常用静态 IP,例如诊断仪 192.168.0.10/24,网关 192.168.0.1。若使用 DHCP,则需在 CANoe 中启用 DHCP Client 并等待租约。IP 配置错误时,DoIP 的车辆识别请求(0x0001)无法收到响应。

四、应用层:SOME/IP 与 TSN

SOME/IP(Scalable service-Oriented MiddlewarE over IP)是面向服务的通信协议,包含服务发现(SD)、方法调用、事件通知和字段访问。在 CANoe 中,SOME/IP 通过 SOMEIP.dll 和 ARXML 描述文件建模。导入 ARXML 后,CANoe 会自动生成服务接口、方法、事件和字段的 CAPL 对象。例如一个车窗控制服务,服务 ID 0x1234,方法 ID 0x0001 用于上升,事件 ID 0x8001 用于位置上报。

TSN(Time-Sensitive Networking)在 CANoe 中主要涉及 802.1AS 时间同步和 802.1Qbv 时间感知整形。建模时需在交换机节点上配置 gPTP 时钟角色(Grandmaster 或 Slave),并设置门控列表。CANoe 的 TSN 配置界面允许为每个队列指定时间窗口,例如队列 0 在 0–100 μs 开放,队列 1 在 100–200 μs 开放。若时间同步未建立,TSN 调度无法生效,此时应检查 gPTP 报文的 Sync/Follow_Up 是否正常收发。

CANoe 车载以太网分层建模与拓扑 物理层 PHY 100BASE-T1 Master 1000BASE-T1 Slave VN5640 Port1/2 Link Up 检测 数据链路层 VLAN / MAC VLAN 100 动力域 VLAN 200 座舱域 VLAN 300 诊断域 交换机端口映射 网络/传输层 IP / DoIP IP 192.168.0.10/24 UDP 13400 发现 TCP 13400 诊断 逻辑地址 0x0E00 应用层 SOME/IP / TSN 服务 ID 0x1234 方法 0x0001 上升 事件 0x8001 位置 gPTP / Qbv 门控 建模顺序:物理层 Link Up → VLAN 划分 → IP/DoIP 地址 → ARXML 导入 → SOME/IP 服务绑定 → TSN 调度 校验点:Trace 可见 VLAN 标签、DoIP 路由激活成功、SOME/IP SD OfferService 周期发送、gPTP Sync 稳定

五、通信矩阵导入与拓扑搭建实操

通信矩阵通常以 ARXML 或 DBC 形式提供。在 CANoe 中,通过 File → Import → ARXML 导入后,需在 Network → Ethernet → Communication Matrix 中确认报文、PDU、信号和服务是否被正确解析。常见问题是 ARXML 中的 VLAN 与 CANoe 工程配置不一致,导致报文被丢弃。此时应在 Hardware → Ethernet → VLAN 中补齐对应 VLAN ID。

拓扑搭建完成后,建议用 Trace 窗口观察三类报文:gPTP Sync(时间同步)、SOME/IP SD OfferService(服务发现)、DoIP Vehicle Identification Request(车辆识别)。若三者均正常,说明协议栈分层建模基本正确。若某一层缺失,可按"物理层 Link → VLAN → IP → 传输层端口 → 应用层服务"的顺序逐层排查。

在纯仿真场景下,CANoe 的 Ethernet Channel 可以模拟多个节点,但物理层 Link Up 需要手动置位。可在 CAPL 中调用 ethernetSetLinkStatus() 强制链路为 Up,否则仿真节点之间无法通信。
100BASE-T1 与 1000BASE-T1 不能直接互连,必须经过支持速率转换的交换机或网关。若在 CANoe 中把两种速率的端口直连,链路无法建立,Trace 中不会出现任何报文。

完成上述分层建模后,CANoe 工程就具备了与真实车载以太网通信的基础能力。后续的 DoIP 诊断、SOME/IP 服务测试和 TSN 调度验证,都建立在这一层协议栈配置之上。