诊断中P2,P2*与S3三类定时器的介绍与总结

2023-11-10 16:50

本文主要是介绍诊断中P2,P2*与S3三类定时器的介绍与总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

个人总结,有问题的地方欢迎指正

一、P2定时器——P2CAN_Client,P2CAN_Server,S3

1、DefaultSession下采用物理寻址

  1. P2CAN_Client是用于诊断仪的定时器
    图1-P2CAN_Client 与 P2CAN_Server 定时器实现过程

P2CAN_Client:从诊断仪发送完一条完整的请求后,开启该定时器,诊断仪应在该定时器定时时间内接受到从ECU传输过来的相应。若在该定时器timeout前就接受到了ECU的响应报文,那么该定时器停止计时。
若ECU响应为单帧,诊断仪应接收完完整的一帧响应报文后P2CAN_Client定时器stop;
若ECU响应为多帧响应,诊断仪应接受完完整的一帧首帧报文后P2CAN_Client定时器stop;

  1. P2CAN_Server是用于ECU的定时器

P2CAN_Server:从ECU接收完一帧完整的请求后,开启该定时器,且ECU应在该定时器定时时间内发送响应报文。如果在该定时器timeout前ECU就开始发送响应报文,那么该定时器在ECU开始发送响应报文的时候停止计时。

步骤e的说明:对于多帧传输,在P2CAN_Server时间内应开始传输第一帧,对于单帧传输,在该定时器时间内,应该开始传输响应报文。

2、DefaultSession下采用物理寻址且支持78否定响应机制

P2*CAN_Client与P2*CAN_Server
若在ECU中支持了78NRC的机制,那么当ECU忙于处理其他的事情的时候,诊断仪发送了一条请求到ECU,此时ECU是没空对该请求做出响应的(并不意味着否定响应),因此由于78这个机制的存在,ECU会回一个78NRC的响应报文,告知诊断仪ECU现在处于忙碌状态,稍后回复你,这个回复的时间就由P2*时间决定。

3. Physical communication during a non-default session

3.1 Functionally addressed TesterPresent(3E hex) message

在这里插入图片描述
P2CAN_Client>50ms
P2CAN_Server:0~50ms

总结
a. S3Client < S3Server:所以只要S3Client存在,即使两个定时器同时开启,ECU都不会跳出当前会话
b. S3Client , S3Server是相互独立的
c. 只要10服务使ECU切换到除01default以外的其他模式,S3Client 就会启动(定时器),当定时器timeout后,会发送功能寻址的3E服务,并重置S3Client 定时器
d. 当10服务请求后,ECU完成相应的响应后就会开启S3Server定时器,在该定时器开启过程中,若ECU对其它任何诊断服务响应了(包括3E),则该定时器stop,直到ECU对其他诊断服务的响应完成了,就会重启该定时器。
e. 在S3Server定时器stop期间,ECU将不会响应3E服务
f. 3E服务是为了重置S3Server定时器

3.2 Physically addressed TesterPresent(3E hex) message

在这里插入图片描述
总结:
a. 对于物理寻址,S3Client , S3Server定时器的启动需要在10服务的请求得到响应后才会开启
b. 在诊断仪和ECU端, 对于S3Client , S3Server两个定时器而言,只要两个设备空闲(即没有诊断服务需要发送,没有请求需要响应),则重启S3Client , S3Server两个定时器
c. 对于诊断仪而言,当在S3Client定时器期间,没有任何的诊断报文需要发送(包括3E),当timeout时,将发送物理寻址的3E服务以使S3Server,ECU保持在非默认会话
d. S3Client , S3Server两个定时器在一定程度上来说是同步的,同时重启,相继停止

4. Functional Communication

4.1 Functional communication during defaultSession

在这里插入图片描述

总结:
a. 对于功能寻址的请求报文,只能为单帧报文
b. 当发送完功能寻址请求后,开启P2CAN_Client和P2CAN_Server定时器
c. 对于P2CAN_Client的定时时间界定:
Functional communication—>使用default reload value 50ms
physical communication—>需要考虑latency,△P2can
d. 对图的理解应有四种情况

  1. server1为单帧响应, server2为多帧响应,则只有一个P2CAN_Client时间,即b—>f2

  2. server1为多帧响应, server2为单帧响应,则有2个P2CAN_Client时间,即b—>f2;e1—>f2

  3. server1为单帧响应, server2为单帧响应,则有2个P2CAN_Client时间,即b—>f1;f1—>f2

  4. server1为多帧响应, server2为多帧响应,则有2个P2CAN_Client时间,即b—>e1;e1—>e2

4.2 Functional communication during defaultSession with enhanced response timing

