UDS诊断系列之四 诊断请求和响应

这一篇重点说一下诊断的请求和响应所包含的信息以及格式要求。

一、诊断数据单元

诊断数据单元一般包含地址信息和应用数据、应用数据长度,其中应用数据会包含服务ID、子功能参数(如果有)和应用数据参数:

1.地址信息:地址信息一般包含报文类型、目标地址、源地址、地址类型等信息,其中大家重点需要关注的是目标地址、源地址和地址类型。目标地址指的是诊断报文接收方的地址,源地址是诊断报文发送方的地址,地址类型指的是报文是物理寻址还是功能寻址。对于CAN报文来说,这个地址信息就是映射到CAN ID上的,以太网的报文格式里也有地址信息的位置,这是每条报文所必须包含的内容,映射关系都有固定的格式,这个后面专门会讲。

2.服务ID:服务ID是用来标识诊断里每个服务的唯一ID,请求和响应里的服务ID是不同的,分为服务请求的ID、服务肯定响应的ID以及服务否定响应的ID。下面是一个表格,列举了服务ID的划分。

2b9e97d379f04da6addf39c52927db30.png

仔细观察上面的表格,会发现以下两点:①请求和肯定响应的服务ID数值相差0x40,诊断的请求和响应的服务ID是一对一的,也就是说一个请求的服务ID所对应的肯定响应的服务ID是唯一的,请求的服务ID其BIT6=0,所对应的肯定响应的服务ID其BIT6=1,因此相差0x40;②否定响应只有一个服务ID,那就是0x7F。

3.应用数据参数:除了服务ID之外,诊断报文中还会有其他的参数和数据,根据服务不同,数据内容也会不同,例如有的服务是包含子功能的,那么服务ID后面紧跟的就是子功能,有的服务需要通过数据标识来决定请求的数据是什么,那么服务或服务和子功能后面还要跟着数据标识等等,更详细的数据格式会在后面每个服务的章节说明。

二、请求数据单元格式

请求数据单元同样按有没有子功能分成两种,先看带子功能的请求格式。如下表所示,请求里首先会包含地址信息,除远程地址外,其余都应该是必须有的;然后是服务ID,之后室一个字节的子功能,再后面是数据参数。数据单元最后还要带数据长度,这里的长度指的是应用数据长度,地址信息不包含在内。

2e55159faf2341c287c6c445c9b3f2ae.png

 不带子功能的服务请求跟带子功能的区别只有一个,就是服务后面紧跟数据参数,不再有子功能位置。c437c556685f429395bb828cd74631be.png

RA远程地址只有在Message type是远程诊断的时候,才会存在。远程诊断是一个稍微复杂的寻址方式,当TA不能够完全表示服务端的地址信息的时候,需要使用远程诊断的功能。

注意这里的远程诊断并非当前基于远程信息平台所搭建的云端远程诊断和升级系统。

可以想象这样一个场景,假设我们的车会外挂拖车模块,而且是可以外挂不同品牌的拖车。如果需要读取拖车的信息,汽车厂商的诊断仪不太可能会适配非官方的模块,这时候可以有这样一个解决方案,让与外挂的拖车相连接的总线节点作为一个网关。诊断仪配置可以填写远程地址的功能,发送诊断请求的时候,目标节点地址设置为这个网关,而RA地址填写所外接的拖车节点的地址,而这个网关可以识别报文的扩展地址从而将对应的请求和响应转发到相应的网段。

理解起来是不是挺复杂?复杂就对了,我解释起来也挺复杂,所以目前接触的乘用车并没有实际使用这套,而商用车使用UDS的也屈指可数,所以这里仅当了解就可以了。

三、肯定响应数据单元格式

肯定响应格式和请求的格式相差不大,只不过这里的SID换成了服务的响应ID,也就是请求的SID+0x40。77696d3bd81741dc880d83b58144aec3.png

 2d6b77f7e5f54e8ea89d848ea589a856.png

ISO14229-1里的图响应这儿最后没有写Length,不知道是忘记了还是特殊原因,因为对整体理解没有影响,这里不做深究。

四、否定响应数据单元格式

否定响应比较简单,地址信息和上面的数据单元里含义一致,应用数据部分只有三个字节的长度:第一个字节是否定响应的服务ID即0x7F,注意这个是固定的;第二个字节是请求的SID,即前面请求数据单元里的SID,它表示这个否定响应是针对哪一个请求的;最后一个字节是NRC,Negative Response Code,前面有介绍其含义,主要用来表示给出否定响应的具体原因是什么。

