Adaptive AUTOSAR——Time Synchronization(VRTE 3.0 R21-11)

15 Time Synchronization

15.1 What is Time Synchronization?

时间同步是自适应平台基础中的一个功能集群。时间同步通过库向应用程序提供C++ API,该库作为RTA-VRTE入门套件的一部分提供,并与应用程序链接以访问该功能。

本版本包含非常少量的时间同步文档。因此,本章不完整或不正确,将在下一版本中扩展。

15.2 Responsibilities

在自适应平台中,时间同步功能集群支持通过事件的时间协调在多个目标ECU之间分配功能。

协调可以包括跟踪事件(及时)和同时触发不同目标ECU上的事件。

时间同步建立一个或多个时基资源,这些时基资源形成使用标准化网络协议gPTP(Generalized Precision Time Protocol)与其他目标ECU同步的主或从时间参考。自适应应用程序使用所提供的C++ API访问时基资源,从而可以协调它们的活动。

15.3 Operation

同步网络由一个时间主机和一个或多个时间从机组成。

时间主机使用标准化的时间分配协议将全局时基分配给从机。Time Slave使用接收到的时间值来更新和维护其自己的本地时间,然后自适应应用程序可以通过时间同步API使用该本地时间。

一个系统可以由多个Time Master节点组成——每个节点都为一个独立同步的网络提供服务。此外,时间网关节点可以被配置为在一个时间分配网络上充当从节点,在第二个网络上充当主节点,从而转发同步时间。

15.3.1 Generalized Precision Time Protocol

AUTOSAR时间同步使用通用精确时间协议(gPTP)来同步时间主机和时间从机之间的时钟。

gPTP包括四条消息:

1.从主设备到从设备的同步请求,请求从设备进行同步。

  • 2.从主ECU到从ECU的后续消息,包含主ECU上的时间戳。
  • 3.从从属设备到主设备的延迟请求,请求主设备发送响应。
  • 4.从主设备到从设备的延迟响应消息。

 

 

 最初,主时钟和从时钟是不同步的,这意味着这两个时钟之间没有关系。

主设备的初始同步消息由从设备接收                   

从设备只是使用其本地尚未同步的时钟记录接收时间(t2)

主控台的后续消息包含使用主控台时钟记录的同步消息的传输时间(t1)。

在从设备接收时,记录的传输时间(主时钟)和接收时间(从时钟)可由从设备上的时间同步使用,以确定两个时钟之间的差异🔺C,从而执行初始同步。

在同步/后续消息之后,两个时钟的差异仅在于消息从主设备传输到从设备所花费的时间;

消息的传播延迟(🔺P)。

t4 不等于 t5

t4 = t5 + 🔺P .

 

为了测量这种传播延迟,从设备发送一个延迟请求,它将自己时钟上的时间记为t6。

当主设备接收到消息时,它将其时钟记为t7,然后将其发送给从设备,从设备现在可以使用t6和t7中的差来计算延迟。

因为Slave的时钟已经落后于在先前同步期间引入的传播时间P,所以t6和t7之间的差实际上是2🔺P,因为在发送延迟请求时引入了另一个🔺P。

总时间🔺C+🔺P通过考虑消息传播时间延迟以及初始时钟差,使从时钟能够与主时钟精确同步。然而随着时间的推移,主时钟和从时钟会自然地漂移。为了避免漂移变得重要,协议包括定期重新同步,以确保主时钟和从时钟保持同步。

如果你看不懂上面的介绍,也可以看下面的图片介绍 gPTP

这样就完成了ECU1与ECU2的时间同步。

15.4 Implementation

如前所述,在分布式系统中关联不同事件时,不同自适应应用程序和/或ECU之间的时间同步至关重要,以便能够及时跟踪此类事件或在准确的时间点触发它们。因此,AUTOSAR为自适应应用程序提供了时间同步API,以便它们可以检索与其他ECU同步的时间信息。此API由TSync客户端库librb-TSync.so实现,该库必须与任何想要使用同步时间的应用程序链接。

15.4.1 rb-tsyncd

RTA-VRTE入门套件还包括一个TSync提供程序守护程序rb-tsyncd。这是一个守护进程,它根据配置文件创建SynchronizedTimeBaseProvider,并使用当前硬件时间更新这些时基

当使用-c命令行选项启动提供程序守护程序时,会指定适当的JSON配置文件。TSync提供程序包中包含一个示例配置文件。请注意,一旦TSync守护进程使用FlatCFG获取其配置,-c选项最终将被删除。

