车载时间融合与utc同步

描述

时间融合和使用

对于整车来说,Tsync模块需要将整车所有vehicle time和utc同步好,对于用户来说,开发者最好提供获取vehicle time和utc时间的接口,用户无需要关注时钟同步的过程和细节。

  1. 时间融合与utc同步

前面提到vehicle time和utc的精度不一样,所以使用场景各有不同,也就意味着同一个ecu内,应该同时存在上述两种时间,我们以网关(GW),座舱控制器(CDC),智驾控制器(ADC)以及TBOX为例分析。

模块

如上图所示,vehicle time可以借助gptp以及can_tsync让所有ecu保持同步,而utc时间必须借助外部环境先同步TBOX。但是如何让GW, CDC ,ADC也能同步UTC时间呢?

针对上述拓扑,vehicle master和utc master不在同一个ecu,可以借助当前最火的SOA思想,在TBOX上部署UtcServiceProvider,提供GetUtc和PubUtc两种接口,而GW, ADC, CDC则可以部署UtcServiceConsumer。为了消除SOA传输带来的延迟,我们可以将TBOX的utc和vehicle time一同给到consumer端,这样的话,UTCconsumer=UTC(provider)+(vehicle_time(consumer)-vehicle_time(provider))。

如果vehicle master和utc master在同一个ecu,如下图,这种方式相对来说,会更加简单一点。比如我们可以将utc的时间在tbox上于vehicle time同步,然后通过gptp的报文,简介的同步所有的ecu的utc时间。

模块

不管上述任何一种情况,实际并不复杂,前一种让架构部门输出soa的描述语言(arxml,idl),由下游直接生成服务和实现服务即可;而后一种情况从方式较为简单了,但是需要考虑时间跳变的问题。

  1. 对外接口

针对使用者来说,期望能够直接获取utc时间或者vehicle time,所以开发者理应再提供接口直接获取,屏蔽使用者无需关心的细节。代码示例如下:

C++                  
class JinbaoClock {                  
public:    
static struct timespec GetVehicleTime()                  
    {                  
        struct timespec ts_ptp;                  
        if (clock_gettime(clk_id_, &ts_ptp)) {                  
            return {};                  
        }                  
        return ts_ptp;                  
    }                  

    static struct timespec GetUtc()                  
    {                  
        struct timespec ts_utc;                  
        if (clock_gettime(CLOCK_REALTIME, &ts_utc)) {                  
            return {};                  
        }                  
        return ts_utc;                  
    }                  
};
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分