目录
Recommended Session(s) for Service
ISO14230针对K线的诊断协议,15765针对CAN线的协议,15031针对排放相关的定义,ISO14229。

UDS可以基于不同的总线网络来实现,诊断服务,发送SID给ECU如果ECU认可,就发送SID+40(肯定响应),如果没有认可,会回一个7F,7F是否定响应的标识符。用7F+SID+NRC,NRC就是否定响应的代码。(否定响应),在14229里面NRC有定义(从10到93),这个可以去14229-1里面找到,有全部的定义。

在UDS里面定义的服务有26种,每一个服务发出请求的格式是不一样的。但是每一个服务都带有格式标识符(SID)。

SID主要有四种不同的格式:
SID,只发出一个服务的请求,ECU就可以认可,
SID+SF,服务后面加上子服务Subfunction,这样ECU才会认可,
SID+DID,由我们的服务再加上我们的数据标识符Data Identifier,
SID+SF+DID,既要加上子服务,又要加上我们的DID

在14229的26种服务中,有几个常用服务:
首先是10服务,10服务是诊断会话的控制,是诊断最基本的服务,所对应的是27的服务,是诊断的管理控制的服务,27是安全访问的服务。22和2E,是通过我们的DID来读写我们数据的服务。还有就是跟DTC相关的两个服务,19和14,19是读DTC,14是清除DTC。

当ECU上电的时候,进入的是默认会话Default Session(10 01),如果想跳转到非默认会话,也就是02或者03,就需要用10+子服务(SF),里面有一个S3计时器,如果在S3的时间没有任何请求发出来的话,我们会自动的回到默认会话,相当于保护机制。还有一个重要的服务,3E服务,就是保持在当前会话的服务,因为我们在非默认会话的时候,不可能一直发出请求。当我们停下来做数据分析或者其它动作的时候ECU没有发出有效命令的时候,我们可以用到3E,3E就是在S3计时时间到之前,我们发出一个3E服务,这样就会一直保持在非默认会话的情况。

在Cvt列,M代表强制,强制使用10和子服务。在UDS SF当中定义了00到03,其中00是不会被使用的。01到03代表不同的含义。Response对应的相应,对应的肯定响应是在SID上加上40,10+40=50,S也代表强制使用,在这里面代表如果我们的肯定相应没有被抑制的话,这个字节就是要被强制使用的。后面我们的服务也是被强制使用的。后面C是有条件使用的。由客户决定。

不同的NRC,对于10来说主要用到的就是12 13还有22三种否定响应。

在CAN总线当中每一个帧的报文每一条请求都只支持8个字节。第一个02代表TP层的一个单帧,2代表后面有两个有效字节。在Request里面,后面5个字节对我们来说是没有意义的。肯定响应也一样,三个字节加5个填充位。最后否定响应,有四个字节7F+SID+否定响应的代码NRC。22表示当前的状态。

在默认会话服务当中,有一些不支持,但是在非默认会话当中,这些都是支持的。

平常读写只需要用到22服务+DID,有一些数据需要加密,在ECU上电以后,是一个锁定的状态,我们通过27+子服务+密钥,通过这样的服务请求来进行一个解锁状态。解锁之后ECU状态就变成了Unlocked状态,Unlocked状态整车厂可以设置不同的级别。各个级别之间没有制约关系。是可以互相转换的。

在解锁之前,先向我们的ECU请求一个种子,所以用27服务和2n-1(相当于是奇数),让n=1,这时候27 01对ECU进行了请求解锁,这时候ECU给我们一个肯定的响应,就回了一个67服务和2n-1,就是67 01后面再跟一段字符,就是我们的种子。当我们的测试端拿到种子的时候,进行运算(由整车厂进行规定),利用这个算法,生成钥匙K1,然后再通过27 2n K1,就是 27 02 K1,把这条请求发送给ECU,ECU拿到K1进行运算,计算出K2,当K1和K2匹配的时候,ECU就可以解锁了。解锁以后ECU向测试端发出肯定响应67 02。


22服务通过DID来读数据,后面加上DID标识位,如果DID肯定响应的话就会回62加上DID后面的
根据distapu的数据长度来确定。示例:如果去读当前诊断会话,F1 86代表着当前会话的诊断标识。22 F1 86作为请求。请求的意思是先读取数据,读的数据标识符是当前激活的诊断会话。肯定响应22+40=62 F1 86 最后一个字节是02,02代表编程会话。

DID有一部分已经被UDS规定了,可以在14229-1里面找到。这是5个相关DID,可以使用可以不使用