2c22de04f96e4ed4a3a948608b6d6f53.png

关于否定响应,这里多说一点,一般诊断的请求和响应是一问一答的形式,即无特殊要求(见系列之二)的请求之后要有响应,如果没有响应就表明服务端有问题。所以一般ECU接收到请求之后,要么给肯定响应,要么给否定响应。但是有一个否定响应是特殊的,当NRC是0x78的时候,这个NRC是pending的意思,表示当前服务端还没办法处理请求,需要再等等,过会儿再给响应,也就是说再过会儿会给一个肯定或者否定的响应,所以请记住这个特殊的NRC。

UDS诊断系列链接汇总_ChenglimK的博客-CSDN博客

  • 11
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: CANalyzer可以通过发送诊断请求来与ECU进行通信。首先,您需要使用CANalyzer的诊断配置向您的ECU发送请求。接下来,您需要在CANalyzer的“Diag Request”窗口中设置请求参数,如请求ID、服务ID和数据字节等。最后,在CANalyzer中启动诊断请求并监视ECU的响应。请注意,您需要确保CANalyzer和ECU之间的物理连接正确,并且ECU已正确配置以接受诊断请求。 ### 回答2: CANalyzer是一种专业的汽车网络分析工具,用于对车辆的CAN总线进行分析和诊断。在CANalyzer中,我们可以通过发送诊断请求来与车辆进行通信。 CANalyzer发送诊断请求的过程如下:首先,我们需要连接CANalyzer与车辆的CAN总线。可以通过CANalyzer的硬件接口与车辆的CAN总线进行连接。然后,在CANalyzer的界面上,我们可以选择要发送的诊断请求类型,如读取故障码、清除故障码、读取传感器数据等等。 在选择完请求类型后,我们可以设置相关的参数,比如要读取的故障码类型、要读取的传感器数据的编号、要清除的故障码等等。设置完参数后,我们就可以点击发送按钮,CANalyzer会将设置好的诊断请求发送到车辆的CAN总线上。 车辆接收到CANalyzer发送的诊断请求后,会根据请求的类型和参数进行相应的操作。比如,如果是读取故障码的请求,车辆会将存储在其ECU中的故障码发送回CAN总线,然后CANalyzer可以将这些故障码显示在界面上。如果是清除故障码的请求,车辆会清除存储在ECU中的故障码,然后CANalyzer会显示清除成功的消息。 总之,CANalyzer发送诊断请求是通过连接CANalyzer和车辆的CAN总线,并设置请求类型和参数,然后点击发送按钮来实现的。这样可以实现与车辆的通信,并进行相应的诊断操作。CANalyzer在汽车网络诊断领域有着重要的作用,可以帮助我们及时发现和定位车辆故障,提高整车的可靠性和安全性。 ### 回答3: CANalyzer是一种用于CAN总线系统分析和诊断的工具。它可以用来发送诊断请求,以便与车辆的电子控制单元(ECU)进行通信并进行故障诊断。 在诊断过程中,CANalyzer可以通过CAN总线与车辆的ECU进行通信,并向ECU发送各种诊断请求诊断请求可以是诊断服务请求(如读取故障码、清除故障码)或特定功能请求(如读取传感器数据、执行特定操作)。 CANalyzer发送诊断请求的过程通常是通过配置诊断服务的请求响应消息来完成。首先,需要在CANalyzer中设置诊断服务的请求消息的ID、数据和其他相关信息。然后,将配置好的请求消息发送到CAN总线上。ECU会收到该请求消息,并根据配置的诊断服务要求响应相应的数据或执行相应的操作。CANalyzer可以接收和显示ECU发送回来的响应数据,并分析和记录这些数据,以便进行故障诊断和系统分析。 通过CANalyzer发送诊断请求可以帮助我们了解车辆系统的状态和性能,并帮助诊断故障。它可以帮助工程师快速定位和解决故障,提高车辆维修效率和可靠性。同时,CANalyzer还可以用于进行系统集成测试和验证,以确保车辆系统的各个部分能够正常工作和相互协调。总之,CANalyzer作为一种强大的诊断工具,在汽车电子领域中具有重要的应用价值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChenglimK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值