• 200查看
  • 0回复

[应用层软件] UDS的那些服务-控制IO的$2F服务

[复制链接]


该用户从未签到

发表于 3-3-2024 09:21:29 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


点击蓝字 关注我们

UDS的那些服务-控制IO的F服务w1.jpg

      作为硬件开发的工程师,在开发的后期总面临着一个问题,那就是将产品导入到产线。而产线上有一个必不可少的步骤就是下线测试,下线检测的目的是检测硬件是否完全达到我们的设计目标,最直观的一个方式就是将硬件的所有IO口都进行一下检测,对输入口的采样功能、精度、占空比、误差各项内容进行检测,对输出口的驱动功能,包括驱动的电流大小,驱动的逻辑,以及对通讯口的通讯功能进行测试。

总之就是对所有硬件涉及到的端口进行遍历,保障硬件是一个合格的产品。

对于某些较为复杂的控制器,在工厂出货的时候是要求带ASW出货的,对于这种控制器,下线测试的方法比较多,有些是在软件中开辟出来一小块区域,专门用于存放下线检测程序的,当激活这个程序的时候,控制器的IO口会按照一定的规则进行遍历。另外一种方式就是通过2F服务来调用相应的IO口进行控制。也就是这个里面说的2F服务。



2F服务

ECU本质上来讲是一个根据外围输入信息作出判断然后进行输出、控制的单元。作为控制器,我们可以通过2F服务给某一个输入信号进行赋值,也可以通过2F服务进行某个输出信号的控制。
2F命令的格式如下:
UDS的那些服务-控制IO的F服务w2.jpg
2F服务的request由以上4部分组成,分别是:1、SID,也就是2F2、dataIdentifier,用于标识被控制的IO对象,与DID是类似的用途,是2个字节3、inputOutputControlParameter,可以理解为2F的子服务4、controlEnableMaskRecord,这是一个可选参数,用于定义被控制的IO口的物理参数


子服务
其中,UDS明确定义了四种inputOutputControlParameter,也就是4种不同的子服务。0x00 returnControlToECU (将控制权还给ECU,即结束控制)0x01 resetToDefault (将dataIdentifier所引用的输入信号、内部参数、输出信号等设为默认值)0x02 freezeCurrentState(将dataIdentifier所引用的输入信号、内部参数、输出信号等冻结住)0x03 shortTermAdjustment (将dataIdentifier所引用的输入信号、内部参数、输出信号进行设置,其实就相当于开始了对ECU的控制)。对于2F服务中定义的DID,是可以通过之前介绍的22服务来读取其中内容的,返回值就是被控制的IO的物理参数。



举个例子
同样来举几个例子介绍一下2F服务怎么用,其实在ISO14229中讲解完每个服务都带一些例子,我就直接从里面摘抄出来标准中的理解,简要的解释一下好了。标准中的例子是发动机怠速engine at idle speed。对于这个物理量,它的DID是01 32,物理量的含义是期望怠速转速=decimal(Hex)*10[r/min]。首先看一下01子服务:

请求为 04 2F 01 32 01 00 00 00

正响应为 05 6F 01 32 01 4B 00 00
请求的是将怠速置为默认值,ECU回复的正响应格式2F+0x40,01 32为DID,4B对应的十进制为75,则默认的转速已经置为75*10=750r/min。再看看02子服务:
请求为 04 2F 01 32 02 00 00 00

正响应为 05 6F 01 32 02 50 00 00
与上面的类似,参数从4B变为50,也就是将当前发动机怠速转速固定在80(16进制50对应十进制80)*10=800r/min。最后再看看03子服务:03子服务是用的比较多的,用于短暂的接管ECU,也就是通过03子服务,我们可以强行给对应的DID进行赋值:在ISO14229标准中的例子:
请求为 05 2F 01 32 03 64 00 00

正响应为 05 6F 01 32 03 52 00 00
这个03服务的请求就是将发动机的怠速转速提升到64(HEX)*10=100*10=1000r/min。但正响应的发动机怠速转速是52(HEX)*10=820r/min。这是因为发动机怠速转速上升需要一定的时间,在这个2F服务正响应的时候,发动机的怠速转速还没有上升到1000r/min,只是从800r/min上升到了820r/min。同样,我们也可以通过22服务读取这个DID当前的状态,命令如下:
请求 03 22 01 32 00 00 00 00

正响应 04 62 01 32 64 00 00 00
也就是过一会之后,我们通过22服务读取到发动机怠速已经上升到1000r/min了。最后,我们再来调用00服务,将控制权交还给ECU。
请求:04 2F 01 32 00 00 00 00

正响应:05 6F 01 32 00 62 00 00
这时候发动机的转速下降到了62(HEX)*10=980r/min。以上就是2F服务最最最简单的例子和用途,基本上对于下线检测是足够的,标准中还提到一些复杂用法的例子,说实话我没太看懂,也没用过,就不瞎说了,高手自然也不会看到这里。


负响应
负响应:当然对于2F服务,也有对应的负响应,2F支持的负响应有13 22 31 33这四个。在之前的文章中都是有提到的。

UDS的那些服务-控制IO的F服务w3.jpg



总结
对于UDS的服务,通过四篇文章将常用的一些服务进行了介绍和学习,自己也从中收获不少,温习一下,包括读写DID的22,2F服务,包括读取和擦除故障码的19,14服务,还包括诊断会话的10服务,以及这里提到的2F服务,后面我计划学习一下基于UDS的刷写,bootloader的基本原理。很多时候这些知识在不了解的时候总觉得高不可攀,但一旦静下心来学习,还是能够掌握的。

往期推荐

UDS的那些服务-控制IO的F服务w4.jpg

1

UDS的基本概念-从入门开始

2

UDS的那些服务—DID、DTC都是怎么来的?

3

UDS的那些服务-$10诊断会话

4

BMS系列(2)——SHUNT、HALL、磁通门

觉得有用点击右下角在看↓   

UDS的那些服务-控制IO的F服务w5.jpg

快速发帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 1-2-2025 10:58 , Processed in 0.237251 second(s), 32 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.