時間融合和使用
對于整車來說,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;
}
};
-
模塊
+關注
關注
7文章
2695瀏覽量
47433 -
控制器
+關注
關注
112文章
16332瀏覽量
177812 -
車載
+關注
關注
17文章
612瀏覽量
83378 -
時鐘同步
+關注
關注
0文章
87瀏覽量
12761
發布評論請先 登錄
相關推薦
評論