前言

在汽车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服务的主体功能:

图1 2F服务功能逻辑

应用场景

2F服务主要针对输入输出控制,列举常见的使用场景如下:

  • 车窗的升降控制;(OutputControl)
  • 直连执行器的启动与停止;(OutputControl)
  • 车灯的开启与关闭;(OutputControl)
  • ADAS相关功能的配置开启与关闭;(InputControl)
  • LED报警灯的驱动与关闭;(OutputControl)

服务请求

所谓服务请求就是客户端(以下统称为Tester)按照UDS协议规范来发送一系列诊断指令,等待ECU(以下统称为Server)响应的过程。

请求格式

如下图2所示,Tester需要按照以下的格式要求来发送至Server:

图2 2F服务诊断请求格式

诊断请求格式中包含四大部分:

  • SID: 诊断服务2F的标识符;

  • DataIdenfier: 服务请求受控cs所分配的DID;

  • ControlOptionRecord: 表示控制模式及控制的相关参数组成的数据集;

    • IOCP: 控制模式;
    • CS:需要被控制的参数;
  • controlEnableMaskRecord: 若CS参数个数超过1个时,此时可以使用CM来实现对不同参数的控制,但只有1个CS参数时,则不应该使用CM参数,否则会回复NRC13表示请求的长度不满足要求。

控制参数(IOCP)

控制参数IOCP是一种控制输入输出的控制模式,如下图3所示,有以下4种控制模式:

图3 IOCP定义与说明

在使用4个参数时,需注意以下两点内容:

  • IOCP参数并不是2F服务的子服务,2F服务没有子服务,这点要明确;
  • 在使用00 ,01,02时,诊断请求不需要加入受控参数controlState参数以及enable Mask,只需执行诊断请求 2F + DID +Byte Number,但其诊断回复还是要带有该DID所控制的参数的值;
  • IOCP中的4个参数并不是都需要支持,取决于客户需要,一般而言,00,03都会支持,其余两项可选;
请求实例
1. 单参数控制

以控制发动机进风门位置为例,以DID(9B00)控制该参数,转化关系为:Air Inlet Door Position [%] = decimal(Hex) × 1 [%]。

Tester请求控制该参数值达到0x3C,发送指令如下图4所示:

图4 2F服务诊断请求示例(单一参数)

其中,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中的对应关系展示如下:

图5 controlEnableMask 控制参数对应表

这里以仅控制IAC参数为例,由上可知,按照bitMap关系,可得出此时的controlEnableMask为0x80,即下图6所示:

图6 2F服务多参数请求实例

在执行2F服务多参数请求,有以下几点内容需要注意:

  • 受控的第1个参数必须对应controlEnableMask的最高位,其余参数按照排列顺序逐位类推;
  • 当仅需要控制某个参数或多个参数时,controlEnableMask中未置位的对应参数的值将不会受到控制;

服务响应

服务响应表示的是Server接收到来自Tester的诊断请求之后,按照UDS诊断规范回复的诊断响应。

响应格式

如下图7所示,Server的诊断响应格式(positive response)如下:

图7 2F服务诊断响应格式

诊断响应由以下

  • Response SID: Positive Response SID = request SID + 0x40 (即0x2F + 0x40 = 0x6F);
  • Data Identifier: 与诊断请求一致的DID;
  • **ControlOptionRecord:**表示控制模式及控制的相关参数组成的数据集;
    • IOCP: 与诊断请求相同;
    • CS: 与诊断请求的控制参数相同,其顺序也应当一致;

相比诊断请求,我们会发现2F服务的诊断响应中不会包含controlEnableMask,无论诊断请求是否包含Mask。有时候测试的过程中容易犯这个错误,所以在此提个醒,防止翻车。

正响应实例

1.单参数控制

在上述诊断请求中,使用DID(0x9B00)来控制进气门参数,Server回复的正响应格式如下图8所示:

图8 2F服务诊断响应示例

可见,进气门的控制是一个渐变的过程,达到诊断请求设定的值需要一定的时间,所以此时给到的正响应并不是设定的值,而是当前的实时值,此时便可以通过22服务不断去读取该DID是否达到了诊断请求的值。

2.多参数控制

当控制参数为多个时,针对如上所述的2F服务多参数请求,相应的诊断响应如下图9所示:

图9 2F服务多参数诊断响应

针对2F服务的多参数请求,诊断响应的参数值无论是否被请求控制,都应该给出实时值,只不过受控参数IAC的值应最终与请求的值相同而已。

负响应NRC支持

有时候,由于诊断请求中的长度不对,准入条件不满足等原因,并不是每次诊断请求都会回复正响应。

因此为了识别到到底是哪类错误,UDS统一用**NRC(Negative Response Code)**来表征所有诊断服务使用的错误类型,以便于更好的定位并排查问题,且所有的诊断服务都会存在负响应,。

那么对于2F服务负响应的格式如下:

诊断服务负响应格式: 0x7F + Request SID + NRC

以此类推,2F服务诊断服务负响应: 0x7F + 0x2F + NRC

UDS定义NRC为导致当前诊断服务无法正常进行的原因。对于2F支持的NRC有哪些呢,请看如下表1所示:

表1 2F服务NRC支持

上述列出的NRC并不是需要全部支持,取决于具体的使用场景及客户需求。

比如以下场景:

  • 若没有为2F服务设置使能条件,那么就不需要NRC22,反之若支持NRC22,必须列出相应的使能条件;
  • 若请求的DID并不需要安全解锁,那么就不需要支持NRC33,反之若支持NRC33,则至少存在一个DID在执行2F服务时需要安全解锁,NRC34同理;
  • NRC13, NRC31则必须支持;
  • 当多种错误同时发生时,UDS协议规定了NRC的优先级,具体细节可查看IS014229-1标准文档。
  • NRC优先级如下图10所示,可用于测试参考验证;