15.4.1.1 Configuration

在此版本中,rb-tsyncd不使用FlatCFG来获取配置值。可以使用JSON配置文件启动TSync守护进程,该配置文件允许设置时基列表。

时基有一个名称和一个与其关联的类型字符串(该类型将在本版本中被读取但被忽略)。

时基名称由TSync提供程序用于创建用于保存时基数据的共享内存对象。

该共享内存对象将由库使用,并且可以在初始化时间同步期间创建TsyncIdentifierMap时使用配置文件中提供的名称进行访问(更多信息请参阅第15.5.1节)。

{
 "timebases":[
     {"name" : "/sysclock", "type" : "dummy"},
     {"name" : "/sysclock2", "type" : "also a dummy"}
  ]
}

15.4.2 Virtual Local Time

为了同步两个或多个ECU的时间,有必要改变每个ECU上的时间。然而,ECU上的硬件时钟是只读的,因此时间同步引入了虚拟本地时间,其功能类似于硬件时钟,但增加了轻松更改时间的能力。每个时基都有自己关联的虚拟本地时间。目前,虚拟本地时间必须手动递增。

15.5 Working with Time Synchronization

15.5.1 Initialization

第一步是在时基和SynchronizedTimeBaseConsumer或SynchronizedTime BaseProvider之间建立映射。

在其他软件集群中,AUTOSAR通常会使用端口原型在ISOLAR VRTE中建立这样的映射,但当前的实现在代码中使用显式的TsyncIdentifierMap:

static constexpr uint32_t TB_ID = 42;
static constexpr const char* INSTANCE_SPECIFIER_STR ="/tsync";
static TsyncIdentifierMap time_base_mappings =
{
    { TB_ID, INSTANCE_SPECIFIER_STR }
};

使用实例指定器时要小心:有些方法要求实例指定器的前缀为“/”

实例化的映射随后由InitializeTimeBaseResource使用。

设置时基资源后,必须使用tsync_Open初始化tsync ptp库:

最后,可以使用TSync_OpenTimeBase函数创建时基:

InitializeTimeBaseResources(time_base_mappings);
TSync_ReturnType ret = TSync_Open();
if(ret != E_OK)
{
    return EXIT_FAILURE;
}

TSync_TimeBaseHandleType timebase = TSync_OpenTimebase(TB_ID);
if(timebase == TSYNC_INVALID_HANDLE)
{
    return EXIT_FAILURE;
}

15.5.2 Creating a SynchronizedTimeBaseConsumer

必须先构造InstanceSpecifier,然后才能生成使用者。在之前创建TsyncIdentifierMap时,我们使用了“/<实例说明符>”,但在这种情况下,不需要前导“/”来创建InstanceSpecifier

auto data = time_base_mappings[TB_ID].data();
Result<InstanceSpecifier> rs = InstanceSpecifier::Create(data + 1); 
// skip theleading ’/’
if (!rs.HasValue())
{
    return EXIT_FAILURE;
}

SynchronizedTimeBaseConsumer现在可以使用此InstanceSpecifier构建:

SynchronizedTimeBaseConsumer consumer(rs.Value());

And the time can be retrieved with the GetCurrentTime method:

并且可以使用GetCurrentTime方法检索时间:

Timestamp ts = consumer.GetCurrentTime();

15.5.3增加虚拟本地时间

时基的虚拟本地时间可以使用TSync_GetCurrentVirtualLocalTime函数检索。这是通过传入您希望获得虚拟本地时间的时基和指向先前初始化的TSync_VirtualLocalTimeStamp的指针来完成的,该指针将用当前虚拟本地时间更新:

TSync_ReturnType rs = TSync_GetCurrentVirtualLocalTime(timebase, &local_time);
if(rs != E_OK)
{
    return EXIT_FAILURE;
}

必须使用TSync_TimeStampType手动递增时间,如下所示:

timestamp.seconds++;
if(!timestamp.seconds)
{
    // The lower part of the timestamp overflowed
    // so increment the upper part
    timestamp.secondsHi++;
}

然后可以使用TSync_BusSetGlobalTime函数设置时基的时间。

在本例中,我们不需要提供TSync_UserDataType或TSync_MeasurementType,因此使用nullptr。

rs = TSync_BusSetGlobalTime(timebase, 
                            &timestamp, 
                            nullptr,
                            nullptr,
                            &local_time);

if(rs != E_OK)
{
    return EXIT_FAILURE;
}

15.6 AUTOSAR API

15.6.1 SynchronizedTimeBaseProvider