2E DID Data,F186这个DID不能强制写入诊断会话。需要用10来进行会话的转换。写的请求一般来讲是在非默认会话和解锁状态下面来进行的。

诊断故障代码,通过诊断服务来读取故障。
在UDS种规定以3个字节的长度作为一个DTC,一般来说都会使用15031-6里面的规范来规定3个字节所代表的不同的含义。前两个字节可以代表一个根DTC,最后一个字节是一个DTC状态的位。FTB就是错误类型的Bit,fault tape bit, 在H-OBD和OBD II中都有不同的DTC的格式。在商用车J1939当中也不太一样。

最高的两个位,代表的是故障系统的分类。00是动力系统,01是底盘系统,10代表的是车身系统 11代表网络系统。这样就把所有DTC分为四大类,就是P C B U,第五位和第四位这两位分别代表0123,00 01 10 11,01是车厂控制的,其他的由ISO协议规范来控制。对于一个根DTC来说是由一个字母和四个数字来组成的。

19服务也是配合子服务来使用的,有28种子服务,02是读取DTC,通过DTC的状态掩码来读取,04是读取一个快照信息,06是读扩展信息,0A是读ECU当中支持的所有DTC的数据。

02服务,通过DTC的状态掩码来读,DTC状态掩码:这里面有8个字节,每一位都代表着不同的状态。从0到7,具体定义看14229附录4中的具体定义。DTC的状态有专门的一个字节来表示。

对于02服务,字节的用法,有不同的3种类型。在请求的时候可以随意设置,在响应当中也会响应一个DTC状态,和请求不同,响应的时候就是1502+ECU可以支持的所有的DTC状态掩码,假如都置1,那响应的时候就是FF,第三种形态对于每个DTC来说,都会有一个相应的故障的状态。这个也会表现在肯定响应当中。

当我们请求DTC的时候,我们就用19 02 故障状态掩码(SM),肯定响应的时候也是要有一个状态掩码SAM,在每一个DTC当中,不光只有三个字节的本身DTC代表的一个CODE, 最后一个位还会有一个DTC的状态。这个是当产生和记录的时候这个位就已经被创建好了。19 0A也一样,响应的时候响应59 0A。
当故障被清除以后,系统是不会把DTC清除掉的,这时候用14服务进行擦写,14服务后面会加3个字节代表我们的DTC的分组,如果拿到了肯定响应54的时候,就代表所有的DTC都已经被清除掉了。

因为诊断是应用层面的,所以UDS服务前面要加上地址的寻址SA代表原地址,TA代表目标地址,TA的类型代表着目标地址的类型。

物理寻址模式,原地址T会向所有ECU发出一个E2的请求,就是点对点的通讯只能对一个ECU来进行通讯,这种就是物理寻址。

功能寻址是广播式的寻址,T向多个ECU发送功能寻址的地址,这个功能被多个ECU都认可,所有寻址的信息都可以叫做CAN-ID,对我们一个ECU来说,它请求的时候可以认可两种请求的CAN-ID。对一个ECU,它响应的时候只有一个物理寻址的ID。能接受的请求有两种,可能是物理请求,也可能是功能请求。

