UDS诊断时间参数说明

目录

1、应用层时间参数

2、会话层时间参数

3、传输层时间参数

4、网络层时间参数 


在阅读客户释放的诊断问卷调查表时,基本有一页会介绍许多与时间相关的参数,这些参数对于确保通信的有效性和可靠性至关重要。

这些时间参数来源于哪里?并且分别是什么含义呢?本篇博文将详细为你讲解。

UDS诊断时间参数来源于行业标准的协议文档:ISO15765和ISO14229,除非客户自定义修改,否则基本是协议文档上默认的数值。

1、应用层时间参数

P2 Client:诊断工具成功发送诊断报文请求之后,等待ECU回复诊断响应的时间间隔。

P2* Client:诊断工具接收到 NRC 0x78 之后继续等待 ECU 响应的时间间隔。

P2Server_max :ECU 在收到请求和给出响应之间的这个时间间隔,它描述了ECU 的反应速度,通常最大值为50ms。

P2* Server_max:ECU 发送 NRC 0x78 之后继续发送 下帧诊断响应报文的时间间隔。

P3 Client Phys:诊断工具成功发送 物理寻址诊断请求之后,且无需ECU 回复继续发送下次物理寻址诊断请求的最小时间间隔。

P3 Client Func:诊断工具成功发送功能寻址之后再次发送功能寻址的最小时间间隔。

2、会话层时间参数

S3 Client:诊断工具为了保持非默认会话模式而发送 $3E 服务请求报文的时间间隔,最小值2000ms。

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

3、传输层时间参数

BS:Block Size,该参数与STmin一般同时出现。这两个参数主要用于诊断报文传输多帧(首帧FF,流控帧FC,连续帧CF)时会使用到。

表示接收方在发送流控帧之后,发送方被允许连续发送的最大流控帧数目。特殊情况下,如果该值为0,则表示发送连续帧没有限制,如果值为5,表示发送方最多能连续发送5帧CF就会继续收到接收方的流控帧。

STmin :在接收方发送流控帧之后,发送方发送的连续帧之间的最小时间间隔。如果值为0,表示对于发送方发送CF的最小时间没有要求。

发送报文的长度过长时,一帧发不完,就会用到多帧,BS与Stmin的大小可用来评估接收方的接收能力,如果都为0,表示接收方接收能力最强。

4、网络层时间参数 

N_As:发送方 任意帧类型 从请求发送到发送完成 (接收到对应的ACK) 的时间间隔。

N_Ar:接收方 任意帧类型 从请求发送到发送完成 (接收到对应的ACK) 的时间间隔。

N_Bs:发送方收到流控帧 的时间。分为3种情况,分别为:

  • 发送端 从 发送完首帧(FF)到 收到流控帧(FC) 的时间。
  • 发送端 从 发送完连续帧(CF)到 收到流控帧 (FC)的时间。
  • 发送端从收到流控帧(FC)(状态为Wait)到 收到下一个流控帧(FC) 的时间。

N_Br:接收方请求发送流控帧 的时间。分为3种情况,分别为:

  • 接收端从收到首帧(FF)到 请求发送流控帧 (FC)的时间。
  • 接收端从收到连续帧(CF)到 请求发送流控帧(FC) 的时间。
  • 接收端从 发送完流控帧(FC)(状态为Wait) 到 请求发送下一个流控帧 (FC)的时间。

N_Cs:发送方请求发送连续帧(CF) 的时间。分为2种情况:

  • 发送端从收到流控帧(FC)到 请求发送连续帧(CF)的时间。
  • 发送端从 发送完连续帧(CF)到 请求发送下一帧连续帧(CF) 的时间。

N_Cr:接收方收到下一个连续帧(CF) 的时间。分为2种情况:

  • 接收端 从 发送完流控帧(FC)到 收到连续帧(CF) 的时间。
  • 接收端从 收到连续帧(CF)到 收到下一帧连续帧(CF) 的时间。
### 配置和使用UDS中的P2 Server #### 定义和服务概述 UDS(统一诊断服务)遵循ISO 14229标准,该标准规定了道路车辆统一诊断服务的要求以及这些服务的具体应用方式[^1]。此协议允许通过网络接口访问汽车内部多个控制单元的功能。 #### P2超时参数解释 在网络通信过程中,为了防止请求长时间得不到响应而导致系统资源浪费或其他异常情况发生,通常会设置一定的时间限制来等待回应消息的到来。对于UDS而言,在客户端发出请求之后到接收到服务器端回复之前这段时间内所设定的最大时限即为所谓的"P2"超时时间[P2 timeout][^2]。 #### 实现方法 当涉及到具体实现时,配置P2 server主要取决于使用的硬件平台及其支持软件库的能力。下面给出了一种基于Python语言模拟简单UDP socket作为基础构建的一个简易版UDS-P2 server模型: ```python import socket from threading import Timer def handle_client_request(conn, addr): try: data = conn.recv(1024).decode('utf-8') print(f"Received message from {addr}: ", data) # Simulate processing delay here... process_delay = 5 # seconds t = Timer(process_delay, send_response, args=[conn]) t.start() except Exception as e: print(e) def send_response(conn): response_message = "Response to client" conn.sendall(response_message.encode()) if __name__ == "__main__": HOST = 'localhost' PORT = 6789 with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s: s.bind((HOST, PORT)) while True: data, addr = s.recvfrom(1024) if not data: break handle_client_request(s, addr) ``` 请注意上述代码仅为示意用途,并未完全按照UDS协议规范编写;实际项目开发中应当依据官方文档指导完成更严谨的设计与编码工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不脱发的程序猿

亲,赏包辣条吧~

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

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

打赏作者

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

抵扣说明:

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

余额充值