Name ara::tsync::SynchronizedTimeBaseProvider

Entity Type Class

Header ara/tsync/synchronized_time_base_provider.h

Methods SetTime

UpdateTime

GetCurrentTime

SetRateCorrection

GetRateDeviation

GetUserData

GetUserData

RegisterTimeValidationNotification

UnregisterTimeValidationNotification

Description Adaptive Application provision of a synchronized timebase. Class methods

provide the current time_point, the rate deviation, the current status

and the received user data (if any).

The class constructor takes an InstanceSpecifier that references a Port-

Prototype.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/7237.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ASIC-WORLD Verilog(1)一日Verilog

写在前面 在自己准备写一些简单的verilog教程之前&#xff0c;参考了许多资料----asic-world网站的这套verilog教程即是其一。这套教程写得极好&#xff0c;奈何没有中文&#xff0c;在下只好斗胆翻译过来&#xff08;加了自己的理解&#xff09;分享给大家。 这是网站原文&…

Helm学习笔记

文章目录概念定义helm组件helm的工作流程helm安装helm仓库helm部署应用helm应用的更新或回退或卸载概念 定义 学习helm首先得了解helm是什么&#xff0c;我们先来看一下helm的定义&#xff1a;helm是将kubernetes的各种资源对象打包&#xff0c;类似于Linux中的yum工具&#…

【HTML系列】第六章 · 框架标签、HTML实体、HTML全局属性和meta元信息

写在前面 Hello大家好&#xff0c; 我是【麟-小白】&#xff0c;一位软件工程专业的学生&#xff0c;喜好计算机知识。希望大家能够一起学习进步呀&#xff01;本人是一名在读大学生&#xff0c;专业水平有限&#xff0c;如发现错误或不足之处&#xff0c;请多多指正&#xff0…

【前端面试题——微信小程序】

目录1.请谈谈wxml与标准的html的异同&#xff1f;2.请谈谈WXSS和CSS的异同&#xff1f;3.请谈谈微信小程序主要目录和文件的作用&#xff1f;4.请谈谈小程序的双向绑定和vue的异同&#xff1f;5.简单描述下微信小程序的相关文件类型&#xff1f;6.微信小程序有哪些传值(传递数据…

jsp+javaEE+mysql校园物品租赁系统dzkf5294程序

1&#xff0e;物品信息管理&#xff1a;管理员发布物品信息后&#xff0c;普通用户便可以查询到该物品信息&#xff0c;用户选择某个物品信息&#xff0c;查询物品信息&#xff0c;管理员审核添加&#xff0c;或删除物品信息。 2&#xff0e;租赁管理&#xff1a;管理员发布租赁…

ChatGPT大解密:带您探讨机器学习背后的秘密、利用与发展

一、什么是机器学习&#xff1f;二、ChatGPT 的运作原理三、ChatGPT 生活利用1、自然语言处理2、翻译3、自动回复四、ChatGPT vs 其他相关技术五、ChatGPT 的未来1、未来发展2、职业取代3、客服人员4、翻译人员5、语言学家6、机遇与挑战六、结语这篇文章&#xff0c;将带着各位…

ThreeJS-投影、投影模糊(十七)

无投影&#xff1a; 完整的代码&#xff1a; <template> <div id"three_div"></div> </template> <script> import * as THREE from "three"; import { OrbitControls } from "three/examples/jsm/controls/Or…

再不转型为ChatGPT程序员,有遭受降维打击的危险

Open AI在演示GPT-4的时候&#xff0c;有这么一个场景&#xff1a;给一个界面草图&#xff0c;就可以生成网页代码。这个演示非常简单&#xff0c;如果界面原型比较复杂呢&#xff1f;像这样&#xff1a;ChatGPT能不能直接生成HTML, CSS,JavaScript代码&#xff0c;把这个网页给…

MongoDB副本集Command failed with error 10107 (NotMaster):on server

问题 通过DataGrip连接的MongoDB节点&#xff0c;之前可以新增或更新数据。某天突然不能新增或更新数据&#xff0c;报错信息如下&#xff1a; 具体的报错信息&#xff1a; Command failed with error 10107 (NotMaster): not master on server 10.19.21.11:30386. The full…

HNU-电路与电子学-实验3

实验三 模型机组合部件的实现&#xff08;二&#xff09;&#xff08;实验报告格式案例&#xff09; 班级 计XXXXX 姓名 wolf 学号 2021080XXXXX 一、实验目的 1&#xff0e;了解简易模型机的内部结构和工作原理。 2&#xff0e;分析模型机的功能&am…

