UDS 14229-1定义的请求的响应行为

UDS服务响应规则

    • 重要提示
    • 服务器一般响应行为
      • 包含子功能的请求响应行为
      • 物理寻址请求
      • 功能寻址请求
    • 没有子功能参数的服务响应行为
      • 物理寻址客户端请求
      • 功能寻址客户端请求
    • 伪代码示例

重要提示

服务应当支持物理寻址方式请求,部分服务也支持功能寻址方式请求。在功能寻址请求的方式下有些时候不需要回复否定响应:

  • ServiceNotSupport
  • ServiceNotSupportInActiveSession
  • SubFunctionNotSupport
  • SubFunctionNotSupportInActiveSession
  • requstOutOfRange

服务器一般响应行为

以下响应行为是从接受到请求开始验证的,服务器响应分为三个部分:

	**强制数据**:				评估每个请求消息
	**可选数据**:				根据需要选择性评估请求消息
**制造商/供应商规定**:			根据制造商/供应商的规定评估具体信息

服务器一般响应行为描述
可选验证 :检查当前服务器如果处于忙碌状态,回复NRC 0x21,否则,继续向下验证;
制造商指定验证 :根据制造商规定验证对应的请求信息是否满足,并根据需设置相应的NRC,否则,继续向下验证;
强制验证 :请求的服务是否支持,(判断当前的服务器是否设置了对此SID的支持,不是UDS是否支持),如果不支持,回复NRC 0x11,否则继续向下验证;
强制验证 :验证当前的session是否支持请求的服务,如果不支持,回复NRC 0x7F,否则继续向下验证;
可选验证 :根据服务情况选择是否需要验证SA,如果SA验证未通过,回复NRC 0x33,否则继续向下验证;
供应商指定验证 :根据供应商规定验证对应的请求信息是否满足,并根据需设置相应的NRC,否则,继续向下验证;
一般性响应行为到此,下面有两个分支:

  • 包含子功能的服务(并不包括SID 0x31)
  • 其他服务

子功能占据一个Byte,包含bit0-bit7,其中bit7是正响应抑制位,当bit7=1时,正响应会被抑制,但是如果中间服务器发送了0x78的否定响应,也需要发送最终响应。即0x78需要发送的最终响应效果>正响应抑制位的抑制效果

包含子功能的请求响应行为

在这里插入图片描述
强制验证 :检查请求的服务是否满足最小长度,不满足回复NRC 0x13,否则继续向下验证;(至少两个字节,包含SID和SF参数)
强制验证 :检查此服务是否支持请求的子功能,不支持回复NRC 0x12,否则继续向下验证;(检查是否设置了此SF)
强制验证 :检查当前会话是否支持请求的子功能,不支持回复NRC 0x7E,否则继续向下验证;
可选验证 :检查当前的SA是否支持请求的子功能,不支持回复NRC 0x33,否则继续向下验证;
可选验证 :检查子功能的顺序是否正确(eg:27服务先请求seed再比较key),不正确回复NRC 0x24,否则继续向下验证;
制造商/供应商指定 :根据规定验证对应的请求信息是否满足,并根据需设置相应的NRC,否则,继续向下验证;

物理寻址请求

带子功能的物理寻址请求响应行为。
在这里插入图片描述
a:物理寻址,不抑制正响应,服务和子功能都支持,参数至少有一个可用时,服务器回复肯定响应;
b:物理寻址,不抑制正响应,服务和子功能都支持,参数至少有一个可用时,如果请求数据参数错误,服务器回复否定响应;
c:物理寻址,不抑制正响应,服务和子功能都支持,没有可用的数据参数,服务器回复NRC 0x31的否定响应;
d:物理寻址,不抑制正响应,服务不支持,服务器回复NRC 0x11或0x7F的否定响应;
e:物理寻址,不抑制正响应,服务支持,子功能不支持,服务器回复NRC 0x12或0x7E的否定响应;
f:物理寻址,抑制正响应,服务和子功能都支持,参数至少有一个可用时,抑制正响应;
g:物理寻址,抑制正响应,服务和子功能都支持,参数至少有一个可用时,如果请求数据参数错误,服务器回复否定响应;
h:物理寻址,抑制正响应,服务和子功能都支持,没有可用的数据参数,服务器回复NRC 0x31的否定响应;
i:物理寻址,抑制正响应,服务不支持,服务器回复NRC 0x11或0x7F的否定响应;
j:物理寻址,不抑制正响应,服务支持,子功能不支持,服务器回复NRC 0x12或0x7E的否定响应;

此处,i,j表中NRC各少了一个,个人认为是表中记录错了。原文档的解析中有一句描述是g-j与b-e是相同的,因为物理寻址的否定响应不关注正响应抑制位的设置情况。

