[AutoSar]BSW_Diagnostic_006 RoutineControl (0x31)的配置和实现


  

关键词

嵌入式、C语言、autosar、OS、BSW、UDS、diagnostic

平台说明

项目Value
OSautosar OS
autosar厂商vector
芯片厂商TI
编程语言C,C++
编译器HighTec (GCC)
autosar版本4.3.1
参考文档TechnicalReference_Dcm.pdf AUTOSAR_SRS_DiagnosticLogAndTrace.pdf AUTOSAR_SWS_DiagnosticCommunicationManager.pdf AUTOSAR_SWS_DiagnosticEventManager.pdf AUTOSAR_SWS_FunctionInhibitionManager.pdf- 【14229-1.2.3】,【15765-1.2.3.4】. 【11898】

在这里插入图片描述
  
  
>>>>>>>>>>>>>>>>>>>>>>>>>回到总目录<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

  
  

缩写描述
DEMDiagnostic Event Manager
DETDevelopment Error Tracer
DDMDiagnostic Data Modifier
DCMDiagnostic Communication Manager
LSBleast significant byte
MSBmost significant byte
DIDData dentifier
DSDDiagostic Service Dispatcher (submodule of the DCM module)
DSLDiagostic Session Layer (submodule of the DCM module)
DSPDiagostic Service Processing (submodule of the DCM module)
ResDataresponse Data
ReqDatarequest Data

背景

  项目已经导入过CDD文件,有基础的的DSD,DSL,DSP配置。 可以通过编写CDD文件实现本文的功能,这里将手动配置。
  以0X0201为例,需要配置0x1,0x2,0x3subfunction,data长度为1个byte。

一、配置DcmDspRoutineInfos

  
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
注意:请别把ResData和ReqData弄反了。

二、配置DcmDspRoutines

  
在这里插入图片描述

三、创建一个ASWC

  在davinci developer中创建一个ASWC 用于所有诊断相关的服务操作。这里创建CtDiagHandler,保存同步到CFG中,然后**关闭davinci developer软件。不关闭会导致在cfg中mapping失败**

在这里插入图片描述

四、mapping DCM port

  
在这里插入图片描述
在这里插入图片描述

五、生成代码

  

5.1.在设置中勾选生成.c模板

在这里插入图片描述

5.2 生成模块

在这里插入图片描述

六、code

  在CtDiagHandler.c中:
生成相应代码

FUNC(Std_ReturnType, CtDiagHandler_CODE) RoutineServices_Routine_Request_to_Switch_Night_light_0201_Start(P2CONST(Dcm_StartDataIn_Routine_Request_to_Switch_Night_light_0201_ReqDataArrayType, AUTOMATIC, RTE_CTDIAGHANDLER_APPL_DATA) ReqData, Dcm_OpStatusType OpStatus, P2VAR(Dcm_StartDataOut_Routine_Request_to_Switch_Night_light_0201_ResDataArrayType, AUTOMATIC, RTE_CTDIAGHANDLER_APPL_VAR) ResData, P2VAR(Dcm_NegativeResponseCodeType, AUTOMATIC, RTE_CTDIAGHANDLER_APPL_VAR) ErrorCode) /* PRQA S 0624, 3206 */ /* MD_Rte_0624, MD_Rte_3206 */
{
/**********************************************************************************************************************
 * DO NOT CHANGE THIS COMMENT!           << Start of runnable implementation >>             DO NOT CHANGE THIS COMMENT!
 * Symbol: RoutineServices_Routine_Request_to_Switch_Night_light_0201_Start (returns application error)
 *********************************************************************************************************************/

  return RTE_E_OK;

/**********************************************************************************************************************
 * DO NOT CHANGE THIS COMMENT!           << End of runnable implementation >>               DO NOT CHANGE THIS COMMENT!
 *********************************************************************************************************************/
}
}

6.1 添加自定义代码

  
注意如果该routine触发后台其他异步操作,可以返回DCM_E_PENDING ,dcm将会再次触发该routine,在p2*时间返回0x78报文。

# define DCM_E_PENDING                                               ((Std_ReturnType)10)         /*!< Invoked callout (operation) needs to be called again */
FUNC(Std_ReturnType, CtDiagHandler_CODE) RoutineServices_Routine_Request_to_Switch_Night_light_0201_Start(P2CONST(Dcm_StartDataIn_Routine_Request_to_Switch_Night_light_0201_ReqDataArrayType, AUTOMATIC, RTE_CTDIAGHANDLER_APPL_DATA) ReqData, Dcm_OpStatusType OpStatus, P2VAR(Dcm_StartDataOut_Routine_Request_to_Switch_Night_light_0201_ResDataArrayType, AUTOMATIC, RTE_CTDIAGHANDLER_APPL_VAR) ResData, P2VAR(Dcm_NegativeResponseCodeType, AUTOMATIC, RTE_CTDIAGHANDLER_APPL_VAR) ErrorCode) /* PRQA S 0624, 3206 */ /* MD_Rte_0624, MD_Rte_3206 */
{
/**********************************************************************************************************************
 * DO NOT CHANGE THIS COMMENT!           << Start of runnable implementation >>             DO NOT CHANGE THIS COMMENT!
 * Symbol: RoutineServices_Routine_Request_to_Switch_Night_light_0201_Start (returns application error)
 *********************************************************************************************************************/
Std_ReturnType      u_RetVal                = DCM_E_NOT_OK;

  uint8 ligth_status = *ReqData;

  switch (OpStatus)
  {
    case DCM_INITIAL:

      if(( NULL == ReqData )||( NULL == ResData ))
      {
          
        /* (void)Det_ReportError(, , , );*/
      }
      else
      {
        if(0x1u == ligth_status)
        {
          /*open ligth*/
        }
        else
        {
          /*close ligth*/
        }
        
      u_RetVal = DCM_E_OK;


      }

    break;

    case DCM_PENDING:
     

    break;


  }
   

  
  return u_RetVal;




  return RTE_E_OK;

/**********************************************************************************************************************
 * DO NOT CHANGE THIS COMMENT!           << End of runnable implementation >>               DO NOT CHANGE THIS COMMENT!
 *********************************************************************************************************************/
}

  
  