【Linux】LVM与磁盘配额

文章目录1.LVM1.1 LVM概述1.2 LVM机制1.3 LVM管理命令1.4 LVM应用实例2. 磁盘配额2.1 磁盘配额概述2.2 磁盘配额管理2.3 启用磁盘配额支持2.4 磁盘配额应用实例1.LVM 1.1 LVM概述 Logical Volume Manager&#xff0c;逻辑卷管理 ● 能够在保持现有数据不变的情况下动态调整磁盘…

43掌握自动化运维工具 Puppet 的基本用法,包括模块编写、资源管理

Puppet是一种自动化配置管理工具&#xff0c;可以自动化地部署、配置和管理大规模服务器环境。本教程将介绍Puppet的基本用法&#xff0c;包括模块编写和资源管理。 模块编写 在Puppet中&#xff0c;模块是一组相关的类、文件和资源的集合。模块可以用于部署和配置应用程序、服…

图形编辑器:排列移动功能的实现

大家好&#xff0c;我是前端西瓜哥。这次来实现一下图形编辑器排列&#xff08;arrange&#xff09;功能的实现。 先看效果。 有四种移动方式&#xff1a; 置顶&#xff08;Front&#xff09;&#xff1a;将指定的图形移动到顶部&#xff1b;置底&#xff08;Back&#xff09…

嵌入式学深度学习:1、Pytorch框架搭建

嵌入式学深度学习&#xff1a;1、Pytorch框架搭建1、介绍2、Pytorch开发环境搭建2.1、查看GPU是否支持CUDA2.2、安装Miniconda2.3、使用Conda安装pytorch2.4、安装常用库3、简单使用验证1、介绍 深度学习是机器学习的一种&#xff0c;如下图&#xff1a; 目前深度学习应用场景…

MySQL-四大类日志

目录 &#x1f341;MySQL日志分为4大类 &#x1f341;错误日志 &#x1f343;修改系统配置 &#x1f341;二进制日志 &#x1f343;查看二进制日志 &#x1f343;删除二进制日志 &#x1f343;暂时停止二进制日志的功能 &#x1f341;事务日志(或称redo日志) &#x1f341;慢查…

chatgpt3中文辅助写作-gpt2中文文本生成

GPT-3是一种深度学习模型&#xff0c;具有潜在的巨大计算成本和训练麻烦。根据OpenAI公司的官方消息&#xff0c;训练GPT-3是一项昂贵的和耗时的过程&#xff0c;在OpenAI公司&#xff0c;训练GPT-3的成本已经超过了10亿美元。考虑到GPT-3的架构、规模和训练时间&#xff0c;这…

高分子PEG磷酸盐mPEG-phosphoric acid,Phosphate PEG,甲氧基聚乙二醇磷酸,可用于修饰金属氧化物表面

规格单位&#xff1a;g |货期&#xff1a;按照具体的库存进行提供 | 端基取代率&#xff1a;95% 中英文名&#xff1a;mPEG-phosphoric acid|Phosphate PEG|甲氧基聚乙二醇磷酸​ 一、Phosphate PEG化学结构式&#xff1a; 二、产品详情&#xff1a; 外观&#xff1a;灰白…

[oeasy]python0123_中文字符_文字编码_gb2312_激光照排技术_王选

中文编码GB2312 回忆上次内容 上次回顾了 日韩各有 编码格式 日本 有假名 五十音一字节 可以勉强放下 有日本汉字 字符数量超过20000 韩国 有谚文 数量超过500一个字节 放不下 有朝鲜汉字 字符数量超过20000 作为 汉字源头的中国 究竟应该 如何对汉字 进行编码 呢&#x…

操作系统-AOSOA

一、个人感受 1.1 权衡 在我写这份报告的时候&#xff0c;已经是 6 月 30 号了&#xff0c;经历了一个学期的“折磨”&#xff0c;我面对终点&#xff0c;已经没啥感觉了&#xff0c;就想着赶快呼噜完了就完事了。其实做这个项目最大的体会就是“人力有穷&#xff0c;一切皆权…

视频剪辑:教你如何调整视频画面的大小。

大家应该都会调整图片的大小吧&#xff0c;那你们会调整视频画面的大小吗&#xff1f;我想&#xff0c;应该会有人不还不知道要调整的吧&#xff0c;今天就让小编来教大家一个方法怎样去调整视频画面的大小尺寸。 首先&#xff0c;我们要有以下材料&#xff1a; 一台电脑 【…