**还有一点,如果服务器在处理某一条请求的时候使用了NRC 0x78作为回复,那么一定要在后面回复最终的肯定响应或者NRC不是0x78的最终响应。这意味着在f的情况下,如果使用了0x 78去延长响应的执行时间,最后也要给出一个最终响应。**

功能寻址请求

带子功能的物理寻址请求响应行为。
在这里插入图片描述
a:功能寻址,不抑制正响应,服务和子功能都支持,参数至少一个可用,服务器回复肯定响应;
b:功能寻址,不抑制正响应,服务和子功能都支持,参数至少有一个可用时,如果请求数据参数错误,服务器回复否定响应;
c:功能寻址,不抑制正响应,服务和子功能都支持,没有可用参数,功能寻址抑制NRC 0x31(ROOR)的否定响应;
d:功能寻址,不抑制正响应,服务不支持,服务器抑制NRC 0x11或0x7F的否定响应;
e:功能寻址,不抑制正响应,服务支持,子功能不支持,服务器抑制NRC 0x12或0x7E的否定响应;
f:功能寻址,抑制正响应,服务和子功能都支持,参数至少一个可用,服务器抑制肯定响应;
g:功能寻址,抑制正响应,服务和子功能都支持,参数至少一个可用,但是由于一些错误,服务器发送否定响应
h:功能寻址,抑制正响应,服务器和子功能都支持,参数不可用,功能寻址抑制NRC 0x31(ROOR)的否定响应;
i:功能寻址,抑制正响应,服务不支持,服务器抑制NRC 0x11或0x7F的否定响应;
j:功能寻址,不抑制正响应,服务支持,子功能不支持,服务器抑制NRC 0x12或0x7E的否定响应。

没有子功能参数的服务响应行为

对于没有子功能参数的的请求消息,没有通用的服务器响应行为可用。

物理寻址客户端请求

此子项中指定的服务器响应行为在每个服务的服务描述中引用,该服务不支持子函数参数,但支持从客户端收到的物理寻址请求消息中的数据参数。
在这里插入图片描述
a:物理寻址,服务和参数都支持,服务器回复肯定响应;
b:物理寻址,服务支持,至少有一个可用参数,服务器回复肯定响应;
c:物理寻址,服务支持,至少有一个参数可用,但是由于一些错误,服务器发送否定响应;
d:物理寻址,服务支持,没有可用参数,服务器回复NRC 0x31的否定响应;
e:物理寻址,服务不支持,服务器回复NRC 0x11或0x7F的否定响应。

功能寻址客户端请求

此子项中指定的服务器响应行为在每个服务的服务描述中引用,该服务不支持子函数参数,但支持从客户端收到的功能性地址请求消息中的数据参数。
在这里插入图片描述
a:功能寻址,服务和参数都支持,服务器发送正响应;
b:功能寻址,服务支持,至少一个参数可用,服务器回复肯定响应;
c:功能寻址,服务支持,至少一个参数可用,但是由于一些错误,服务器发送否定响应;
d:功能寻址,服务支持,没有参数可用,服务器抑制NRC 0x31的否定响应
e:功能寻址,服务不支持,服务器抑制NRC 0x11或0x7F的否定响应

伪代码示例

