分享

通信问题:为什么周期Signal值会有抖动?

 开心果NeedCar 2023-06-21 发布于上海

汽车嵌入式开发中,对于实时性要求较高的场景,我们会比较关注信号的时时性。但是,期望有时总是不太遂愿,本文,从一个工程实例出发,讨论一下:"周期信号值抖动的问题"。

1、问题描述

(一)网络拓扑

某个信号(eg:E2E对应的Rolling Counter,以下简称E2E_RC_Signal)由发送节点(Node1)通过CAN总线发送给网关节点(Gateway),网关节点再将其通过Flexray总线路由到接收节点(Node2),路由示意如下所示:

(二)问题详情

在实际的总线监控中,发现两个问题:
问题1:Node1发送E2E_RC_Signal时(对应下图绿色),E2E_RC_Signal偶发不累加,对应下图位置1。实际期望Rolling Counter每个发送周期累加1,累加到14后重置为0。
问题2:Node1正常发送E2E_RC_Signal,但是Gateway路由E2E_RC_Signal时,E2E_RC_Signal偶发不累加,对应下图位置2。
问题1和问题2对应的位置如下所示:

2、原因分析

为什么会出现问题1和问题2呢?

(一)问题1分析

对于问题1,主要问题在于Node1,网关节点只是负责转发Node1的E2E_RC_Signal信号。所以,需要分析Node1的问题。

工况分析如下图:

Node1中,更新E2E_RC_Signal信号的Task和发送E2E_RC_Signal信号的Task周期相同。但是,在Cycle #n+1中,E2E_RC_Signal Update Task执行时间比正常用时长因此使得E2E_RC_Signal的更新时间点推迟。而E2E_RC_Signal Send Task执行时间未受影响,在P3时间点,E2E_RC_Signal对应的PDU(也就是报文)正常发送,因此会使得E2E_RC_Signal值没有更新。

E2E_RC_Signal Update Task执行为什么会超时呢?:当E2E_RC_Signal Update Task的优先级较低时,会被高优先级的任务抢占,也会被中断打断(比如,某一时刻,Node1中断接收了大量的报文)。

(二)问题2分析

问题2中,Node1发送E2E_RC_Signal均正常,只是网关节点(Gateway)转发的时候出了问题。

工况分析如下:

网关节点在路由信号的时候,会有一个路由延时时间(Gateway Time),如果某一时刻,网关节点中断接收了大量的报文或者CAN接收E2E_RC_Signal时,被高优先级任务抢占,使得E2E_RC_Signal值没有及时更新,而Flexray发送E2E_RC_Signal对应的时间点(t0)已到,就会使得E2E_RC_Signal在没有被更新的情况下发送出去。
提示:Autosar的架构中,Signal的路由只能由COM层路由,PDU的路由可以由PduR完成。

3、解决措施

针对上述问题,本文不具体讨论解决措施。可以看出,上述的问题主要与时序和任务相关,而这两点,具体到每个项目都不一样。具体项目中,如果有类似问题,可以从TASK的优先级、时序、中断数量、MCAL配置方式等方面着手。

提示:对于问题1和问题2,在正常的误差范围内,实际项目中,此偏差可接受。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多