车载时间融合与utc同步

2024-02-03  

时间融合和使用

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


时间融合与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),由下游直接生成服务和实现服务即可;而后一种情况从方式较为简单了,但是需要考虑时间跳变的问题。


对外接口

针对使用者来说,期望能够直接获取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;                  

    }                  

};


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。