一、什么是MQTT协议MessageQueuingTelemetryTransport:消息队列遥测传输协议。是一种基于客户端-服务端的发布/订阅模式。与HTTP一样,基于TCP/IP协议之上的通讯协议,提供有序、无损、双向连接,由IBM(蓝色巨人)发布。原理:(1)MQTT协议身份和消息格式有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。MQTT传输的消息分为:主题(Topic)和负载(payload)两部分Topic,可以理解为消息的类型,订阅者订阅(Su
TCL脚本语言简介•TCL(ToolCommandLanguage)是一种解释执行的脚本语言(ScriptingLanguage),它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。•实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。由于TCL的解释器是用C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,所以,Tcl是
开门见山|拉取镜像dockerpullelasticsearch:7.16.1|配置存放的目录#存放配置文件的文件夹mkdir-p/opt/docker/elasticsearch/node-1/config#存放数据的文件夹mkdir-p/opt/docker/elasticsearch/node-1/data#存放运行日志的文件夹mkdir-p/opt/docker/elasticsearch/node-1/log#存放IK分词插件的文件夹mkdir-p/opt/docker/elasticsearch/node-1/plugins若你使用了moba,直接右键新建即可如上图所示依次类推创建
文章目录概念索引相关操作创建索引更新副本查看索引删除索引索引的打开与关闭收缩索引索引别名查询索引别名文档相关操作新建文档查询文档更新文档删除文档映射相关操作查询文档映射创建静态映射创建索引并添加映射概念es中有三个概念要清楚,分别为索引、映射和文档(不用死记硬背,大概有个印象就可以)索引可理解为MySQL数据库;映射可理解为MySQL的表结构;文档可理解为MySQL表中的每行数据静态映射和动态映射上面已经介绍了,映射可理解为MySQL的表结构,在MySQL中,向表中插入数据是需要先创建表结构的;但在es中不必这样,可以直接插入文档,es可以根据插入的文档(数据),动态的创建映射(表结构),这就
HTTP缓存是指浏览器或者代理服务器将已经请求过的资源保存到本地,以便下次请求时能够直接从缓存中获取资源,从而减少网络请求次数,提高网页的加载速度和用户体验。缓存分为强缓存和协商缓存两种模式。一.强缓存强缓存是指浏览器直接从本地缓存中获取资源,而不需要向web服务器发出网络请求。这是因为浏览器在第一次请求资源时,服务器会在响应头中添加相关缓存的响应头,以表明该资源的缓存策略。常见的强缓存响应头如下所述:Cache-ControlCache-Control响应头是用于控制强制缓存和协商缓存的缓存策略。该响应头中的指令如下:max-age:指定该资源在本地缓存的最长有效时间,以秒为单位。例如:Ca
如何用IDEA2022创建并初始化一个SpringBoot项目?目录如何用IDEA2022创建并初始化一个SpringBoot项目?0. 环境说明1. 创建SpringBoot项目 2.编写初始化代码0. 环境说明IDEA2022.3.1JDK1.8SpringBoot1. 创建SpringBoot项目 打开IDEA,选择NewProject创建项目。 填写项目名称、项目构建方式、jdk版本,按需要修改项目文件路径等信息。 选择springboot版本以及需要的包,此处只选择了springweb。 此处需特别注意,若你使用的是jdk1
前言上一篇我们简要讲述了粒子系统是什么,如何添加,以及基本模块的介绍,以及对于曲线和颜色编辑器的讲解。从本篇开始,我们将按照模块结构讲解下去,本篇主要讲粒子系统的主模块,该模块主要是控制粒子的初始状态和全局属性的,以下是关于该模块的介绍,请大家指正。目录前言本系列提要一、粒子系统主模块1.阅读前注意事项2.参考图3.参数讲解DurationLoopingPrewarmStartDelayStartLifetimeStartSpeed3DStartSizeStartSize3DStartRotationStartRotationFlipRotationStartColorGravityModif
VMware虚拟机与本地主机进行磁盘共享前提虚拟机版本为Windows10(专业版,不是可能有问题)本地主机为家庭版或学生版(此版本会有问题,但有替代方式)最好是专业版VMware操作1.关闭防火墙,全部关闭。2.打开电脑属性3.点击共享-》高级共享-》权限4.如果没有everyone,就添加权限选择完全控制,然后应用确定。5.打开cmd输入lusrmgr.msc(只有专业版可以打开)如果不是专业版,可以跳过这一步。点击用户-》administrator密码要复杂密码,否则不行。推荐admaiN@1234类型的密码。设置完密码,点击属性,将禁用解开。6.如果虚拟机的windows不是专业版,可
IK分词器本文分为简介、安装、使用三个角度进行讲解。简介倒排索引众所周知,ES是一个及其强大的搜索引擎,那么它为什么搜索效率极高呢,当然和他的存储方式脱离不了关系,ES采取的是倒排索引,就是反向索引;常见索引结构几乎都是通过key找value,例如Map;倒排索引的优势就是有效利用Value,将多个含有相同Value的值存储至同一位置。分词器为了配合倒排索引,分词器也就诞生了,只有合理的利用Value,才会让倒排索引更加高效,如果一整个Value不进行任何操作直接进行存储,那么Value和key毫无区别。分词器Analyzer通常会对Value进行操作:一、字符过滤,过滤掉html标签;二、分
题外话:抑郁场,开局一小时只出A,死活想不来B,最后因为D题出锅ura才保住可怜的分。但咱本来就写不到DB-LongLegs(数论)本题题解法一学自同样抑郁的知乎作者幽血魅影的题解,有讲解原理。法二来着知乎巨佬cup-pyy(大佬说《不难发现》呜呜)题意三种操作:向上走mmm步向右走mmm步给自己一次走的步数加111,即使得m=m+1m=m+1m=m+1问从(0,0)(0,0)(0,0)走到(a,b)(a,b)(a,b)的最小操作次数,值得注意的是操作三不可逆。解析假设我们最终一步的大小增长到mmm,那么在这个过程中我能以[1,m][1,m][1,m](当步数增长到该数时)之间的任何数字向上或