Autosar Dcm开发-诊断报文请求网络管理报文的实现方法-基于ETAS软件

前言

在客户需求中,需要实现当ECU处于非网络休眠状态,诊断请求将触发ECU网络请求而维持网络通信,在诊断响应完成后释放上述网络请求。该功能在Autosar中有对应实现。本文介绍ETAS软件中的实现路径。

Autosar定义

在Dcm标准中,有如下需求定义:
在这里插入图片描述
当ActiveDiagnostic处于DCM_COMM_ACTIVE,Dcm收到诊断请求激活时,会调用ComM_DCM_ActiveDiagnostic,使对应的网络的ComM进入Full Communication状态.之后Ecu就会主动发送网络管理报文,用来维持网络通信

ETAS代码实现

知道了标准中定义的函数接口ComM_DCM_ActiveDiagnostic,直接在代码中搜索相关函数调用
在这里插入图片描述
Dcm_ActiveDiagnosticState_en默认初始化为DCM_COMM_ACTIVE,在上层dcm中有接口函数Dcm_SetActiveDiagnostic设置是否激活该功能

Std_ReturnType Dcm_SetActiveDiagnostic(boolean active)
{
    /* Multicore: No lock necessary as its an atomic operation .
     * Also, the application has to take care of calling Dcm_SetActiveDiagnostic() before Dcm calls CheckActiveDiagnostics from RxIndication. */
    /*Check if the data active parameter is set to True to call ComM_DCM_ActiveDiagnostic()*/
   if(active != FALSE)
   {
       Dcm_ActiveDiagnosticState_en = DCM_COMM_ACTIVE;
   }
   else
   {
       Dcm_ActiveDiagnosticState_en = DCM_COMM_NOT_ACTIVE;
   }
   return(E_OK);
}

对应工具中的配置接口为
在这里插入图片描述
可以在应用SWC建立对应的Rport,map后即可调用该接口来开启或关闭该功能。因为默认是开启的,所以不需要使用该接口即可实现对应功能。

诊断协议栈中收到诊断报文,会进行调用Dcm_CheckActiveDiagnosticStatus函数进行判断

void Dcm_CheckActiveDiagnosticStatus(uint8 dataNetworkId)
{
    /* Check the diagnostic state is active, then call the ComM_DCM_ActiveDiagnostic*/
    if(Dcm_ActiveDiagnosticState_en == DCM_COMM_ACTIVE)
    {
        ComM_DCM_ActiveDiagnostic(dataNetworkId);
    }
}

当Dcm_ActiveDiagnosticState_en为DCM_COMM_ACTIVE即调用ComM_DCM_ActiveDiagnostic进行请求网络

激活后置位DiagnosticRequestState_b,当diagnosticRequestState_b为TRUE时,ActiveRequest_b置TRUE,即可进行主动请求网络的动作。

总结

诊断报文请求网络管理报文的功能,在Autosar标准协议栈中应该都是默认支持的。但是项目之前的应用软件错误调用了Dcm_SetActiveDiagnostic接口,导致功能无法实现。所以,任何不清楚目的的函数调用,都要格外小心,有可能导致一个bug!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

赞哥哥s

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

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

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

打赏作者

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

抵扣说明:

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

余额充值