CANoe应用案例之DoIP通信

2023-05-16

随着ECU功能和存储容量的不断提高,主机厂对于ECU诊断和刷写有了更高的要求。由于带宽的限制,传统的汽车总线(如CAN总线)存在刷写时间过长的缺点,大大降低了生产和维修效率。DoIP(Diagnostics over Internet Protocol,ISO 13400)基于以太网传输,具有高带宽、低成本的特点。此外DoIP还可以基于WLAN或者移动通信建立灵活强大的诊断连接系统,使远程诊断、并行刷写等应用场景成为可能。
DoIP基于TCP/IP协议传输诊断报文,如图1所示,诊断服务数据采用UDS进行描述,所以DoIP并非是一个诊断协议,准确地说是一个扩充的传输层协议。
在这里插入图片描述

图1 DoIP诊断报文结构

ISO 13400定义DoIP通信的标准流程,对高效实现ECU诊断和刷写很重要。图2给出了通过外部测试设备Tester连接DoIP网关对子网上的Non-DoIP ECU进行诊断的过程。

  • 车辆发现(Vehicle Discovery):诊断网络可以是Tester和车内单独某个DoIP实体的点对点连接,也可以是在一个复杂的分布式网络中,包含多台测试设备、多个车辆、多个DoIP实体的情况。通过车辆发现过程可以找到特定车辆及DoIP实体。

  • 建立TCP通信连接(Open TCP socket):Tester和特定DoIP实体建立TCP连接。

  • 路由激活(Routing Activation):Tester发送路由激活请求,DoIP实体确认Tester的逻辑地址、激活类型等信息是否合法,只有上述信息合法有效,Tester才可以发送诊断请求报文。

  • 诊断报文通信(Diagnostic message [Request]):Tester发送DoIP诊断请求报文,诊断请求报文中包含目标的逻辑地址,可用来区分不同的诊断实体。示例中DoIP网关通过诊断请求中的逻辑地址判断出该请求的对象是Non-DoIP ECU,故将该请求信息转发给Non- DoIP ECU。

  • 诊断报文通信(Diagnostic message positive ack.):DoIP网关在诊断请求报文被处理并复制到目标网络传输缓冲区之后立刻发送诊断确认信息。

  • 诊断报文通信(Diagnostic message [Response]):Non-DoIP接收到诊断请求之后会回复诊断响应,该响应经由DoIP网关转发给Tester。
    在这里插入图片描述

图2 DoIP通信过程

CANoe从7.1版本开始支持DoIP:

  • CANoe充当Tester诊断DoIP实体;
  • 使用DoIP库文件仿真DoIP实体,如DoIP节点或者DoIP网关。

本文主要介绍如何将CANoe作为Tester与DoIP实体建立通信,并对物理连接、网络设置、诊断参数设置进行简单说明。

1 物理连接
DoIP物理层协议采用IEEE 802.3 100BASE-TX,因此可以直接使用计算机的网卡进行通信。但是建议使用VN56xx系列硬件接口卡,或VT系统板卡VT6306,原因如下:

  • 虽然ISO 13400协议只提及使用传统的以太网物理层,但现在越来越多的车内以太网节点集成了DoIP功能,而其物理层形式一般只支持100/1000BASE-T1,导致无法使用传统以太网接口设备与之建立通信。

  • 避免出现因为计算机的防火墙配置(无法进行TCP连接,端口或IP地址被阻止)造成无法通信的问题。

  • 避免出现因为计算机的防火墙配置(无法进行TCP连接,端口或IP地址被阻止)造成无法通信的问题。

  • 报文时间戳精度更高(8ns)。

  • VN5610A/VN5640提供两路高速CAN/CAN FD,可以同时进行CAN和Ethernet通信,方便实现诸如CAN/Ethernet网关功能。

  • 确保与其它硬件设备接口的同步(软件同步精度50µs,硬件同步精度1µs),这一点对于网关测试非常重要。

  • VN5610A/VN5640提供数字/模拟IO通道,可用于使能DoIP激活线或者禁用ECU的DoIP功能。

2 网络设置
正确的网络配置是实现DoIP通信的前提,在图3所示界面可设置用于通信的TCP/IP Stack,如MAC地址、VLAN Tag、网络层协议类型IPv4/IPv6、IP地址、子网掩码等信息。
在这里插入图片描述

图3 TCP/IP Stack配置界面
在配置前需要先确认以下问题:

DoIP实体通信网络是否使用VLAN Tag?
DoIP实体通信网络是静态IP地址还是通过DHCP服务器获取的动态IP地址?
在这里插入图片描述

针对不同情况组合的配置示例请参考表1

