首 页文档资料下载资料维修视频汽修在线平台
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 汽车技术 > 汽车电器
汽车控制模块掉线问题的分析与解决
来源:汽车电器  作者:佚名  2019-01-22 13:41:09

    3 解决方案
    试验场再次出现DDM模块掉线,我们将故障时的数据记录到了DFLASH中,并在发送COM初始后,故障恢复,将故障时的数据读出,进行数据还原。在COM中,发送报文的处理由一个内部函数,_com-process_ empty tx slots实现。该函数处于COM的临界区中,执行时需要关闭中断,防止意外的代码重入。
    根据问题现象分析、故障节点内存提取、台架问题复现实验等一系列的手段,节点丢失的根本原因已经定位:函数s_com_process_empty tx_slots执行到某段位置时被函数s_com_connect node中断,造成COM内部报文发送标志处理流程异常,无法被清除。此时若再发生帧模式切换请求(调用函数s_com_setee fmd) 、COM将会由于发送标志存在无法正常切换帧模式,进入只能接收不能发送的状态,即实验车上发现的节点丢失现象。函数s_com_process_emp-ty_tx_slots中的临界代码见图1。

    节点在临界区调用s_com_connect_node的原因是发生了bus-off事件,而bus-off处理代码在软件中的运行时机为立即执行(在中断中进行处理)。节点在bus-off事件发生时的处理代码见图2。

    发生问题的临界区代码执行时间为微秒级,根据初步估算小于1μs,而正巧在此时发生一次bus-off的概率极低,导致该问题非常难以捕捉,只有长时间行车才能提高其发生的频率。
    根据其根本原因,该问题有以下2种解决方案:①增加临界区保护代码(实现COM提供的中断操作回调函数);②将bus-offer理代码置于任务上下文中执行。
    保证函数s_com_process_empty-tx-slots在执行时不会被s_com_connect_node中断,从而解决因此导致的节点丢失问题。
    将程序重新规划,对于以前不合理及导致此次问题的COM模块接口均进行了优化,ECU唤醒后重新初始COM模块,确保ECU起来后COM模块的内存中的数据不会出现异常;将原程序在中断处理中调用的s_dirnm_tx_process、s_dlrnm rx_process、s_dirnm_can_error从中断中移走,在中断中设置标识,在任务中查询标识后调用;增加中断保护功能,在关键的操作处理过程中不允许中断打断;查询COM模块的Pending状态,如果持续Pending超过5s,重新初始化COM模块,确保故障能恢复。
    通过对试验车辆的长期跟踪,模块未再次发生掉线问题,证明了我们分析的合理性和程序修订的可靠性。

    4 结论
    随着现代汽车功能的复杂性的提高,汽车电子控制模块的数量也越来越多,需要通信的信号也相应增多,CAN总线通信是现在汽车中主流的信号通信方式,可满足现代汽车信号交互的需求。但是CAN总线通信模块在设计过程中,出现模块掉线的情况很多。掉线的情况又各种各样,增加了分析的难度。本文通过对总线掉线的各种情况展开分析,有效解决了试验过程中的掉线问题,对后续其他CAN总线模块的设计具有借鉴参考价值。
 

上一页  [1] [2] [3] 

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)

推荐阅读

Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:101,152.30000 毫秒