在这里插入图片描述
总结:
a. 功能寻址请求响应的ECU,都会开启一个P2CAN_Server定时器,是相互独立的
b. 对于客户端而言(诊断仪),只有一个P2CAN_Client定时器
c. 对同一个请求,只要有一个ECU回复了78 pending响应,则该ECU使用P2 * CAN_Server 定时器,但不会改变其他ECU的timer,对于client而言,则会启动P2* CAN_Client定时器,并存储回复78 pending的ECU ID, 直到ECU ID从Client中移出,若该ECU的ID为Client中存储的最后一个ID, 那么P2*CAN_Client将改为P2CAN_Client
d. 在h点,若该响应为最后一个响应,则stop P2CAN_Client,若不是,则重启P2CAN_Client

4.3 Functional communication during non-default session

非默认会话,存在78pending的传输过程
在这里插入图片描述

以上的所有图需要参照15765中对每个点的描述进行理解。

二、P3定时器——P3CAN_Function,P3CAN_Physical

总结:
a. P3CAN_Function(应用于所有功能寻址的报文),P3CAN_Physical(适用于所有物理寻址的报文)都适应于各自的寻址方式报文
b. P3CAN_Function = P2CAN_Server_max
P3CAN_Physical = P2CAN_Server_max
c. P3参数用于客户端发送相邻两条报文的讲个时间
d. P3CAN_Phy用于任何诊断会话中,采用物理寻址的任意请求报文,并且接收该请求的ECU不需要响应
P3CAN_Func用于任何诊断回话中,采用功能寻址的任意请求报文,并且ECU需要响应或不需要响应
e. 只有在上一条报文的响应(不论有没有响应)完全处理后,才可以发送下一条新的请求报文,P3定会器timeout前不允许发送新的msg
f. completely handle的界定:
1.没有要求ECU响应
2. 对于功能寻址msg的所有响应都收到
3. P2CAN_Client超时,需要响应的ECU没有收到响应

这篇关于诊断中P2,P2*与S3三类定时器的介绍与总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/384005

相关文章

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语

java常见报错及解决方案总结

《java常见报错及解决方案总结》:本文主要介绍Java编程中常见错误类型及示例,包括语法错误、空指针异常、数组下标越界、类型转换异常、文件未找到异常、除以零异常、非法线程操作异常、方法未定义异常... 目录1. 语法错误 (Syntax Errors)示例 1:解决方案:2. 空指针异常 (NullPoi

Springboot如何配置Scheduler定时器

《Springboot如何配置Scheduler定时器》:本文主要介绍Springboot如何配置Scheduler定时器问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录Springboot配置Scheduler定时器1.在启动类上添加 @EnableSchedulin

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程

Python实现html转png的完美方案介绍

《Python实现html转png的完美方案介绍》这篇文章主要为大家详细介绍了如何使用Python实现html转png功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 1.增强稳定性与错误处理建议使用三层异常捕获结构:try: with sync_playwright(

Java使用多线程处理未知任务数的方案介绍

《Java使用多线程处理未知任务数的方案介绍》这篇文章主要为大家详细介绍了Java如何使用多线程实现处理未知任务数,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 知道任务个数,你可以定义好线程数规则,生成线程数去跑代码说明:1.虚拟线程池:使用 Executors.newVir

Java反转字符串的五种方法总结

《Java反转字符串的五种方法总结》:本文主要介绍五种在Java中反转字符串的方法,包括使用StringBuilder的reverse()方法、字符数组、自定义StringBuilder方法、直接... 目录前言方法一:使用StringBuilder的reverse()方法方法二:使用字符数组方法三:使用自

JAVA SE包装类和泛型详细介绍及说明方法

《JAVASE包装类和泛型详细介绍及说明方法》:本文主要介绍JAVASE包装类和泛型的相关资料,包括基本数据类型与包装类的对应关系,以及装箱和拆箱的概念,并重点讲解了自动装箱和自动拆箱的机制,文... 目录1. 包装类1.1 基本数据类型和对应的包装类1.2 装箱和拆箱1.3 自动装箱和自动拆箱2. 泛型2

Python依赖库的几种离线安装方法总结

《Python依赖库的几种离线安装方法总结》:本文主要介绍如何在Python中使用pip工具进行依赖库的安装和管理,包括如何导出和导入依赖包列表、如何下载和安装单个或多个库包及其依赖,以及如何指定... 目录前言一、如何copy一个python环境二、如何下载一个包及其依赖并安装三、如何导出requirem

Rust格式化输出方式总结

《Rust格式化输出方式总结》Rust提供了强大的格式化输出功能,通过std::fmt模块和相关的宏来实现,主要的输出宏包括println!和format!,它们支持多种格式化占位符,如{}、{:?}... 目录Rust格式化输出方式基本的格式化输出格式化占位符Format 特性总结Rust格式化输出方式