3 诊断参数设置
和基于CAN总线的诊断类似,DoIP的诊断相关配置也在”Diagnostics/ISO TP Configuration”窗口完成。在Ethernet网络上添加诊断描述文件(例如*.cdd)后,即可进行诊断参数相关设置。

”DoIP/HSFZ Settings”处可设置DoIP通信的基本参数,如图4所示。其中(A)处可以设置CANoe Tester的逻辑地址、激活类型,ECU的物理逻辑地址和功能逻辑地址。(B)处可以指定CANoe Tester使用的网络接口和IP地址。(C)处可以配置目标IP地址,如果留空,则Tester会正常发送车辆识别请求(Vehicle Identification Request),如果正确指定DoIP实体IP,则Tester将跳过Vehicle Discovery过程。

除了上述诊断参数配置,在CANoe中还可以设置DoIP其它属性,如切换DoIP版本,更多详细信息可参考CANoe帮助文档。
在这里插入图片描述

图4 诊断配置

4 DoIP通信过程报文数据示例
完成上述配置工作之后,打开诊断控制台(Diagnostic Console)窗口,发送一条诊断请求,在Trace窗口中就能看到DoIP的通信报文数据。

图5显示在静态IP地址的情况下,Tester与ECU进行DoIP通信的过程。
在这里插入图片描述

图5 DoIP通信过程(静态IP地址)
* CANoe Tester发送车辆识别请求。ECU在建立TCP连接和路由激活之前,使用车辆声明报文(Vehicle Announcement)来响应此车辆标识请求。
  • 建立TCP连接(TCP Connection),由CANoe Tester发起请求并与ECU建立TCP连接。

  • 路由激活(Routing Activation),由CANoe Tester发起请求并由ECU检查逻辑源地址激活类型等信息。

  • Tester发送诊断请求。

  • ECU发送诊断请求接收确认信息。

  • ECU回复诊断响应。

图6显示在动态IP地址的情况下,Tester与ECU进行DoIP通信的过程。
在这里插入图片描述