图10 2F服务NRC优先级


往期精彩:
AUTOSAR基础篇之BswM

AUTOSAR基础篇之Event

UDS之时间参数总结篇

AUTOSAR基础篇之FiM

深夜码字不易,恳请多多点赞,关注,转发,收藏!

更多精彩内容,敬请关注微信公众号“ADAS与ECU之吾见”! 扫码轻松关注:

公众号后台回复关键字“加群”,便可免费加入AUTOSAR技术交流群,共同探讨CP,AP,SOA,信息与功能安全等前言热点话题!


UDS服务基础篇之2F相关推荐

  1. UDS服务基础篇之22

    UDS诊断服务基础篇之22 前言 22服务作为诊断服务种的基础服务,可以简单理解为就是一个用于读取ECU数据的外部接口,可实时获取软件内部的相关的状态信息. 鉴于本文是基础入门介绍,小T还是会问下大家 ...

  2. UDS服务基础篇之28

    前言 首次,请教大家关于诊断服务28的几个问题: 28服务有何作用,为什么要有28服务呢? 28服务在使用过程中有哪些注意事项呢? 28服务诊断请求与诊断响应如何交互? 这篇,我们来一起探索并回答这些 ...

  3. [RHEL7基础篇-2] 文本编辑器、基础命令与SSH服务

    [RHEL7基础篇-2] 文本编辑器.基础命令与SSH服务 文本编辑器 kwrite与gedit vi与vim vi的三种模式 Linux基础命令 帮助命令 基础命令 SSH服务 SSH安装与管理 安 ...

  4. 【从零开始学Skynet】基础篇(九):调试控制台服务

    Skynet自带了一个调试控制台服务debug_console,启动它之后,可以查看节点的内部状态. 1.启用调试控制台 (1)在skynet/examples目录下新建main_console.lu ...

  5. Linux基础篇——Linux进程、服务管理

    文章目录 1. 什么是进程 2. Linux下进程与执行者的关系(多人多任务环境) 3. 工作(Job)管理 3.1 将指令丢到后端执行 & 3.2 将目前的工作暂停 Ctrl+z 3.3 j ...

  6. java版spring cloud+spring boot 社交电子商务平台(二)Eureka(服务注册和服务发现基础篇)

    一:Eureka简介 Eureka是Spring Cloud Netflix的一个子模块,也是核心模块之一.用于云端服务发现,一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移. ...

  7. Java基础篇--设计模式

    目录 前言 设计模式 创建型模式 单例模式 工厂方法模式 抽象工厂模式 建造者模式 原型模式 结构型模式 适配器模式 桥接模式 组合模式 装饰模式 外观模式 亨元模式 代理模式 行为型模式: 访问者模 ...

  8. 诊断通讯模块Dcm的UDS服务概述

    诊断通讯模块Dcm的UDS服务概述_SOA开发者的博客-CSDN博客 0 引言 故障诊断系统中,诊断通讯管理模块(Diagnostic Coummunication Management,Dcm)主要 ...

  9. JavaSE笔记(语法基础篇)

    文章目录 语法基础篇 第1章 概述 1.1 计算机组成部分 1.2 人机交互方式 1.3 计算机语言 1.4 软件与软件开发 1.5 Java语言介绍 1.6 Java开发环境搭建 1.7 常见错误 ...

最新文章

  1. Installshield 2010 中集成. Net framework4 与 vc++ 2010运行安装包
  2. python 常用内置函数_python常用内置函数使用|python基础教程|python入门|python教程...
  3. 成田机场坐access到品川_@马大哈们:北京有三座机场了,以后订票别选错哦!大兴机场今试飞...
  4. Swift之深入解析Xcode13对Swift对象生命周期的优化
  5. EL在java里的意义
  6. vue封装axios接口
  7. 前端学习(2731):重读vue电商网站41之自定义格式化时间的全局过滤器
  8. [模板]洛谷T3379 最近公共祖先(LCA) 倍增+邻接表
  9. P2872 [USACO07DEC]Building Roads S(最小生成树)
  10. spring+springmvc+hibernate 整合
  11. java 内存 静态_java中内存分配以及static的用法(转)
  12. Linux之at命令
  13. 拉格朗日乘子法 那些年学过的高数
  14. 类成员指针——偏移量
  15. centos 6.5 找回root密码的方法
  16. excel根据数据得出公式
  17. pve万兆网卡驱动_WiFi 6扩展有什么选择?Killer AX1650X无线网卡深度测评
  18. linux14.04镜像,ubuntu14.04 iso镜像下载
  19. 软件测试mysql数据库相关操作
  20. cpua55和a53哪个好_OPPOA55和OPPOA53哪个好-参数对比-更值得入手

热门文章

  1. Python代码实现图像语义分割
  2. 千里之堤,毁于蚁穴----考试系统
  3. 2022-2028全球低电容瞬态抑制二极管行业调研及趋势分析报告
  4. linux 文件修复工具,技术|在 Linux 系统下使用 PhotoRec TestDisk 工具来恢复文件
  5. 智慧电力智能电网解决方案
  6. EasyUI表单验证
  7. catia二次开发:函数是否需要加括号 ,type类型 ,出现未定义变量类型错误,怎么破, 背景色设置 ,检查模块是否封闭 ,几何图形集是否存在某一个元素
  8. 安卓应用安装错误:INSTALL_FAILED_MEDIA_UNAVAILABLE 解决方法
  9. 安卓日记 二 UI组件
  10. 在php中冒泡排序,php中实现快排与冒泡排序