UDS之时间参数总结篇

前言

UDS (Unified Diagnostic Service) 统一诊断服务协议。

之所以称为统一诊断服务,则是因为该协议是建立在各种传输方式之上的应用层协议,与底层所采用的通信介质都没有关系,该协议内容在ISO14229-1中定义,目前该协议版本已更新至2020版。

UDS开发及测试过程中,总是会出现各种各样的时间参数,你是否存在以下烦恼呢:

  • 为什么会有这些时间参数呢?
  • 这么多的时间参数,怎么记得住呀!
  • 这些时间参数名字大同小异, 到底有啥区别呢?
  • 这些时间参数到底应该如何正确的使用呢?

不要着急,实属正常,谁也没法一直记住这么多参数,在此之前,我跟大家一样,同样存在上述种种疑惑。开发及测试过程中往往容易忽视这些时间参数的作用,等到出现问题时才去进一步了解其含义。
为了较为全面的对UDS用到的UDS参数有个了解,接下来,我将从网络层,会话层,应用层以下三个层面来跟大家一起探讨学习UDS用到的所有时间参数,如下图1所示:


正文

DoCAN为例,以下传输层与网络层相关参数在ISO-15765-2中都会有相关细节性的描述,本文只做系统性总结,对具体细节不作展开,大家可自行深入研究。

传输层时间参数

Addressing Mode(AM)

在发送诊断指令的过程中,存在以下两种寻址方式:

  • 物理寻址: 即该诊断服务请求只针对符合请求中物理地址的ECU,其他ECU节点不做任何接收处理;
  • 功能寻址: 即该诊断物理请求针对当前网络下所有的ECU节点,所有的ECU均会接收处理该诊断请求;

一般而言,一个ECU节点只会存在1对物理寻址,1对功能寻址;每一对寻址方式根据客户的需求来自行定义。

应用场景与作用:

  • 当该诊断请求需要发送至特定ECU节点时,就需要使用物理寻址方式,如使用$2E服务写DID或者执行$34$36, $37执行下载程序时;
  • 当该诊断请求需要发送至当前网络下所有的ECU节点时,就需要使用功能寻址,典型过程如FBL刷写过程中的$28,$85服务等。

Block Size与STmin

Block Size 简称“BS”,该参数与STmin一般同时出现。此两参数主要用于诊断报文传输多帧时会使用到。在传输多帧诊断报文的过程中,存在着三种类型的帧:

  • 首帧FFFirst Frame ):发送多帧过程中的首帧报文;
  • 流控帧FCFlow Control):发送方发送首帧报文之后,如果有流控,接收方回复的流控帧;
  • 连续帧CFConsecutive Frame):流控帧之后发送方能够连续发送的报文帧;

如下图2所示,较为清晰了表述FFFCCF三者之间的交互关系。

 

2 流控交互机制

  • BS 接收方表示发送流控帧之后,发送方被允许连续发送的最大帧数目。特殊情况下,如果该值为0,则表示发送连续帧没有限制,如果值为8,表示发送方最多能连续发送8CF就会继续收到接收方的流控帧;
  • STmin 接收方发送流控帧之后,发送方发送的连续帧之间的时间最小间隔。如果值为0,表示对于发送方发送CF的最小时间没有要求。

应用场景与作用:

APP模式下,发送报文长度大于8或者大于64CANFD)时,就会自动开启流控模式。在Boot模式下,由于使用到$36下载服务,涉及到大量数据的传输,也必然会使用到流控。

由上可知,BSStmin的大小能够用来评估接收方的接收能力,如果都为0,表示接收方接收能力最强;

当然,有些时候,虽然Boot均可以设置为0,但是往往FBL刷写过程中涉及到网关的转发,而网关接收能力存在限制,因此,此时对应的Boot也必须按照网关的接收能力来设置BSStmin

网络层时间参数

如下图3所示,清楚的表达了各个时间参数的起始时间及终止时间,以上述流控交互过程为例。

3 多帧传输过程的时间控制

  • N_As: 表示CAN数据帧从请求数据链路层发送至接收到对应的ACK的最大时间间隔;
  • N_Bs: 表示发送方数据链路层接受到流控帧的最大时间间隔;
  • N_Ar: 表示接收方从请求数据链路层发送流控帧至接收到对应的ACK的最大时间间隔;
  • N_Br: 表示接收方请求数据链路层发送流控帧的内在最大时间间隔 (N_Br + N_Ar)<(0.9N_Bstimeout)
  • N_Cs: 表示发送方请求数据链路层发送流控帧的内在最大时间间隔 (N_Cs + N_As)<(0.9N_Cr timeout);
  • N_Cr: 表示接收方接收到流控帧的最大等待时间间隔;

