当前位置: 首页 > java >正文

CAPL -实现SPRMIB功能验证

系列文章目录

抑制肯定响应消息指示位(SPRMIB)
二十一、CANdelaStudio深入-SPRMIB的配置


文章目录

  • 系列文章目录
  • 一、SPRMIB是什么?
  • 二、SetSuppressResp(long flag)
  • 三、GetSuppressResp


一、SPRMIB是什么?

正响应:表示请求已成功处理。
负响应:表示请求未能成功处理,通常伴随有NRC错误码。//比如发送 10 01 接收到 50 01 是正响应
在某些场景下,正响应抑制功能允许发送方要求 ECU 不返回正响应消息,而是保持静默.
只在遇到问题时返回负响应(比如符合NRC,就回响应的NRC CODE)。
这种机制通过设置 UDS 请求中的一个标志位来实现,称为 Suppress Positive Response Indication Bit。

Suppress Positive Response Message Indication Bit(SPRMIB),抑制肯定响应消息指示位是在Subfunction这个字节的最高位,我们把它叫做肯定响应抑制位。只有服务支持Subfunction的时候,才有可能支持肯定响应抑制位,当肯定响应抑制位置1的时候,要求所有的肯定响应的抑制将不再发送。当肯定响应抑制位为0的时候,肯定响应是不被抑制的。这里要注意的是它只是抑制肯定响应,而否定响应是不被抑制的。

SPRMIB是汽车诊断通信(如 UDS,统一诊断服务)中的一种机制,用于抑制或阻止 ECU(电子控制单元)在收到诊断请求后发送正响应的功能。

  1. 在 UDS 服务请求中,有一个位称为 Suppress Positive Response Bit,如果设置了该位,ECU 会抑制正响应消息的发送。
  2. 如果请求成功且该位被设置,ECU 将不发送正响应消息。
  3. 如果请求失败,即使设置了该位,ECU仍会返回负响应,告知诊断工具操作失败的原因。

二、SetSuppressResp(long flag)

设置“suppressPosRspMsgIndicationBit”的值
返回值情况:1:设置成功;0:未设置或请求中无此bit位

三、GetSuppressResp

查询指定的诊断请求 req 中的抑制正响应位是否已设置。
1:表示抑制正响应位已设置。
0:表示该位未使用或未设置。

diagGetSuppressResp 和 diagSetSuppressResp 函数用于在 UDS(统一诊断服务)协议中操作 suppressPosRspMsgIndicationBit(抑制正响应消息指示位)。在某些诊断请求中,可以设置该位来抑制 ECU 的正响应。如果设置了该位,接收方不会发送正响应。通过这些函数,可以查询或设置该位。

//测试10 01的正响应抑制
testcase testSpres1(){diagRequest ECU.DefaultSession_Start SendRequest;//定义一个报文 10 01diagResponse * Response;//定义一个诊断接收long ReturnNRC=0x00; //nrc 返回结果testCaseTitle("Case","10 01正响应抑制功能测试");SendRequest.SetSuppressResp(1); // 设置抑制正响应 发出来是10 81testReportWriteDiagObject(SendRequest);//将发送的内容打印出来,方便后续分析ret=SendRequest.SendRequest();//发送响应//获取是否有正响应抑制// 检查是否成功设置了抑制正响应位if (diagGetSuppressResp(SendRequest) == 1) {write("抑制正响应位已成功设置");} else {write("未设置抑制正响应位");}p2Timeout=diagGetP2Timeout(2);p2Timeout_extend=diagGetP2Extended(2);//获取系统定义的参数值testWaitForTimeout(50);//延时50ms再发送请求,以免频繁发送造成问题ret=SendRequest.SendRequest();//发送报文ret=testWaitForDiagRequestSent(SendRequest,500);//最多等500毫秒,诊断发送if(0==ret){testStepFail("Result","诊断发送超时");}else{ret=testWaitForDiagResponse(SendRequest,DiagResponseTimeout);//等待超时时间if(ret){Response.GetLastResponse();//获取响应诊断数据testReportWriteDiagObject(Response);ReturnNRC=Response.GetResponseCode();if(Response.IsPositiveResponse())//如果为正响应即失败{testStepFail("Result","正响应抑制,但收到对应的正响应回应与预期不符");}else//如果收到负响应 是符合预期的,但需人工介入检查反回是否符合要求{testStepPass("Result","正响应抑制,但收到负响应");}   }else//超时没有收到响应,即为正常情况{testStepPass("Result","正响应抑制,超时未收到响应,符合预期");}}
}
http://www.xdnf.cn/news/5491.html

相关文章:

  • 《操作系统真象还原》第十四章(1)——文件系统概念、创建文件系统
  • 写屏障和读屏障的区别是什么?
  • 思维链是仅仅通过提示词实现的吗
  • Java对象的内存分布(二)
  • Python训练营打卡——DAY22(2025.5.11)
  • UGMathBench动态基准测试数据集发布 可评估语言模型数学推理能力
  • Maven 中的 pom.xml 文件
  • Mind Over Machines 公司:技术咨询与创新的卓越实践
  • redis存储结构
  • UOJ 164【清华集训2015】V Solution
  • 【C语言】程序的预处理,#define详解
  • 用于文件上传的MultipartFile接口
  • Go语言实现优雅关机和重启的示例
  • 自然语言处理 (NLP) 入门:NLTK 与 SpaCy 的初体验
  • 『 测试 』测试基础
  • nanodet配置文件分析
  • 快速理解动态代理
  • 锚定基础与拥抱融合:C 语言在编程教育与技术社区的破圈之路
  • 长短期记忆网络(LSTM)深度解析:从理论到实践的全方位指南
  • 初探函数使用
  • L1 第9次课 数组进阶
  • 大数据从专家到小白
  • MCP 通信机制:stdio vs SSE
  • 项目过程中使用vant组件使用踩坑记录
  • 【Bootstrap V4系列】学习入门教程之 组件-媒体对象(Media object)
  • Nginx的增强与可视化!OpenResty Manager - 现代化UI+高性能反向代理+安全防护
  • 无人甘蔗小车履带式底盘行走系统的研究
  • 语音合成之十三 中文文本归一化在现代语音合成系统中的应用与实践
  • 【Java学习笔记】instanceof操作符
  • 隐式/显式类型转换?编程语言的类型转换?其它类型转换成数值类型?其它类型转换成字符串?类型转换?