【CANOE】【学习】【诊断功能】正响应抑制

在这里插入图片描述


文章目录

  • 一、正响应抑制是什么?
  • 二.什么背景下产生
  • 三.作用
  • 四.如何实现
  • 五.capl代码如何实现
  • 总结
  • diagGetSuppressRes 相关函数
      • **Function Description**
      • **Syntax**
      • **Method (Dynamic)**
      • **Functionality**
      • **Parameters**
      • **Return Values**
      • **Availability**
      • **Example**
      • **Note**

一、正响应抑制是什么?

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

二.什么背景下产生

在正常情况下,ECU 接收到诊断请求后,会返回两种可能的响应:

正响应:表示请求已成功处理。
负响应:表示请求未能成功处理,通常伴随有错误码。
比如发送 10 01 接收到 50 01 是正响应

然而,在某些场景下,正响应抑制功能允许发送方要求 ECU 不返回正响应消息,而是保持静默,只在遇到问题时返回负响应(比如符合NRC,就回响应的NRC CODE)。这种机制通过设置 UDS 请求中的一个标志位来实现,称为 Suppress Positive Response Indication Bit。

三.作用

  • 1提高通信效率:在批量发送请求时,不需要每个请求都返回正响应,从而减少通信开销
  • 2节省带宽:对于一些无关紧要的操作,可以选择不让 ECU 返回确认,减少网络负载
  • 3减少不必要的信息:某些诊断操作无需得到每次的确认,可以通过抑制正响应来简化处理

四.如何实现

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

五.capl代码如何实现

diagRequest myRequest; // 创建一个诊断请求对象
myRequest.SetSuppressResp(1); // 设置抑制正响应 通过这个就会发送出现了

举例:

UDS 协议中的正响应抑制功能通过在请求消息的 子功能字节 上设置最高位(bit 7)来实现。这个位被称为 Suppress Positive Response Bit,当它被设置为 1 时,表示请求 ECU 抑制正响应。

0x01 是只功能,把他的最高位的自己bit 7 置为1 ,就标识 ECU 抑制正响应。bit7   bit0
0x01 = 0000 0001
0x81=  1000 0001

在做正响应抑制的时候,需要参考 诊断调差表

  • 1.如果是不支持正响应抑制的,发送会报NRC的错误
  • 2.各个厂商可能不一样。

总结

这边写一个脚本实现对应正响应抑制支持的脚本capl:


