目录
往期推荐
- ETAS工具链自动化实战指南<一>
- ETAS工具链自动化实战指南<二>
- ETAS工具链自动化实战指南<三>
- AUTOSAR工程师必读:Artop的核心功能
- Vector工具链自动化实战指南<一>
- isolar高手秘籍| ECU Configuration三分钟速成!
- 掌握核心步骤:RTA-BSW以太网配置全解析
- 一文详解TC399 CAN MCAL 配置
- LSL常见应用场景及示例<一>
- LSL常见应用场景及示例<二>
- LSL常见应用场景及示例<三>
- 为什么Autosar钟情arxml而非json?大揭秘!
UDS(统一诊断服务) 0x2F服务,即“InputOutputControlByIdentifier”,是一种用于汽车诊断的服务,允许客户端(通常是诊断工具或测试设备)对电子系统中的输入信号和输出控制进行操作。
通常,该服务用于相对简单(例如,静态)的输入替代/输出控制,而如果需要更复杂的输入替代/输出控制,则使用Routine Control。
0x2F服务概览
功能描述
-
-
输入信号替换:允许客户端替换电子系统中某个输入信号的值。例如,可以通过此服务将传感器的读数替换为指定的值。
-
内部服务器功能替换:允许客户端替换或修改电子控制单元(ECU)内部的某些功能。
-
强制输出控制:允许客户端强制设置电子系统中执行器的值。例如,可以通过此服务将执行器的状态设置为指定的值,如设置发动机的某种状态。
-
请求和响应
-
-
请求:请求消息包含了要替换的信号标识符、替代值或控制指令。
-
响应:响应消息确认操作是否成功,或者在失败时提供错误信息。
-
应用场景
1.测试和验证:
-
功能验证:在汽车开发和测试阶段,使用该服务可以模拟不同的输入信号和输出控制,以验证系统在各种条件下的行为。
-
故障注入:可以通过替换信号值来测试系统对故障的响应,确保系统能够正确处理异常情况。
2.诊 断和维护:
-
故障排除:当车辆出现故障时,可以使用该服务来手动控制和测试系统的各个部分,以帮助诊断问题。
-
服务模式:在车辆保养和维修时,可以使用该服务来进行系统的调试和校准。
3.开发和调试:
-
开发阶段:在开发新的ECU或功能时,开发人员可以使用此服务来模拟输入信号和控制输出,以验证新功能的实现。
-
调试:在软件开发过程中,可以使用此服务对系统进行详细调试,检查输入输出的处理是否正确。
4.支持负面回应
-
-
不支持子函数 – 0x12
-
消息长度不正确或格式无效 – 0x13
-
条件不正确 – 0x22
-
请求超出范围 – 0x31
-
安全访问被拒绝 – 0x33
-
总之,UDS 0x2F服务在汽车电子系统的开发、测试、维护和诊断中扮演着重要的角色,提供了对电子系统输入输出的精确控制能力。以下示例展示如何在RTA-BSW中配置IO控制以使能以下服务:
-
FreezeCurrentState(冻结当前状态)
-
ResetToDefault(重置为默认)
-
ShortTermAdjustment(短期调整)
-
ReturnControlToECU(将控制返回给ECU)
-
ReadData(读取数据)
前提条件
-
安装RTA-CAR工具链
-
已经为基本服务配置了DCM,并且通信协议已经配置完毕
-
熟悉Autosar 方法论和UDS协议
配置步骤
Dcm配置
首先,必须在DcmDsdServices表中配置该服务。进入Dcm > DcmConfigSet > DcmDsd > DcmDsdServiceTable,然后右键点击DcmDsdServices。选择“Create DcmDsdService”。下面的示例截图显示了所需的配置:
配置一个或多个DID以用于IO控制服务。
进入Dcm > DcmConfigSet > DcmDsp > DcmDspDatas,右键点击DcmDspDatas并选择“Create DcmDspData”。在下面的示例截图中,配置了一个64位(8字节)的UINT8_N(数组)信号,该信号在RTE中为SWC提供了一个同步的client-server port。之后,这个DcmDspData将被DcmDspDidSignal引用。
创建DcmDspDidInfo
如下图所示:进入Dcm > DcmConfigSet > DcmDsp > DcmDspDidInfos,右键点击DcmDspDidInfos并选择“Create DcmDspDidInfo”)。
在这种情况下,该DID不会动态定义,因此在DcmDspDidDynamicallyDefined中选择“false”。
指定为该DID支持的IO控制服务
在这里,指定为该DID支持的IO控制服务。每个项目的服务可能会有所不同,如下只是一个配置示例。
展开DcmDspDidInfo并选择“DcmDspDidControl”。
创建DcmDspDid和DcmDspDidSignals
如下图所示:进入Dcm > DcmConfigSet > DcmDsp > DcmDspDids,右键点击DcmDspDids并选择“Create DcmDspDids”。
输入DID编号(在本例中,将其配置为0xF199)。点击DcmDspDidInfoRef下拉菜单,选择“Show All References...”,在对话框中选择之前创建的DcmDspDidInfo。最终的配置应如下所示:
创建DcmDspDid信号
展开DcmDspDid,然后右键点击DcmDspDidSignals并选择“Create DcmDspDidSignal”。
在某些情况下,可能需要配置多个信号。在这种情况下,可以为每个信号重复上述步骤4,然后创建额外的信号引用。每个信号都需要一个DcmDspDidDataPos和之前创建的DcmDspData的引用。
在本例中,由于只有一个信号,其起始位置将为0。配置如下所示:
至此,IO控制的DCM配置应该已经完成。
生成BSW代码
使用RTA-BSW Code Gen生成BSW代码。
Rte 配置
按照如上步骤成功配置了用于IO控制的DCM模块,接下来必须实现DID的服务器端,以实现之前定义的功能。
在生成BSW后,会创建一个名为Dcm_Cfg_SWCD.arxml的文件。此文件必须集成到RTE项目中,并用于连接到SWC组件、且创建BSW模块实例引用。
查看RTE项目,会在组件下看到列出的DCM服务组件。展开Rport,会看到新创建的服务端口DataServices_DspData_IO_CTRL_F199。
这个R端口使用了DCM生成的接口。
SWC实现该接口的服务器部分。这意味着必须创建或使用现有的软件组件,并添加一个提供5个操作调用事件的Pport以处理来自DCM的请求,当测试仪请求此DID的IO控制服务时,这些操作将被调用。
实现和配置SWC
最后就是实现和配置SWC,将SWC连接到组成中的DCM服务组件,并在代码中实现这些可运行的任务。