结合实例来聊聊UDS诊断中的0x2F服务

news2025/1/4 1:40:38

1、什么是UDS中的0x2F服务

0x2F简单来说,就是输入输出控制服务。先看官方的简绍

翻译如下: 

InputOutputControlByldentifier服务来替换输入信号内部服务器函数和/或强制控制为电子系统的输出(执行器)的值。通常,此服务用于相对简单的(例如静态)输入替换/输出控制,而routineControl用于需要更复杂的输入替换/输出控制。

2、0x2F服务中的5个参数

2.1 、请求PUD中元素的名称、位置、值

2.2 、5个参数的详细解释 

2.3、inputOutputControlParameter 参数ISO规定的几种类型

 

 3、实例分析

现在存在一个项目,需要使用0x2F服务来控制 左前、右前、左后、右后四个车窗的升降。一般来说可以有以下两个设计方案。

从简单到复杂

3.1 为每个车窗单独设定一个DID

为每个车窗单独设定一个DID,inputOutputControlParameter只支持03,和00即可。

**1)左前车窗控制    DID= D001

**2)  右前车窗控制   DID= D002

**3)  左前车窗控制   DID= D003

**4)  左后车窗控制   DID= D004

cdd文件中可以这样定义:

 

诊断请求这样发送:

假设,物理请求地址为0x 701,XX(代表填充数据) ,诊断帧DLC固定为8

0x 701 05 2F D0 01 03 FF(该参数指示的是左前车窗打开到0.1*255=25.5%位置处)  XX XX

这里FF换算关系,0.1*raw不一定合理,建议修改为0.4*raw,这样可以做到100%开启。

FF对应的参数就是controlState参数,按照2.1章节中的描述,可以认为FF=controlState_1。

对controlState补充说明:

规范中对,这个参数并没有作出具体的长度和位数限制,还是以车窗控制为例,controlState参数

可以设置为7bit。当参数= bin 110 0100= dec 100时、就代表车窗全开位置100%。

如果DID控制的是一些,继电器开关,车灯的开关、则controlState选用一个bit即可

3.2 为4个车窗设定一个DID 

具体4个车窗设定一个DID 还可以分为两种情况:

**1)4个车窗设定一个DID,不带controlEnableMaskRecord参数

**2)  4个车窗设定一个DID,存在controlEnableMaskRecord参数

3.2.1、4个车窗设定一个DID,不带controlEnableMaskRecord参数

此时,4个车窗设定一个DID D001 ,可以认为这4个车窗是"控制组"此时就需要给每一个车窗设置一个controlState,可以编号为:

controlState_FL

controlState_FR

controlState_RL

controlState_RR

诊断请求报文如下:

假设,物理请求地址为0x 701,XX(代表填充数据) ,诊断帧DLC固定为8

0x 701 10 08 2F D0 01 03 FF 0A

0x701 21 14 28 XX XX XX XX XX

提取红色部分数据FF 0A 14 28

FF=左前车窗开启25%

0A=右前车窗开启 1%

14=左后车窗开启 2%

28=左后车窗开启 3%

3.2.2、4个车窗设定一个DID,存在controlEnableMaskRecord参数

3.2.1中的设置,存在一个问题,即只能同时控制4个车窗,如果仅仅想只控制一个车窗怎么办?为了解决这个问题,我们就引入了controlEnableMaskRecord参数。

**1)controlEnableMaskRecord参数是什么?

具体到本例子中,我们存在4个车窗需要控制,可以为每一个车窗在controlEnableMaskRecord参数中映射(绑定)一段数据。

说人话,就是,首先我们设置controlEnableMaskRecord=1Byte。然后

对应位置=1,代表开启哪一位的控制。

补充说明;controlEnableMaskRecord14229协议中,也是没有强制规定能占用的长度,需要主机厂在具体项目文件中定义。有同学会说前后左右4个车窗,4个bit就足够了,确实但是一般为了方便以后拓展,都会预留。比如后面D001这个DID还需要去控制4个车门锁的开关,就可以使用了。

报文发送如下:

假设,物理请求地址为0x 701,XX(代表填充数据) ,诊断帧DLC固定为8

0x 701 10 09 2F D0 01 03 01  FF 

0x701 21 0A 14 28 XX XX XX XX 

提取背景标黄的字节01”,代表左前车窗需要,其他车窗不能被控制

FF=左前车窗开启25%

0A=右前车窗不被控制,因为controlEnableMaskRecord参数中已经说明

14=左后车窗不被控制,因为controlEnableMaskRecord参数中已经说明

28=左后车窗不被控制,因为controlEnableMaskRecord参数中已经说明

 3.3 0x2F 诊断请求、诊断回复报文格式

诊断回复报文,是依据inputOutputControlParameter这个参数的不同,来确定回复和请求的格式

3.3.1  inputOutputControlParameter=0时的请求和回复报文

即 ReturnControlToECU,截取的是14229规范中的表格。