//测试10 01 的正响应抑制
testcase testSpres1(){diagRequest ECU.DefaultSession_Start SendRequest;//定义一个报文 10 01diagResponse * Response;//定义一个诊断接收long ReturnNRC=0x00; //nrc 返回结果testCaseTitle("Case","10 01正响应抑制功能测试");//testCaseDescription("发送10 81的正响应 然后不应该接收到任何响应");//DisplayStepComment("发送10 81的正响应 然后不应该接收到任何响应",0);SendRequest.SetSuppressResp(1); // 设置抑制正响应 发出来是10 83testReportWriteDiagObject(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);//等待超时时间
//      DisplayStepComment("诊断请求已经发出,并开始等待相应的响应,如有,并检测响应的类型",0);if(ret){Response.GetLastResponse();//获取响应诊断数据testReportWriteDiagObject(Response);ReturnNRC=Response.GetResponseCode();if(Response.IsPositiveResponse())//如果为正响应即失败{testStepFail("Result","正响应抑制,但收到对应的正响应回应与预期不符");}else//如果收到负响应 是符合预期的,但需人工介入检查反回是否符合要求{testStepPass("Result","正响应抑制,但收到对应的正响应回应与预期相符");}   }else//超时没有收到响应,即为正常情况{testStepPass("Result","正响应抑制,超时未收到响应,符合预期");}}}

diagGetSuppressRes 相关函数

以下是你提供的 diagSetSuppressRespdiagGetSuppressResp 函数的详细解析,以富文本格式呈现:


Function Description

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


Syntax

long diagGetSuppressResp (diagRequest req);long diagSetSuppressResp (diagRequest req, long flag);

Method (Dynamic)

diagRequest::GetSuppressResp ();diagRequest::SetSuppressResp (long flag);

Functionality

  • diagGetSuppressResp:查询指定的诊断请求 req 中的抑制正响应位是否已设置。
  • diagSetSuppressResp:设置或清除指定诊断请求 req 中的抑制正响应位。

Parameters

  • req:诊断请求对象。
  • flag
    • 0:清除抑制正响应位。
    • 非 0 值:设置抑制正响应位。

Return Values

  • diagGetSuppressResp

    • 1:表示抑制正响应位已设置。
    • 0:表示该位未使用或未设置。
  • diagSetSuppressResp

    • 返回值为 1 表示成功设置,返回值为 0 表示该请求不使用该位或未成功设置。

Availability

  • 5.1 版本以来,在 测量设置仿真/测试设置 中可用,且在 在线模式 下使用。
  • 7.0 SP5 版本以来支持 动态方法
  • diagGetSuppressResp9.0 版本中可用。

Example

没有具体的例子提供,但可以参考以下示例来使用 diagSetSuppressRespdiagGetSuppressResp

// 发送带抑制正响应的诊断请求
diagRequest req;
diagSetSuppressResp(req, 1);  // 设置抑制正响应位// 查询该请求的抑制正响应位是否已设置
if (diagGetSuppressResp(req) == 1) {write("抑制正响应位已设置");
} else {write("未设置抑制正响应位");
}

Note

调用 diagSetSuppressResp 函数后,诊断对象的大小会被重置为诊断描述中定义的大小。因此,如果需要,应该在调用 diagSetSuppressResp 后调用 diagResize 函数来调整对象的大小。


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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

纯血鸿蒙系统 HarmonyOS NEXT自动化测试实践

1、测试框架选择 hdc:类似 android 系统的 adb 命令,提供设备信息查询,包管理,调试相关的命令ohos.UiTest:鸿蒙 sdk 的一部分,类似 android sdk 里的uiautomator,基于 Accessibility 服务&…

基于vue3实现的聊天机器人前端(附代码)

<template><div class"container"><!-- 页面头部 --><header><h1>跟它说说话吧&#xff01;</h1><p>一个活泼的伙伴&#xff0c;为你提供情感支持&#xff01;</p></header><!-- 聊天容器 --><div c…

【赵渝强老师】Redis的RDB数据持久化

Redis 是内存数据库&#xff0c;如果不将内存中的数据库状态保存到磁盘&#xff0c;那么一旦服务器进程退出会造成服务器中的数据库状态也会消失。所以 Redis 提供了数据持久化功能。Redis支持两种方式的持久化&#xff0c;一种是RDB方式&#xff1b;另一种是AOF&#xff08;ap…

qt QFileSystemModel详解

1、概述 QFileSystemModel是Qt框架中的一个关键类&#xff0c;它继承自QAbstractItemModel&#xff0c;专门用于在Qt应用程序中展示文件系统的数据。这个模型提供了一个方便的接口&#xff0c;使得开发者可以轻松地在应用程序中集成文件和目录的树形结构&#xff0c;并通过视图…

ThingsBoard规则链节点:Push to Edge节点详解

引言 1. Push to Edge 节点简介 2. 节点配置 2.1 基本配置示例 3. 使用场景 3.1 边缘计算 3.2 本地数据处理 3.3 实时响应 4. 实际项目中的应用 4.1 项目背景 4.2 项目需求 4.3 实现步骤 5. 总结 引言 ThingsBoard 是一个开源的物联网平台&#xff0c;提供了设备管…

JavaScript 实现文本转语音功能

全篇大概2000 字&#xff08;含代码&#xff09;&#xff0c;建议阅读时间10分钟。 引言 我将向大家展示如何使用 JavaScript 和 Web Speech API 快速实现一个“文本转语音”的 Web 应用。通过这个教程&#xff0c;你将了解如何让浏览器将输入的文本朗读出来。 预览效果 一、…

动态规划理论基础和习题【力扣】【算法学习day.25】

前言 ###我做这类文档一个重要的目的还是给正在学习的大家提供方向&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;&#xff09;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非常非常高滴&am…

Linux的基本指令(一)

1.ls指令 功能&#xff1a;对于目录&#xff0c;该命令列出该目录下的所有子目录与文件。对于文件&#xff0c;将列出文件名以及信息。 常用选项&#xff1a; -a列出目录下的所有文件&#xff0c;包括以 . 开头的隐含文件。 -l列出文件的详细信息 举例&#xff1a; rooti…

智能化健身房管理:Spring Boot与Vue的创新解决方案

作者介绍&#xff1a;✌️大厂全栈码农|毕设实战开发&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 &#x1f345;获取源码联系方式请查看文末&#x1f345; 推荐订阅精彩专栏 &#x1f447;&#x1f3fb; 避免错过下次更新 Springboot项目精选实战案例 更多项目…

【Vue】简易博客项目跟做

项目框架搭建 1.使用vue create快速搭建vue项目 2.使用VC Code打开新生成的项目 端口号简单配置 修改vue.config.js文件&#xff0c;内容修改如下 所需库安装 npm install vue-resource --save --no-fund npm install vue-router3 --save --no-fund npm install axios --save …

Hadoop简介及单点伪分布式安装

目录 1. 大数据2. Hadoop简介3. Hadoop伪分布式安装4. Hadoop启动参考 1. 大数据 大数据的定义&#xff1a;一种规模大到在获取、存储、管理、分析方面大大超出传统数据库软件工具能力范围的数据集合。   特征&#xff1a;   1.海量的数据规模   2.快速的数据流转   3.…

windows server2019下载docker拉取redis等镜像并运行项目

一、基本概念 1、windows server 指由微软公司开发的“Windows”系列中的“服务器”版本。这意味着它是基于Windows操作系统的&#xff0c;但专门设计用于服务器环境&#xff0c;而不是普通的桌面或个人用户使用。主要用途包括服务器功能、用户和资源管理、虚拟化等 2、dock…

使用最新版的wvp和ZLMediaKit搭建Gb28181测试服务器

文章目录 说明安装1.安装nodejs简介安装步骤 2.安装java环境3.安装mysql安装修改密码 4.安装redis5.安装编译器6.安装cmake7.安装依赖库8.编译ZLMediaKit9.编译wvp-GB28181-pro 配置1.ZLMediaKit配置2.wvp-GB28181-pro配置2.1.配置ZLMediaKit连接信息2.2.28181服务器的配置2.3.…

Python程序设计 生成器

1. 基础概念 在讲迭代之前&#xff0c;先搞清楚这些名词&#xff1a; 循环&#xff08;loop&#xff09;&#xff0c;指的是在满足条件的情况下&#xff0c;重复执行同一段代码。比如&#xff0c;while 语句。迭代&#xff08;iterate&#xff09;&#xff0c;指的是按照某种…

mac m1 docker本地部署canal 监听mysql的binglog日志

mac m1 docker本地部署canal监听mysql的binglog日志(虚拟机同理) 根据黑马视频部署 1.docker 部署mysql 1.docker拉取mysql 镜像 因为m1是arm架构.需要多加一条信息 正常拉取 docker pull mysql:tagm1拉取 5.7的版本. tag需要自己指定版本 docker pull --platform linux/x…

[linux]docker基础

常见命令 Docker最常见的命令就是操作镜像、容器的命令&#xff0c;详见官方文档: Docker Docs 案例: 查看DockerHub&#xff0c;拉取Nginx镜像&#xff0c;创建并运行Nginx容器 在DockerHub中搜索Nginx镜像 拉取Nginx镜像 查看本地镜像列表 把镜像保持到本地 查看保持命令的…

C++builder中的人工智能(10)神经网络中的Sigmoid函数

在这篇文章中&#xff0c;我们将探讨最受欢迎的激活函数之一——Sigmoid函数。我们将解释什么是Logistic函数&#xff0c;以及它与Sigmoid函数的区别&#xff0c;并展示如何在C应用中使用这些函数。 目录 人工神经网络&#xff08;ANN&#xff09;中的激活函数是什么&#xff…

cursor:如何注销帐号和使用流量

点击右上角的设定图标 点击管理 在弹出的网页点登入 点”continue" 点SETING 了解最新信息请扫码关注&#xff1a;

如何选择适合小团队的项目管理工具?免费与开源软件推荐

目录 一、小团队项目管理工具的重要性 二、热门项目管理工具介绍 &#xff08;一&#xff09;禅道 &#xff08;二&#xff09;Trello &#xff08;三&#xff09;Asana &#xff08;四&#xff09;JIRA 三、免费项目管理软件推荐 &#xff08;一&#xff09;ES 管理器 …

Scaffold-ETH 2:颠覆传统开发的区块链神器,快速构建你的去中心化应用!

目录 引言一、Scaffold-eth框架二、前期准备三、搭建Scaffold-ETH 2&#xff08;一&#xff09;使用npx create-ethlatest进行设置&#xff08;二&#xff09;使用git clone进行设置1、克隆仓库&#xff1a;2、进入到此目录3、安装依赖项 四、配置Scaffold ETH-2的开发环境&…