为了便于大家记忆及查询方便,制定相关表格如下图4所示:

4 网络层时间参数说明

应用场景与作用:

上述时间参数的确定,对于网络层各报文的发送与接收起到了很好的监控作用,能及时发现问题所在。当然考虑到网络高负载的情形,上述参数不一定能够100%满足要求,但是标准要求一般不能超过允许时间的50%

会话层时间参数

ISO-15765-3标准中对S3ClientS3Server进行了较为详尽的描述,再次不过多描述,大家可以自行研究学习。

S3Client 表示Tester为了保持一个ECU或者多个ECU节点同时保持在非默认会话下的时间间隔;

S3Server 有时也称为S3Timeout,表示ECU未接收到任意诊断报文时维持在非默认会话下的时间间隔;

如下图5所示,描述了这两个时间参数的具体区别。

5 会话层时间参数

应用场景与作用:

针对有些诊断服务只能在扩展会话下才能够执行的场景,需要保持在非默认会话下,执行该诊断指令。比如在刷写过程中(非必须,但一般一直发送比较号,防止意外的超时)或者其他需要一直工作在默认会话下的场景。

应用层时间参数

ISO-15765-3标准中针对Tester以及Server列出了3P时间参数,分别为*P2ClientP2ServerP2*ClientP2 ServerP3Client(Phy) P3Client(Func)

为了较好的比较这六者之间的关系,列表如下图6所示:

6 应用层时间参数说明

应用场景与作用:

这些时间参数主要用于上位机在测试UDS的过程中,诊断工具需要设置一些参数来实时掌握诊断报文的响应状态以及控制相应诊断请求的发送。这对于评估整个UDS的通信是否稳定等性能指标。

### 配置UDS回复时间参数 在配置UDS(Unix Domain Socket)的回复时间参数时,通常涉及调整超时设置以确保通信过程中的稳定性。以下是关于如何设置UDS回复时间参数的相关说明。 #### 超时机制的作用 超时机制用于定义客户端等待服务器响应的最大时间。如果超过此时间仍未收到响应,则认为请求失败并触发相应的错误处理逻辑[^1]。 #### 设置方法 可以通过修改配置文件或编程接口来实现对UDS回复时间参数的控制。具体方式如下: 1. **通过CANoe UDS配置手册** 在Vector CANoe中,可以利用其内置功能完成超时参数的设定。例如,在创建诊断服务时,可以在属性窗口中指定`Request Timeout`字段,该字段即表示最大允许的等待时间(单位为毫秒)。这一操作可通过图形化界面轻松完成[^2]。 2. **手动编辑XML/YAML配置文件** 如果采用自定义脚本或者外部工具进行开发,则可能需要直接编写配置文件。下面是一个基于YAML格式的例子展示如何声明此类参数: ```yaml uds_config: request_timeout_ms: 5000 # 请求超时时间为5秒 response_delay_ms: 200 # 响应延迟时间为200毫秒 ``` 3. **程序代码示例** 当使用Python或其他高级语言构建应用层逻辑时,也可以动态调整这些值。以下是一段简单的Python示范代码片段,它展示了如何模拟发送一条消息以及设置合理的超时期限。 ```python import socket def send_uds_message(sock, message, timeout=5): sock.settimeout(timeout) # 设定套接字读取数据时的最大阻塞时限 try: sock.sendall(message.encode(&#39;utf-8&#39;)) data = sock.recv(1024).decode(&#39;utf-8&#39;) return data except socket.timeout: print("The connection has timed out after {} seconds".format(timeout)) return None if __name__ == "__main__": with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as s: s.connect("/tmp/example.sock") # 连接到特定路径下的UNIX域套接字 result = send_uds_message(s, "Test Request", timeout=10) if result is not None: print(f"Received Response: {result}") ``` 上述例子中设置了两个不同的超时选项——全局变量默认值与函数调用期间传递的具体数值[^3]。 #### 注意事项 当实际部署解决方案之前,请务必参照目标平台所支持的标准版本号及其扩展特性描述文档仔细核验各项细节是否一致;此外还需考虑网络环境差异可能导致的影响因素。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值