图6 DoIP通信过程(动态分配IP地址)
  • DHCP服务器给CANoe Tester和ECU分配 IP地址。

  • CANoe Tester发送车辆识别请求。ECU在建立TCP连接和路由激活之前,使用车辆声明报文(Vehicle Announcement)来响应此车辆标识请求。

  • 建立TCP连接(TCP Connection),由CANoe Tester发起请求并与ECU建立TCP连接。

  • 路由激活(Routing Activation),由CANoe Tester发起请求并由ECU检查逻辑源地址激活类型等信息。

  • Tester发送诊断请求。

  • ECU发送诊断请求接收确认信息。

  • ECU回复诊断响应

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CANoe应用案例之DoIP通信 的相关文章

  • 必备模块知识——继电器

    一 继电器的概念 1 1 什么是继电器 继电器是一种电控制器件 xff0c 是当输入量的变化达到规定要求时 xff0c 在电气输出电路中使被控量发生预定的阶跃变化的一种电器 继电器具有控制系统和被控制系统 xff0c 通常应用于自动化的控制
  • 必备模块知识——超声波传感器

    一 超声波传感器 1 什么是超声波 人们能听到声音是由于物体振动产生的 xff0c 它的频率在20HZ 20KHZ范围内 xff0c 超过20KHZ称为超声波 xff0c 低于20HZ的称为次声波 常用的超声波频率为几十KHZ 几十MHZ
  • typedef的用法——c语言

    一 ypedef 1 1 xff1a typedef的用法 xff08 如上图所示 xff09 typedef 用法一句话总结 把定义的类型改名 举个例子 xff1a 我们熟悉的int类型 定义一个变量 xff0c 如int a xff1b
  • shell的测试语句

    一 shell的条件测试语句 在写shell脚本时 xff0c 经常遇到的问题就是判断字符串是否相等 xff0c 可能还要检查文件状态或进 行数字测试 xff0c 只有这些测试完成才能做下一步动作 1 1 shell脚本中的条件测试如下 x
  • 在miivii域控制器(基于Xavier)上复现Ultra-Fast-Lane-Detection源论文项目

    源项目链接 一 安装 参考源项目安装教程 xff0c 个别步骤有改动 xff1a 1 我没有安装Anaconda xff0c 所以跳过步骤2 2 步骤3中安装pythorch torchvision的血泪史 xff1a 网上看了很多下载py
  • shell的控制语句(3)

    shell脚本与我们所用的c语言控制语句 xff0c 是存在一些差异的 xff0c 因此 xff0c 我们需要重新认识并且学会它们 因此 xff0c 接下来 xff0c 我会介绍常用的流程控制语句 如 xff1a if for while
  • shell的函数

    一 shell函数 有些脚本段间互相重复 xff0c 如果能只写一次代码块而在任何地方都能引用那就提高了代码的可重用性 shell 允许将一组命令集或语句形成一个可用块 xff0c 这些块称为 shell 函数 二 shell函数的格式 2
  • Visual Studio 2015(C#)编写实现TCP调试助手(服务端+客户端一体)-新手

    近期在做项目的时候运用到了WIFI模块 xff0c 想着自己捣鼓捣鼓弄个上位机调试调试 初次接触 xff0c 长达3天的修修改改终于完成 xff0c 实现代码比较杂乱 xff0c 但是可以正常使用 不足之处 xff0c 还望指正 xff01
  • IDEA This is not a valid Java qualified name问题解决

    今天在创建类的时候突然出现这样的一个错误 This is not a valid Java qualified name 出现这个错误的主要原因是因为类名出现了空格 我是在类名前有一个空格
  • 双系统ubuntu18.04如何更新到22.04

    将双系统中的Ubuntu 18 04更新到22 04 xff0c 按照以下步骤操作 xff1a 1 打开终端并更新系统 xff0c 使用以下命令 xff1a span class token function sudo span span
  • 如何查看自己的ubuntu系统的镜像源,并且换源

    1 查看自己的Ubuntu系统当前使用的镜像源 xff1a 1 打开终端 xff1a 按下Ctrl 43 Alt 43 T xff0c 或者在菜单中搜索 终端 2 输入以下命令并按Enter键 xff1a span class token
  • QT项目2048游戏(C++)(附流程图、源码)

    在学校学完C语言后用easyX图形库写了一个2048游戏 xff0c 在大概学完C 43 43 后用QT改进了一下的2048游戏 游戏框图 流程图 开始界面 游戏中的界面 游戏结束界面 改进之处 1 添加了背景音乐 2 添加了结束游戏后重新
  • 用 Saleae Logic 16 示波器测量并分析 I2C、SPI、串口的信号

    文章目录 一 安装Saleae Logic 16软件二 Saleae Logic 16简单介绍1 Saleae Logic 16 逻辑分析仪2 Saleae Logic 16软件 三 三个实例1 I2C信号2 SPI信号3 串口信号 四 总
  • TCP通信—客户端与客户端的双向通信

    功能 xff1a 1 实现客户端与客户端之间的TCP双向通信 xff1b 2 服务器记录客户端实名连接 xff0c 并显示客户端数据记录 xff1b 3 客户端退出 xff0c 服务器和另一客户端显示相应提示 xff1b 服务器代码思路 x
  • xshell登录wsl

    配置ssh server 卸载 span class token function sudo span span class token function apt get span remove openssh server 安装 span
  • 获取form表单中的数据对象集合

    form表单中直接获取所有数据的对象集合 form表单中的数据获取方法 我们在开发中如果出现form表单 xff0c 那么肯定我们是要获取用户在表单中填写的数据 xff0c 当然如果一个个去那大每一个输入框中的数据 xff0c 也是可取的
  • JavaScript中的window.location的使用

    window location对象可以用于获取当前页面地址 xff08 url xff09 并把浏览器重定向到新页面 location对象的属性与对应的属性值 xff1a window location href 返回当前页面的href u
  • js原生实现本地图片转base64上传服务器(js,jq,html)

    这里写自定义目录标题 上传过程 xff1a htmljs 上传过程 xff1a 1 xff0c 使用input xff1a type 61 file读取本地图片 xff1b 2 xff0c 使用new FileReader 将 图片转化为b
  • AJAX异步请求原理与过程;

    AJAX异步请求原理和过程 1 AJAX创建异步对象XMLHttpRequest xff1a AJAX 的要点是 XMLHttpRequest 对象 不同的浏览器创建 XMLHttpRequest 对象的方法是有差异的 IE浏览器使用 Ac
  • vue生命周期图解(带注释)

    vue生命周期图解 xff08 带注释 xff09

随机推荐

  • c++ class和struct的区别是什么?

    c 43 43 class和struct的区别是什么 在c 43 43 中使用struct和class xff0c 定义类的唯一区别就是默认的访问权限 c 43 43 primer第五版 没错 c 43 43 中class和struct几乎
  • 让程序编译更优雅的几个CMake命令

    简介 本文通过一个工程示例介绍了几个让程序编译更优雅的CMake命令 文末有完整下载地址 该工程示例首先生成一个动态库 xff08 libversion dll xff1a 该库主要用于打印版本相关的信息 xff09 xff0c 然后在一个
  • Fast-Planner安装

    Fast Planner安装 Fast Planner是港科大沈老师课题组的项目 xff0c 该项目是为了实现四旋翼无人机能在复杂未知环境下快速飞行 首先到Fast Planner的github网址下 xff0c 查看README xff0
  • Windows程序设计学习笔记——Winsock和udp

    Winsock是处理网络的Windows api 使用前先包含头文件Winsock2 h以及导入静态库Ws2 32 lib include lt Winsock2 h gt pragma comment lib 34 Ws2 32 lib
  • 网络编程04-UDP的广播、组播

    目录 一 UDP广播通信 1 什么是广播 2 特点 3 广播地址 4 实现广播的过程 xff08 一定是使用UDP协议 xff09 广播发送端 广播接收方 练习1 xff1a 把广播通信进行实现 发送端 接收端 二 UDP组播 xff08
  • JSON文件的生成与解析

    参考Json文件的生成和解析
  • C++ 设置double精度

    设置double精度 在这里插入代码片 span class token macro property span class token directive keyword include span span class token str
  • GitLab 出现错误Could not resolve host: xxx-xxx

    错误原因 xff1a 域名解析错误 解决办法找 打开hosts 在最后一行添加 192 30 xxx xxx gitlab
  • TeeChart控件_动态创建

    在安装目录下找到TeeChartxxxxx ocx 以管理员的身份打开cmd 注册TeeChartxxxxx ocx regsvr32 TeeChartxxxxx ocx VS2015 使用TeeChart绘图控件 CRect rect s
  • Nginx

    Nginx 介绍 Nginx是一款轻量级的Web 服务器 反向代理服务器 电子邮件 xff08 IMAP POP3 xff09 代理服务器 xff0c 并在一个BSD like 协议下发行 由俄罗斯的程序设计师Igor Sysoev所开发
  • 上电自动开机

    上电开机启动是指电脑主机在UPS恢复供电时可以自动开机 该功能必须要求电脑主板型号支持 xff0c 进入电脑的BIOS进行设置使用 不同型号的电脑的BIOS设置会有区别 xff0c 以下仅做参考 xff1a 第一步 xff1a 开机进入BI
  • Linux网络编程【TCP】

    文章目录 TCP特点TCP中CS架构TCP状态转换相关操作函数recv函数send函数 TCP特点 TCP是一种面向广域网的通信协议 xff0c 目的是在跨越多个网络通信时 xff0c 为两个通信端点之间提供一条具有下列特点的通信方式 xf
  • 博客资源整理

    文章目录 STLLinux基础命令linux系统编程Linux网络编程Docker容器技术数据库第三方库的使用Linux编程WebQt STL 基础概念 容器 duque stack map set vector 算法 查找算法 排序算法
  • Qt编译Mysql驱动

    1找到源码 2点击编译会看到报错 1解决方案 下载相关文件 也可以私信发给你 2打开配置文件添加下面的信息 相关文件下载 3点击编译 弹出的框直接关掉就行 4在安装qt的根目录下会生成如下目录 5 找到下面的库 6 将上面的库拷贝到如下目录
  • C++中的异常语法

    文章目录 概述异常的关键子自定义异常使用栈解旋异常的接口声明异常变量的生命周期C 43 43 标准异常库 概述 C语言的异常缺陷在于返回值只有一个 xff0c 可能出现二义性 xff0c 没有统一的标准 C 43 43 中的异常必须有处理
  • 处理鼠标连续点击的问题

    处理鼠标连续点击的问题 span class token comment 上次点击时间点 span DWORD m tmClick span class token punctuation span span class token com
  • FLOPS和FLOPs、GFLOPs区别与计算

    参考FLOPS和FLOPs GFLOPs区别与计算
  • VS远程调试

    文章目录 VS远程调试本地和虚拟机调试准备工作 xff1a 需要注意的几个地方 xff1a VS远程调试 在编程中由于环境 版本等各种原因 xff0c 我们需要模拟出来各种环境来跑不同的版本测试 本地和虚拟机调试 准备工作 xff1a 以V
  • AUTOSAR基础篇之CanNM

    前言 首先 xff0c 问大家几个问题 xff0c 你清楚 xff1a 为什么要引入网络管理呢 xff1f 上电同时启动 xff0c 下电同时关闭 xff0c 它不香吗 xff1f 你知道车上的ECU节点可以分为哪几种类型吗 xff1f 汽
  • CANoe应用案例之DoIP通信

    随着ECU功能和存储容量的不断提高 xff0c 主机厂对于ECU诊断和刷写有了更高的要求 由于带宽的限制 xff0c 传统的汽车总线 xff08 如CAN总线 xff09 存在刷写时间过长的缺点 xff0c 大大降低了生产和维修效率 DoI