先来解释下,inputOutputControlParameter=0时的含义,是指放弃诊断控制输入输出,转到正常状态下控制,所谓的正常状态是指通过CAN报文指令,通过传感器采集信息,来决定控制器的输入和输出!!

关注的点:

**1) inputOutputControlParameter=00时,不存在CountState参数

**2)正响应回复 0x(2F+40),+DID+00(inputOutputControlParameter),但是反馈了一个CountStateRecord参数。这个参数反馈的是该DID对应所控制的输入输出“实时的参数”,比如这个DID控制的是发动机节气门的闭合度,此时3A就代表的是发送此帧响应报文时刻,节气门的闭合度。

3.3.2  inputOutputControlParameter=01 时的请求和回复报文

规范中,并没有直接给出 “ inputOutputControlParameter=01 时的请求和回复报文”的实例,不过也在其他表格出作出了说明:如下图

大家可以参考 inputOutputControlParameter=00,时请求报文和响应报文的格式相同,只需要将请求报文中,和响应报文中的inputOutputControlParameter参数修改=01,即可

3.3.2  inputOutputControlParameter=02 时的请求和回复报文

 3.3.3  inputOutputControlParameter=03 时的请求和回复报文

此时请求报文已经在3.1章节和3.2章节说明过了 ,分为带controlEnableMask参数和不带ControlEnableMask参数两种状态,不在赘述!!!

回复报文,需要注意一点,就算ControlEnableMask没有置位的控制选项,回复时依然要发送实时状态。

4、一些容易被忽视的知识点

1、ControlState设计的顺序和ControlEnableMask的设计顺序要保持一致

如和3.2章节的例子,

ControlState按字节顺序,依次是“左前、右前、左后、右后”

ControlEnableMask从的bit7(严格来说是最高bit位)位依次也要是“左前、右前、左后、右后”

2、ControlState只存在一个参数时,不应该有ControlEnableMask参数

3、一般来说,inputOutputControlParameter参数只需要支持 00 和03。实际项目中并没有很大的需求,必须支持01 和02

4、0x2F并没有子服务,inputOutputControlParameter并不是其子服务,这一点必须知道

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1月第二讲:WxPython跨平台开发框架之图标选择界面

1、图标分类介绍 这里图标我们分为两类,一类是wxPython内置的图标资源,以wx.Art_开始。wx.ART_ 是 wxPython 提供的艺术资源(Art Resource)常量,用于在界面中快速访问通用的图标或位图资源。这些资源可以通过 wx.ArtP…

【弱监督视频异常检测】2024-TCSVT-基于片段间特征相似度的多尺度时间 MLP 弱监督视频异常检测

2024-TCSVT-Inter-clip Feature Similarity based Weakly Supervised Video Anomaly Detection via Multi-scale Temporal MLP 基于片段间特征相似度的多尺度时间 MLP 弱监督视频异常检测摘要1. 引言2. 相关工作A. 分布外检测B. 弱监督视频异常检测C. 多层感知器 3. 方法A. 概述…

C# OpenCV机器视觉:凸包检测

在一个看似平常却又暗藏玄机的午后,阿强正悠闲地坐在实验室里,翘着二郎腿,哼着小曲儿,美滋滋地品尝着手中那杯热气腾腾的咖啡,仿佛整个世界都与他无关。突然,实验室的门 “砰” 的一声被撞开,小…

【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,2-44

文件下载与邀请翻译者 学习英特尔开发手册,最好手里这个手册文件。原版是PDF文件。点击下方链接了解下载方法。 讲解下载英特尔开发手册的文章 翻译英特尔开发手册,会是一件耗时费力的工作。如果有愿意和我一起来做这件事的,那么&#xff…

8.若依系统监控与定时任务

帮助开发者和运维快速了解应用程序的性能状态。 数据监控 定时任务 实现动态管理任务。 需求:每间隔5s,控制台输出系统时间。 新建的任务类必须在指定目录ruoyi-quartz模块下的task包下。 状态设置为启动 执行策略 场景:比如一个任务每个…

【JAVA高级篇教学】第六篇:Springboot实现WebSocket

在 Spring Boot 中对接 WebSocket 是一个常见的场景,通常用于实现实时通信。以下是一个完整的 WebSocket 集成步骤,包括服务端和客户端的实现。本期做个简单的测试用例。 目录 一、WebSocket 简介 1. 什么是 WebSocket? 2. WebSocket 的特…

【YOLO 项目实战】(12)红外/可见光多模态目标检测

欢迎关注『youcans动手学模型』系列 本专栏内容和资源同步到 GitHub/youcans 【YOLO 项目实战】(10)YOLO8 环境配置与推理检测 【YOLO 项目实战】(11)YOLO8 数据集与模型训练 【YOLO 项目实战】(12)红外/可…

Ubuntu开机The root filesystem on /dev/sdbx requires a manual fsck 问题