SWITCH (A_PDU.A_Data.A_PCI.SI) 
 { 
 	CASE Service_with_sub-function: /* 如果服务子功能支持*/ 
		IF (message_length >= 2) THEN /* 检查最小长度SI+SF */ 
 			SWITCH (A_PDU.A_Data.A_Data.Parameter1 & 0x7F) /*检查是否抑制正响应*/
			{ 
		 		CASE sub-function_00: /* 如果子功能00支持*/ 
 					IF (message_length == expected_sub-function_message_length) THEN /* 如果消息长度正确,组装响应*/ 
						responseCode = positiveResponse; /* 正响应消息,NRC设置为无效的否定相应码*/
 					ELSE 
 						responseCode = IMLOIF; /* 否则,长度不正确,回复NRC 0x13*/ 
 					ENDIF 
					BREAK; 
				CASE sub-function_01: /* 如果子功能01支持 */  /* 组装响应*/ 
 					responseCode = positiveResponse;  /* 正响应消息,NRC设置为无效的否定相应码*/
		 		: /*等等等等,判断其他的子功能参数*/
		 		CASE sub-function_127: /* 如果子功能127支持 */  /* 组装响应*/  
			 		responseCode = positiveResponse; /* 正响应消息,NRC设置为无效的否定相应码*/
			 		BREAK; 
		 		DEFAULT: 
 					responseCode = SFNS; /* 其他情况,说明不支持的子功能,设置NRC 0x12 */ 
			} 
		 ELSE 
 			responseCode = IMLOIF; /* 如果最小长度不满足,设置NRC 0x13 */ 
 		ENDIF 
 		suppressPosRspMsgIndicationBit = (A_PDU.A_Data.Parameter1 & 0x80); /*获取正响应抑制位信息, 0x00或者0x80 */ 
 		IF ( (suppressPosRspMsgIndicationBit) && (responseCode == positiveResponse) && (“not yet a NRC 0x78 response sent”)) THEN 
 		/* 如果抑制正响应,而且要求的是回复正响应,并且没有发送过0x78 */ 
 			suppressResponse = TRUE; /* 抑制正响应标记为TRUE */ 
 		ELSE 
 		suppressResponse = FALSE; /* 否则,抑制正响应标记为Falise*/ 
 		ENDIF 
 		BREAK; 
 	CASE Service_without_sub-function: /*如果服务不包含子功能 */ 
 		suppressResponse = FALSE; /* 抑制响应的标志初始化为False */ 
 		IF (message_length == expected_message_length) THEN 
 			IF (A_PDU.A_Data.Parameter1 == supported) THEN /* 如果消息长度支持,服务支持*/
				responseCode = positiveResponse; /* 正响应消息,NRC设置为无效的否定相应码*/
 			ELSE 
 				responseCode = ROOR; /* 如果参数不支持,设置NRC 0x31 */ 
 			ENDIF 
 		ELSE 
 			responseCode = IMLOIF; /* 如果长度不满足,设置NRC 0x13 */ 
 		ENDIF 
 		BREAK; 
 	DEFAULT: 
 		responseCode = SNS; /* 如果服务不支持,设置NRC 0x11 */ 
 	} 
IF (A_PDU.TA_type == functional && ((responseCode == SNS) ¦¦ (responseCode == SFNS) ¦¦ (responseCode == SNSIAS) ¦¦ 
(responseCode == SFNSIAS) ¦¦ (responseCode == ROOR)) &&(“not yet a NRC 0x78 response sent”)) THEN 
 /* 如果是功能寻址,否定响应是以上几个,且没有发送过0X78 */ 
 ············
ELSE
 IF (suppressResponse == TRUE) THEN /* 否则,如果抑制正响应*/ 
 ·········
 ELSE /* 发送响应 */ 
 ······
 ENDIF
 ······ 
ENDIF

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/163844.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java集合大总结——List的简单使用

List简单介绍 鉴于Java中数组用来存储数据的局限性,我们通常使用java.util.List替代数组List集合类中元素有序、且可重复,集合中的每个元素都有其对应的顺序索引。JDK API中List接口的实现类常用的有:ArrayList、LinkedList和Vector。 List…

五、Linux目录结构

1.基本介绍 1.Linux的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录"r/",然后在此目录下再创建其他的目录。 2.深刻理解linux树状文件目录是非常重要的 3.记住一句经典的话:在Linux世界里,一切皆文件…

asp.net智能考试系统VS开发sqlserver数据库web结构c#编程计算机网页项目

一、源码特点 asp.net 智能考试系统 是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 系统运行视频 https://www.bilibili.com/video/BV1gz4y1A7Qp/ 二、功能介绍 本系统使用Microsoft Visual Studio 201…

4.6每日一题(多元函数的隐函数求导)

三元方程确定的二元函数类型的隐函数 方法一:两边对x求偏导,把y看成常数 注:z可以把x和y同时代入求出答案 方法二:带公式

Linux tc 使用

tc模拟延时丢包等网络故障依赖的内核驱动 /lib/modules/5.15.0-52-generic/kernel/net/sched/sch_netem.ko有些系统并不是默认就安装上该驱动的,如果没有安装该驱动,构造网络故障时会报错。 root:curtis# tc qdisc change dev enp4s0 root netem delay…

油猴脚本(JavaScript)-练手-简单的随机音乐播放器

浅浅的写个简单的随机音乐播放脚本(可移动),注释很详细,直接上源码 效果: // UserScript // name 播放音乐脚本 // namespace 代码对我眨眼睛 // version 1.2 // description 在API上请求音乐链接并随机自动连续播放音乐&…

斯坦福机器学习 Lecture1

https://www.bilibili.com/video/BV1JE411w7Ub?p1&vd_source7a1a0bc74158c6993c7355c5490fc600 笔记如下 机器学习的定义:不需要明确编程就能让计算机去学习做某件事情 另一个定义 TODO:here

【网络】OSI模型 与 TCP/IP模型 对比

