UDS诊断系列之十四 例程控制(31)服务下

3.否定响应

例程控制服务的否定响应,是有子流程的,也就是说在本系列第三篇介绍的主流程之后,有自己的单独的格式和参数检查,ISO标准里的流程截图如下。
在这里插入图片描述
按从上到下的顺序,每一步的检查内容列举如下:

  • Minimum length check:这里最小长度检查包括了SID,SubFunction,RID,最少是4个字节;
  • 第一个NRC31:这里检查在当前诊断会话模式,是否支持请求的RID,这里的RID即routineIdentifier;
  • NRC34:如果服务支持安全传输,这里检查安全传输的验证结果是否通过;
  • NRC33:如果DID支持安全校验,这里检查安全校验服务是否已经验证通过;
  • NRC12:这里校验请求里的子功能是否支持;
  • Total length check:总长度检查,即包括SID,SubFunction,RID,routineControlOptionRecord的总长度,routineControlOptionRecord的长度依据RID而定;
  • 第二个NRC31:当检查逻辑执行到这里的时候,主要检查的是routineControlOptionRecord参数是否在RID定义的有效范围内;
  • NRC22:NRC22有两个,第一个检查的是请求的服务和子功能的执行条件是否满足,第二个检查的是请求数据的执行条件是否满足;
  • NRC24:31服务的子功能是有顺序的,即停止例程的请求必须是在开始例程的后面请求才可以,请求例程的执行结果也必须在开始例程之后才被允许,否则回复此NRC。

如果上面的检查内容都检查通过了,则回复肯定响应。

4.子功能

例程控制服务只有三个有效子功能,其他的都是保留值,其定义对应的就是上篇提到的三个功能。

子功能定义
01开始例程,即开始执行请求的例程
02停止例程,即停止执行请求的例程
03请求例程结果,即要求服务端响应请求的例程的执行结果

三、数据示例

例程控制服务的格式比输入输出控制服务的要简单很多,因此,我只摘抄一个示例进行说明。
下图示例为请求开始执行例程,可以看到请求里的子功能字节是1,之后是被请求的RID。给出的示例中请求是不带数据的,因此到RID就结束了,而有些例程是需要请求带数据的,如进行CRC校验的时候需要客户端发送CRC结果给服务端,然后服务端才能跟自己计算的结果进行比较,这时候就需要将CRC结果放到RID后面发送出去。
响应的routineControlType跟子功能保持一致是1,在RID之后加上了该RID需要的数据,这个数据的OEM或者供应商根据实际内容定义的。
在这里插入图片描述
以下是系列链接:
UDS诊断系列之十三 例程控制(31)服务 上

UDS诊断系列链接汇总

  • 9
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ChenglimK

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值