在汽车ECU诊断服务开发的过程中,有很多常见的诊断服务,比如10, 11, 22, 2E等,但是对于2F服务则会显得有些陌生,因为这类诊断服务主要在车身域比较常见,比如车窗控制,传感器开关、执行器控制等。除此以外,在其他车身域也有不同程度的使用,只不过相对较少。
接下来,让我们带着下列思考一起来了解一下这个较为神秘的2F服务吧!
2F服务是做什么的呢?
它的诊断服务请求及回复是怎样一种方式?
与31服务Routine Control相比,又有什么区别呢?
这篇,我们来一起探索并回答这些问题。为了便于大家理解,以下是本文的主题大纲:
UDS诊断服务协议都以ISO标准ISO14229-1来集中体现,如需了解其他更多诊断服务的精彩使用,可以参考此文档,本文以**ISO14229-1(2020)**协议作为参考来解读2F服务。
2F服务作为输入输出控制服务,其全称为InputOutControlByIdentifier。该服务是用于client主动请求server去对相关输入输出信号进行控制。所谓的输入输出控制简而言之就是屏蔽实际的输入输出信号值,取而代之的是client主动以某种特定的控制方式去设置这些信号值。
2F服务会对所需要受控的信号进行编组,同时分配一个特定的DataIdentifier(即DID)来实现1个或多个信号参数的控制。但有时发送2F诊断服务时我们不需要对所有信号进行控制,那么此时我们可以引入controlEnableMask来实现只对特定信号的控制,后文会举出实例来体现该参数的使用。
有小伙伴们在此会发问了,虽然可以对信号进行控制,但是怎么知道软件内部有没有真正的起作用呢。
别着急,此时要引入一个新的服务22(ReadDataByIdentifier),该服务可以通过信号所在的DID去获取对应的数值,然后与2F请求设置的数值比较是否相同,进而便可以知道2F控制是否生效。
本文不会对22服务展开,只会提到其基本使用,具体细节可参考上文提到的协议标准。也就意味着支持2F的DID必然支持22服务,反之则不然。
一般而言,2F服务主要用于较为简单的输入输出控制,而更为复杂的输入输出控制使用31(Routine Control)服务则更为合适。
如下图1所示,较为清晰的描述了2F服务的主体功能:
2F服务主要针对输入输出控制,列举常见的使用场景如下:
所谓服务请求就是客户端(以下统称为Tester)按照UDS协议规范来发送一系列诊断指令,等待ECU(以下统称为Server)响应的过程。
如下图2所示,Tester需要按照以下的格式要求来发送至Server:
诊断请求格式中包含四大部分:
SID: 诊断服务2F的标识符;
DataIdenfier: 服务请求受控cs所分配的DID;
ControlOptionRecord: 表示控制模式及控制的相关参数组成的数据集;
controlEnableMaskRecord: 若CS参数个数超过1个时,此时可以使用CM来实现对不同参数的控制,但只有1个CS参数时,则不应该使用CM参数,否则会回复NRC13表示请求的长度不满足要求。
控制参数IOCP是一种控制输入输出的控制模式,如下图3所示,有以下4种控制模式:
在使用4个参数时,需注意以下两点内容:
以控制发动机进风门位置为例,以DID(9B00)控制该参数,转化关系为:Air Inlet Door Position [%] = decimal(Hex) × 1 [%]。
Tester请求控制该参数值达到0x3C,发送指令如下图4所示:
其中,0x2F为诊断请求SID,0x9B00为受控参数的DID,0x03为表示开启对该参数的控制,0x3C表示控制该参数的值达到0x3C。
有时候,当不断使用22服务去检查是否达到请求设定的值时,会发现并没有立马达到,因为有时候受控过程本身就是一个逐渐变化的过程,所以只要经过一定的合理时间并最终达到设定的值,那么就没有问题。
2.多参数控制
当受控参数超过1个时,此时我们有必要引入controlEnableMask来实现对不同受控参数的自由控制。
其基本原理就是将对应参数与controlEnableMask的bit位进行一对一Mapping,若bit位为1,则表明对应的参数将受控,若为0,则表明对应的参数不受控。
如下图5所示,DID(0x0155)控制了5个参数:IAC,RPM,PPA,PPB,EGR。这5个参数在controlEnableMask中的对应关系展示如下:
这里以仅控制IAC参数为例,由上可知,按照bitMap关系,可得出此时的controlEnableMask为0x80,即下图6所示:
在执行2F服务多参数请求,有以下几点内容需要注意:
服务响应表示的是Server接收到来自Tester的诊断请求之后,按照UDS诊断规范回复的诊断响应。
如下图7所示,Server的诊断响应格式(positive response)如下:
诊断响应由以下
相比诊断请求,我们会发现2F服务的诊断响应中不会包含controlEnableMask,无论诊断请求是否包含Mask。有时候测试的过程中容易犯这个错误,所以在此提个醒,防止翻车。
1.单参数控制
在上述诊断请求中,使用DID(0x9B00)来控制进气门参数,Server回复的正响应格式如下图8所示:
可见,进气门的控制是一个渐变的过程,达到诊断请求设定的值需要一定的时间,所以此时给到的正响应并不是设定的值,而是当前的实时值,此时便可以通过22服务不断去读取该DID是否达到了诊断请求的值。
2.多参数控制
当控制参数为多个时,针对如上所述的2F服务多参数请求,相应的诊断响应如下图9所示:
针对2F服务的多参数请求,诊断响应的参数值无论是否被请求控制,都应该给出实时值,只不过受控参数IAC的值应最终与请求的值相同而已。
有时候,由于诊断请求中的长度不对,准入条件不满足等原因,并不是每次诊断请求都会回复正响应。
因此为了识别到到底是哪类错误,UDS统一用**NRC(Negative Response Code)**来表征所有诊断服务使用的错误类型,以便于更好的定位并排查问题,且所有的诊断服务都会存在负响应,。
那么对于2F服务负响应的格式如下:
诊断服务负响应格式: 0x7F + Request SID + NRC。
以此类推,2F服务诊断服务负响应: 0x7F + 0x2F + NRC。
UDS定义NRC为导致当前诊断服务无法正常进行的原因。对于2F支持的NRC有哪些呢,请看如下表1所示:
上述列出的NRC并不是需要全部支持,取决于具体的使用场景及客户需求。
比如以下场景:
往期精彩:
AUTOSAR基础篇之BswM
AUTOSAR基础篇之Event
UDS之时间参数总结篇
AUTOSAR基础篇之FiM
深夜码字不易,恳请多多点赞,关注,转发,收藏!
更多精彩内容,敬请关注微信公众号“ADAS与ECU之吾见”! 扫码轻松关注:
公众号后台回复关键字“加群”,便可免费加入AUTOSAR技术交流群,共同探讨CP,AP,SOA,信息与功能安全等前言热点话题!
文章浏览阅读718次。Git作为一个版本控制工具,在工作中我们常常会用到它,尤其是在移动开发中,Git可谓是版本管理神器。下面让我们来认识一下Git:Git是一个分布式版本控制软件,它是由Linux的作者Linus用C写的一个分布式版本控制系统。如果大家对Git的历史比较感兴趣,可以点击链接进入官网了解:A Short History of GitGit主要特点有如下:1、速度:Git在本地上保存着所有
文章浏览阅读154次。编者按:用数据将传统餐饮门店信息搬到线上,大众点评兴起;以数据化为基础,餐饮门店经营实现移动化,点单、叫号、排队模式火了。目前,餐饮行业的数据应用更多在供应链管理和餐饮门店运营状况实时监控分析,每个餐饮商家各自为战,实际数据的应用比大数据的应用更多,而大数据更多用于用户画像和少数大企业的经营管理。不过,基于大数据在电商的应用和餐饮的发展趋势,大数据的应..._如何获得每个城市的餐饮大数据
文章浏览阅读584次。好记性不如烂笔头问题描述 Activity 延时显示 Dialog ,在显示之前, Activity 已经销毁 报错 Unable to add window -- token android.os.BinderProxy@e6ee7d8 is not valid; is your activity running?问题分析 错误信息很明确,是没有 token 导致的. 而 toke_token not valid
文章浏览阅读3.9k次。源码及论文:源码及论文下载:http://www.byamd.xyz/tag/java/开发计划1. 甘特图2. 开发计划简述如图所示在项目初期阶段,首先开始需求调研。需求调研阶段,我们将首先根据初期的会议内容考虑市场需求以及基本的市场现状,并根据以上的内容设计问卷来寻找痛点。我们准备使用第三方问卷工具,以电子问卷的方式来进行调查。初步预计会收到200份问卷。在需求调查阶段,同时开展对同类型的网站的评估工作。进入初步的需求分析阶段。目标是取得现有电影购票网站的基本购票流程,并对其交互等
文章浏览阅读3k次。异常的处理
文章浏览阅读510次。ASP.NET Core微服务实战系列 原文:ASP.NET Core微服务实战系列 希望给你3-5分钟的碎片化学习,可能是坐地铁、等公交,积少成多,水滴石穿,码字辛苦,如果你吃了蛋觉得味道不错,希望点个赞,谢谢关注。前言 这里记录的是个人奋斗和成长的地方,该篇只是一个系列目录和构想,并没有完全真正开弓。之所以有这个题目,是..._微服务 asp.net core
文章浏览阅读406次。SSL 是需要申请证书的,key和PEM文件要放到服务器路径。然后NGINX下要进行443端口和80端口的绑定。server { listen 80; server_name ietaiji.com www.ietaiji.com; root "D:/aaa/WWW/ietaiji"; index index.html_nginx 和 http无法同时启动
文章浏览阅读1.3w次,点赞9次,收藏60次。service与systemctl关系梳理开机启动梳理_linux service
文章浏览阅读194次。在数据中心里,光模块毫不起眼,当我们在高谈阔论各种数据中心高大上技术时,很少提及到光模块。不过,光模块却是数据中心的必需品,哪个数据中心也离不开光模块,而且需要的数量还不少,一块48端口网络设备就需要48个光模块,而一台框式网络设备通常有数百个端口,这些端口如果都使用上就需要数百个光模块,这样算起来数据中心需要的光模块数量是惊人的。数据中心在进行网络投资..._光模块 占 数据中心 成本
文章浏览阅读596次,点赞2次,收藏3次。SocketChannel简述及demoJAVA NIO之SocketChannel1. 简述2. 特点3. 解决问题4. demo功能5. 工作原理6. 代码示例7. 涉及知识扩充JAVA NIO之SocketChannel1. 简述NIO(Non-blocking I/O,在Java领域,也称为New I/O),是一种同步非阻塞的I/O模型,也是I/O多路复用的基础,已经被越来..._niosocketchannel
文章浏览阅读3.8k次。场景在docker下使用tzselect设置时间,最后提示编辑profile追加TZ='Asia/Shanghai'; export TZvim/etc/profilesource /etc/profile发现时区正确了,但时间和宿主机相差几分钟....使用 ntpdate cn.pool.ntp.org同步时间提示ntpdate[534]: step-systime: Operation not permitted使用 ntpdate ntp.s..._step-systime: operation not permitted
文章浏览阅读537次,点赞18次,收藏6次。如果不具备关于复杂元器件的安全故障比例的详细信息,可假定安全故障的保守比例为50%,并假定通过内部自检和外部看门狗(表中的安全机制SM4)达到对违背安全目标的总体覆盖率为90%。这里的意图不是一定需要全面的分析,比如要求对于微控制器内或者来自于一个复杂的PCB板上任何理论可能的信号组合的桥接故障进行详尽的分析。根据硬件故障对安全目标产生影响的不同,硬件故障可分为安全相关故障与非安全相关故障,其中安全相关故障又进一步分为单点故障、残余故障、多点可探测故障、多点可感知故障、多点潜伏故障与安全故障。