一、OSI模型 OSI模型包含7个层次,从下到上分别是: 1. 物理层(Physical Layer) - 功能:处理与电子设备物理接口相关的细节(如电压、引脚布局、同步,等等)。 - 协议:以…

clusterProfiler包学习

&#x1f4d6; Introduction | Biomedical Knowledge Mining using GOSemSim and clusterProfiler (yulab-smu.top) 部分使用 #GO classificationlibrary(clusterProfiler) data(geneList, package"DOSE") gene <- names(geneList)[abs(geneList) > 2]# Entre…

cesium雷达扫描(模糊圆效果)

cesium雷达扫描(模糊圆效果) 1、实现思路 使用ellipse方法加载圆型,修改ellipse中‘material’方法重写自己的glsl来实现当前效果 1、示例源码 index.html <!DOCTYPE html> <html lang="en"><head><!<

常见树种(贵州省):002杉类

摘要&#xff1a;本专栏树种介绍图片来源于PPBC中国植物图像库&#xff08;下附网址&#xff09;&#xff0c;本文整理仅做交流学习使用&#xff0c;同时便于查找&#xff0c;如有侵权请联系删除。 图片网址&#xff1a;PPBC中国植物图像库——最大的植物分类图片库 一、杉木 …

9、传统计算机视觉 —— 边缘检测

本节介绍一种利用传统计算机视觉方法来实现图片边缘检测的方法。 什么是边缘检测? 边缘检测是通过一些算法来识别图像中物体之间,或者物体与背景之间的边界,也就是边缘。 边缘通常是图像中灰度变化显著的地方,标志着不同区域的分界线。 在一张图像中,边缘可以是物体的…

TURN 协议

TURN 地址分配 抓包过程 TURN 连接建立 这里指的是 Client 收到对端从 TURN 分配的 IP 和 端口 &#xff0c;和对端的 TURN 和 IP 绑定的过程 CreatePermission Request 等消息&#xff0c;都会携带有对端的 TURN 和 IP 抓包过程

新手必看!!超详细!STM32-基本定时器

一、基本定时器的作用 定时触发输出直接驱动DAC。 二、基本定时器的框图 以STM32F103系列为例&#xff0c;具体开发板请查看开发手册。 类别定时器总线位数计数方向预分频系数是否可以产生DMA捕获/比较通道互补输出基本定时器TIM6 / TIM7APB116位向上1~65536可以0无通用定时…

五、hdfs常见权限问题

1、常见问题 2、案例 &#xff08;1&#xff09;问题 &#xff08;2&#xff09;hdfs的超级管理员 &#xff08;3&#xff09;原因 没有使用Hadoop用户对hdfs文件系统进行操作。 在Hadoop文件系统中&#xff0c;Hadoop用户相当于Linux系统中的root用户&#xff0c;是最高级别用…

Linux每日智囊-cat, more, less

每日分享三个Linux命令&#xff0c;悄悄培养读者的Linux技能。 cat 作用 在终端显示文件内容 cat命令允许创建单个或多个文件&#xff0c;查看文件的内容&#xff0c;连接文件并在终端或文件中重定向输出。 语法 cat [选项] 文件 参数&#xff1a; -n:显示行数&#xf…

MySQL进阶_8.数据库其他调优策略

文章目录 第一节、数据库调优的步骤1.1、选择合适的DBMS1.2、优化表设计1.3、优化逻辑查询1.4、优化物理查询1.5、使用 Redis 或 Memcached 作为缓存1.6、库级优化 第二节、优化MySQL服务器第三节、优化数据库结构 第一节、数据库调优的步骤 1.1、选择合适的DBMS 如果对事务性…

read系统调用源码分析

文章目录 基本知识前言一个文件基本的读写流程图块设备驱动<1> 块设备&#xff08;blockdevice&#xff09;<2> 块设备结构<3> block_device和gendisk 区别 同步/异步IO请求队列 read系统调用源码分析设计思想一、入口函数&#xff08;1&#xff09;fget_lig…

MySQL 的执行原理(二)

5.3. MySQL 的查询成本 5.3. MySQL 的查询成本 MySQL 执行一个查询可以有不同的执行方案&#xff0c;它会选择其中成本最低&#xff0c;或者 说代价最低的那种方案去真正的执行查询。不过我们之前对成本的描述是非常模 糊的&#xff0c;其实在 MySQL 中一条查询语句的执行成本…

FPGA语法相关知识合集

一.相关概念 1.四种结构说明语句 2.initial 与 always 的异同点 3.task 与 function 的3个不同点 4.task的语法结构(定义及调用) 5.function的语法结构(定义及调用) 6.function 的一个必须有和一个必须没有&#xff0c;使用规则 7.自动&#xff08;递归&#xff09;函数…