出现“Manual fsck”错误可能由以下几种原因引起: 不正常关机:如果系统意外断电或被强制重启,文件系统可能未能正确卸载,导致文件系统损坏。磁盘故障:硬盘的物理损坏可能会引发文件系统错误。文件系统配置问题&#x…

RFSOC 47dr Dp口测试(ARM裸机)

47DR 内核还是一个4核A53的MPSOC,测试方式和MPSOC一样 首先设置好BD文件 编译好BIT设置VITIS工程 examle工程测试即可 但是本人硬件会跑飞不知道为何,通过注释掉下图的子函数得以解决 值得注意的是,最好用HP的线,不要用DP转…

protobuf: 通讯录2.1

先引入需要知道的proto3语法: 1.proto3 1.hexdump 作用: hexdump:是Linux下的⼀个⼆进制⽂件查看⼯具,它可以将⼆进制⽂件转换为ASCII、⼋进制、 ⼗进制、⼗六进制格式进⾏查看。 -C: 表⽰每个字节显⽰为16进制和相应的ASCI…

电子应用设计方案81:智能AI冲奶瓶系统设计

智能 AI 冲奶瓶系统设计 一、引言 智能 AI 冲奶瓶系统旨在为父母或照顾者提供便捷、准确和卫生的冲奶服务,特别是在夜间或忙碌时,减轻负担并确保婴儿获得适宜的营养。 二、系统概述 1. 系统目标 - 精确调配奶粉和水的比例,满足不同年龄段婴…

职场常用Excel基础01-数据验证

大家好,excel在职场中使用非常频繁,今天和大家一起分享一下excel中数据验证相关的内容~ 在Excel中,数据验证(Data Validation)是一项非常有用的功能,它可以帮助用户限制输入到单元格中的数据类型和范围&am…

Kubernetes Gateway API-3-TLS配置

1 简介 Gateway API 允许使用多种方式配置 TLS。本文档列出了各种TLS设置,并给出了如何有效使用它们的一般指南。 尽管本文档涵盖了 Gateway API 最常见的TLS配置形式,但某些实现也可能提供特定于实现的扩展,允许不同或更高级形式的TLS配置。除此文档外,值得阅读你所使用…

OpenGL入门最后一章观察矩阵(照相机)

前面的一篇文章笔者向大家介绍了模型变化矩阵,投影矩阵。现在只剩下最后一个观察矩阵没有和大家讲了。此片文章就为大家介绍OpenGL入门篇的最后一个内容。 观察矩阵 前面的篇章当中,我们看到了即使没有观察矩阵,我们也能对绘制出来的模型有一…

3.CSS字体属性

3.1字体系列 CSS使用font-family属性定义文本的字体系列。 p{font-family:"微软雅黑"} div{font-family:Arial,"Microsoft Yahei",微软雅黑} 3.2字体大小 css使用font-size属性定义字体大小 p{ font-size:20px; } px(像素)大小是我们网页的最常用的单…

Spring-kafka快速Demo示例

使用Spring-Kafka快速发送/接受Kafka消息示例代码&#xff0c;项目结构是最基础的SpringBoot结构&#xff0c;提前安装好Kafka&#xff0c;确保Kafka已经正确启动 pom.xml&#xff0c;根据个人情况更换springboot、java版本等 <?xml version"1.0" encoding&qu…

R语言统计分析——自助法BOOTSTRAP(1)

参考资料&#xff1a;R语言实战【第2版】 所谓自助法&#xff0c;即从初始样本重复随机替换抽样&#xff0c;生成一个或一系列待检验统计量的经验分布。无需假设一个特定的理论分布&#xff0c;便可生成统计量的置信区间&#xff0c;并能检验统计假设。 举个例子&#xff1a; 我…

yolo数据集格式(txt)转coco格式,方便mmyolo转标签格式

近期使用mmyolo过程中发现工具自带的yolo2coco.py在转换完数据集格式后&#xff0c;可视化标签的时候会有标签错乱情况&#xff0c;具体原因也没找到&#xff0c;肯定是转换过程代码有问题&#xff0c;于是重新做一份代码直接从yolo数据集转化为coco的json格式。 代码如下&…

sonarqube 安装及使用

一、官网参考地址 相关版本下载地址 配置全局变量 .bash_profileexport SONAR_HOME=/Users/jd/soft/sonar-scanner-6.2.1.4610 export PATH=$PATH:$SONAR_HOME/bin export SQ_HOST=http://127.0.0.1:9000/ export SQ_TOKEN=squ_dbb1913e095a92a727a918a9ba6b1af94b007748二、…

Kafka中的Topic和Partition有什么关系?

大家好&#xff0c;我是锋哥。今天分享关于【Kafka中的Topic和Partition有什么关系&#xff1f;】面试题。希望对大家有帮助&#xff1b; Kafka中的Topic和Partition有什么关系&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 Apache Kafka 中&#…