>>>>>>>>>>>>>>>>>>>>>>>>>回到总目录<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

  
  

配置AUTOSAR架构中的RTA BSW模块的OBD(On-Board Diagnostics)功能时,需要遵循一系列详细的步骤来确保系统能够正确地支持车辆诊断需求。OBD是汽车电子系统中用于故障诊断报告的重要组成部分,尤其在满足法规要求方面具有关键作用。 ### 配置概述 OBD功能主要通过BSW(Basic Software)模块实现,包括但不限于`Dcm`(Diagnostic Communication Manager)、`Dem`(Diagnostic Event Manager)、`Fim`(Function Inhibition Manager)等模块。这些模块共同协作以支持完整的OBD功能[^1]。 #### 1. 确定OBD需求 在开始配置之前,首先需要明确项目的OBD需求,这通常基于OBD-II或EURO IV/V/VI等标准。例如: - 支持哪些PID(Parameter ID)请求 - DTC(Diagnostic Trouble Code)定义及存储策略 - 通信协议(如ISO 14230、ISO 15765-3) #### 2. 配置Dcm模块 `Dcm`模块负责处理诊断通信层,其配置主要包括: - **服务支持**:启用与OBD相关的诊断服务,如`ReadDataByIdentifier` (0x22) `ClearDiagnosticInformation` (0x14)[^1] - **会话模式**:设置默认会话扩展诊断会话(Extended Session),以便访问OBD相关数据[^1] - **安全访问**:对于某些受保护的数据读取或操作,可能需要配置安全访问机制[^1] ```xml <!-- 示例XML片段,展示Dcm配置 --> <Dcm> <SessionLayer> <DefaultSession> <SupportedServices>22,14</SupportedServices> </DefaultSession> <ExtendedSession> <SupportedServices>22,14,27</SupportedServices> </ExtendedSession> </SessionLayer> </Dcm> ``` #### 3. 配置Dem模块 `Dem`模块管理所有与诊断事件相关的信息,包括DTC的记录、状态管理冻结帧数据的采集。关键配置项包括: - **DTC定义**:为每个潜在故障点分配唯一的DTC编号,并定义其严重性级别[^1] - **冻结帧支持**:启用对冻结帧数据的支持,以便在发生故障时捕获相关环境信息[^1] - **老化计数器**:配置DTC的老化逻辑,用于确定何时清除已解决的故障码[^1] ```xml <!-- 示例XML片段,展示Dem配置 --> <DEM> <DtcList> <Dtc id="P0100" severity="Error" description="Mass or Volume Air Flow Circuit Malfunction"/> <Dtc id="P0300" severity="Error" description="Random/Multiple Cylinder Misfire Detected"/> </DtcList> <FreezeFrameSupport>true</FreezeFrameSupport> <AgingCounterEnabled>true</AgingCounterEnabled> </DEM> ``` #### 4. 配置Fim模块(可选) 如果项目中有多个ECU协同工作,并且存在相互依赖的功能抑制关系,则可以使用`Fim`模块来管理这些抑制条件。虽然不是OBD直接必需的部分,但在复杂系统中它有助于提高诊断一致性[^1]。 #### 5. 集成与测试 完成上述配置后,需将各模块集成到整个AUTOSAR软件栈中,并进行充分的测试验证。测试应涵盖以下方面: - **基本通信**:确保诊断工具可以通过CAN/LIN等总线与ECU建立连接并发送命令 - **数据读取**:验证是否能正确读取预设的PID值DTC列表 - **故障模拟**:人为引入故障并检查系统能否正确检测并记录相应的DTC - **清除故障码**:测试清除DTC的功能是否正常工作 ### 注意事项 - 在配置过程中,务必参考所使用的AUTOSAR平台文档,因为不同供应商提供的BSW模块可能会有不同的参数选项限制。 - OBD功能的实现往往涉及大量底层硬件交互,因此需要密切配合MCAL(Microcontroller Abstraction Layer)团队进行寄存器级调试。 - 对于特定车型或市场的OBD要求,还需要额外关注当地法规的具体规定,比如美国EPA或欧洲WLTP的相关规范[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老灰╮(╯-╰)╭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值