Autosar CP 基于CAN的时间同步规范导读

在这里插入图片描述

  1. Autosar CP 基于CAN的时间同步规范主要用途
    • 实现精确时间同步
      • 提供了一种在CAN总线上准确分发时间信息的机制,确保连接到CAN网络的各个电子控制单元(ECU)能够共享精确的公共时间基准,对于需要精确时间协调的汽车系统功能(如发动机控制、制动系统、安全系统等)至关重要。
      • 通过定义明确的消息格式和同步协议,处理时间戳的获取、传输和计算,能够有效减少CAN总线通信中的延迟和不确定性对时间同步精度的影响,保证系统内不同节点间的时间一致性。
    • 支持多种时间同步模式
      • 既可以作为时间主设备(Time Master)向其他ECU(作为时间从设备Time Slave)传播时间基准,也可以作为时间从设备接收并同步到主设备的时间基准,还支持时间网关(Time Gateway)功能,实现不同CAN总线或时间域之间的时间同步,满足复杂汽车网络架构中多样化的时间同步需求。
      • 允许配置不同的时间同步参数,如同步消息的传输周期、传输模式(立即传输或循环传输)、去抖时间等,以适应不同应用场景和系统性能要求,提高时间同步的灵活性和可配置性。
    • 确保数据完整性和安全性
      • 支持对时间同步消息进行循环冗余校验(CRC)计算,验证消息在传输过程中是否发生错误,确保数据的完整性,防止因数据损坏导致的时间同步错误。
      • 通过消息认证码(MAC)和完整性检查值(ICV)机制,提供了对时间同步消息的认证和完整性保护,防止消息被篡改或伪造,增强系统的安全性,尤其适用于对安全性要求较高的汽车应用场景,如自动驾驶、车联网通信等。
    • 时间测量与监控功能
      • 提供了时间记录功能,可用于测量时间同步的精度,帮助系统开发者和维护人员评估系统性能,及时发现并解决可能影响时间同步精度的问题。
      • 支持时间验证功能,通过监测时间同步过程中的各种参数(如消息传输延迟、序列计数器连续性等),检测可能出现的错误或异常情况,如超时、消息顺序错误等,并采取相应的处理措施,确保时间同步的可靠性和稳定性。
  2. 与其他相关模块的关系
    • 依赖于其他模块的服务
      • 同步时间基准管理器(StbM)
        • 从StbM获取和设置当前时间值,包括获取当前时间戳(StbM_GetCurrentTime)、获取时间基状态(StbM_GetTimeBaseStatus)、获取时间基更新计数器(StbM_GetTimeBaseUpdateCounter)等操作,以实现准确的时间同步和相关计算。
        • 在时间同步过程中,将计算得到的时间信息(如Rx Time Tuple)通过StbM_BusSetGlobalTime传递给StbM,使StbM能够管理和分发全局时间基准。
      • CAN接口(CanIf)
        • 使用CanIf的服务来接收和发送CAN消息,通过CanIf_Transmit发送时间同步消息(如SYNC、FUP、OFS等消息),并在消息传输过程中,利用CanIf提供的时间戳获取功能(如CanIf_GetEgressTimeStampCanIf_GetIngressTimeStamp)获取准确的时间戳,用于时间同步计算和消息处理。
        • 依赖CanIf通知的收发器链路状态变化(CanIf_EnableEgressTimeStamp)来管理时间同步消息的传输,确保在链路状态正常时进行消息传输,避免因链路故障导致的时间同步中断。
      • 默认错误跟踪器(Det)
        • 向Det报告开发错误和运行时错误,例如在模块初始化失败(CanTSyn_Init)、API调用参数错误(如无效的PDU ID、空指针等)或其他错误情况发生时,通过调用Det_ReportErrorDet_ReportRuntimeError将错误信息传递给Det,以便进行错误记录和诊断。
      • 加密服务管理器(CSM)
        • 在时间主设备中,利用CSM生成消息认证码(MAC)和进行签名计算(Csm_MacGenerateCsm_SignatureGenerate),用于确保时间同步消息的完整性和真实性,保护时间同步过程免受恶意攻击。
        • 在时间从设备中,通过CSM验证接收到的消息认证码(Csm_MacVerifyCsm_SignatureVerify),确认消息在传输过程中未被篡改,保证时间同步数据的安全性。
      • 入侵检测系统管理器(IdsM)
        • 当检测到安全事件(如ICV生成或验证失败、FV不可用、消息序列错误等)时,通过IdsM_SetSecurityEventWithContextData向IdsM报告安全事件,使IdsM能够采取相应的安全措施,如记录安全事件、触发警报或采取防御机制,增强系统的整体安全性。
    • 为其他模块提供时间同步服务
      • 为上层应用和其他需要精确时间信息的模块提供统一的时间同步接口,确保整个汽车电子系统能够基于准确的时间基准进行协同工作,例如,发动机控制模块、制动系统模块、传感器数据采集模块等可以依赖于该时间同步服务来保证数据采集、处理和控制操作的时间准确性和一致性。
  3. 使用场景举例
    • 车辆动力系统控制
      • 在现代汽车的动力系统中,发动机控制单元(ECU)、变速器控制单元和其他相关控制单元需要精确的时间同步来协调工作。例如,发动机的燃油喷射、点火时刻以及变速器的换挡操作等都必须在精确的时间点上进行,以确保发动机的高效运行和车辆的平稳驾驶。
      • 时间主设备(如发动机控制单元)通过CanTSyn模块按照预定的时间间隔发送SYNC消息,包含当前时间的一部分信息(如秒数部分SyncTimeSec)。时间从设备(如变速器控制单元)接收SYNC消息,并记录接收时间戳。随后,时间主设备发送FUP消息,其中包含与之前SYNC消息相关的偏移信息(如T4),用于时间从设备计算精确的时间。
      • 所有控制单元基于同步后的时间基准进行操作,确保发动机的喷油和点火与变速器的换挡动作在正确的时间顺序和时间间隔内完成,避免因时间不一致导致的动力系统故障或性能下降。
    • 自动驾驶系统
      • 自动驾驶汽车依赖于多个传感器(如摄像头、雷达、激光雷达等)的数据来感知周围环境并做出决策。这些传感器的数据需要精确的时间同步,以便系统能够准确地融合数据,判断物体的位置、速度和运动轨迹。
      • 各个传感器所在的ECU作为时间从设备,接收来自时间主设备(如中央控制单元)的时间同步消息,使传感器数据带有精确的时间戳。在数据处理阶段,系统可以根据时间戳对不同传感器的数据进行同步处理,确保数据的一致性和准确性。
      • 例如,当摄像头检测到前方障碍物的同时,雷达也检测到相同位置的物体,通过精确的时间同步,系统可以准确判断这两个检测结果是否对应同一物体,并基于同步后的时间信息计算物体的运动参数,为自动驾驶决策提供可靠依据,提高自动驾驶的安全性和可靠性。
  4. C++ 代码解析工作原理
    以下是一个简化的C++ 代码示例,用于解析AUTOSAR CP基于CAN的时间同步规范的工作原理:
#include <iostream>
#include <ctime>// 模拟StbM模块
class StbM {
public:void getCurrentTime(time_t& time) {// 模拟获取当前时间time = std::time(nullptr);}
};// 模拟CanIf模块
class CanIf {
public:void transmit(const char* message) {std::cout << "Transmitting: " << message << std::endl;}
};// 模拟Det模块
class Det {
public:void reportError(const char* error) {std::cout << "Error: " << error << std::endl;}
};// 模拟CanTSyn模块
class CanTSyn {
private:StbM* stbM;CanIf* canIf;Det* det;time_t syncTime;int sequenceCounter;public:CanTSyn(StbM* stbM, CanIf* canIf, Det* det): stbM(stbM), canIf(canIf), det(det), sequenceCounter(0) {}void init() {// 初始化,这里可以添加更多的初始化逻辑}void sendSyncMessage() {stbM->getCurrentTime(syncTime);char message[100];sprintf(message, "SYNC: %ld", syncTime);canIf->transmit(message);sequenceCounter++;if (sequenceCounter > 15) {sequenceCounter = 0;}}void receiveMessage(const char* message) {if (strcmp(message, "SYNC") == 0) {std::cout << "Received SYNC" << std::endl;} else {det->reportError("Invalid message");}}
};int main() {StbM stbM;CanIf canIf;Det det;CanTSyn canTSyn(&stbM, &canIf, &det);canTSyn.init();for (int i = 0; i < 20; i++) {canTSyn.sendSyncMessage();std::this_thread::sleep_for(std::chrono::milliseconds(500));}return 0;
}

以下是对这个示例的详细解释:

  • 模块模拟
    • StbM:提供获取当前时间的功能getCurrentTime,这里使用std::time(nullptr)来模拟获取当前时间。
    • CanIf:负责发送消息,通过transmit函数将消息打印到控制台。
    • Det:用于报告错误,通过reportError函数将错误信息打印到控制台。
    • CanTSyn
      • 成员变量:维护了与StbM、CanIf和Det的指针,以及同步时间syncTime和序列计数器sequenceCounter
      • 初始化:在init函数中可以添加更多的初始化逻辑,如果需要。
      • 发送同步消息sendSyncMessage函数获取当前时间,将其格式化为消息并通过CanIf发送,同时递增序列计数器,当计数器超过15时重新从0开始。
      • 接收消息receiveMessage函数根据接收到的消息内容进行处理,如果是SYNC消息则打印接收信息,否则报告错误。
  • 主函数
    • main函数中,创建了StbM、CanIf和Det的实例,并将它们传递给CanTSyn的构造函数进行初始化。
    • 然后调用CanTSyn的init函数进行初始化。
    • 通过一个循环,多次调用CanTSyn的sendSyncMessage函数发送同步消息,并使用std::this_thread::sleep_for函数模拟时间间隔。

这个示例简单地模拟了AUTOSAR CP基于CAN的时间同步规范中的一些基本概念,如时间获取、消息发送和接收以及错误处理。实际的时间同步规范会更加复杂,涉及更多的细节和功能,例如消息格式、序列计数器管理、时间验证、安全机制等。但这个示例可以帮助你理解时间同步的基本工作原理。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端常用布局模板39套,纯CSS实现布局

前端常用布局模板39套&#xff0c;纯CSS实现布局 说明 写博客、官网、管理后台都可以参考以下布局模板&#xff0c;实现模板布局的方式包含&#xff1a;flex、CSS、HTML5、Layout。 不需要下载积分&#xff0c;没有特殊库引用&#xff0c;不用安装任何插件&#xff0c;打开资源…

jmeter常用配置元件介绍总结之后置处理器

系列文章目录 安装jmeter jmeter常用配置元件介绍总结之后置处理器 8.后置处理器8.1.CSS/JQuery提取器8.2.JSON JMESPath Extractor8.3.JSON提取器8.4.正则表达式提取器8.5.边界提取器8.5.Debug PostProcessor8.6.XPath2 Extractor8.7.XPath提取器8.8.结果状态处理器 8.后置处理…

边缘计算在智能交通系统中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 边缘计算在智能交通系统中的应用 边缘计算在智能交通系统中的应用 边缘计算在智能交通系统中的应用 引言 边缘计算概述 定义与原…

Vue 项目打包后环境变量丢失问题(清除缓存),区分.env和.env.*文件

Vue 项目打包后环境变量丢失问题&#xff08;清除缓存&#xff09;&#xff0c;区分.env和.env.*文件 问题背景 今天在导报项目的时候遇到一个问题问题&#xff1a;在开发环境中一切正常&#xff0c;但在打包后的生产环境中&#xff0c;某些环境变量&#xff08;如 VUE_APP_B…

十三、注解配置SpringMVC

文章目录 1. 创建初始化类&#xff0c;代替web.xml2. 创建SpringConfig配置类&#xff0c;代替spring的配置文件3. 创建WebConfig配置类&#xff0c;代替SpringMVC的配置文件4. 测试功能 1. 创建初始化类&#xff0c;代替web.xml 2. 创建SpringConfig配置类&#xff0c;代替spr…

(干货)Jenkins使用kubernetes插件连接k8s的认证方式

#Kubernetes插件简介 Kubernetes 插件的目的是能够使用 Kubernetes 配合&#xff0c;实现动态配置 Jenkins 代理&#xff08;使用 Kubernetes 调度机制来优化负载&#xff09;&#xff0c;在执行 Jenkins Job 构建时&#xff0c;Jenkins Master 会在 kubernetes 中创建一个 Sla…

俏美韵从心出发,与女性一道为健康生活贡献力量

近期发布的《2025 全球食品与饮料》报告中显示&#xff0c;“回归本源”为2025年食品饮料赛道的趋势之一&#xff0c;消费者对于产品成分要求越来越严格&#xff0c;尤其是女性消费者&#xff0c;对成分是否自然&#xff0c;营养含量等方面越来越看重&#xff0c;俏美韵品牌从产…

区块链技术在慈善捐赠中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 区块链技术在慈善捐赠中的应用 区块链技术在慈善捐赠中的应用 区块链技术在慈善捐赠中的应用 引言 区块链技术概述 定义与原理 发…

mongoDB的安装及使用

mongodb的安装参考&#xff1a; Centos系统中mongodb的安装详解_centos安装mongodb-CSDN博客 不要下载最新的版本&#xff0c;新的版本中mongo命令无法使用&#xff0c;也就是安装后不能通过mongo命令登录&#xff0c;我这里使用5.0.30版本&#xff1b; mongodb客户端demo: …

DNS面临的4大类共计11小类安全风险及防御措施

DNS在设计之初&#xff0c;并未考虑网络安全限制&#xff0c;导致了许多问题。DNS安全扩展(DNSSEC)协议的开发旨在解决DNS的安全漏洞&#xff0c;但其部署并不广泛&#xff0c;DNS仍面临各种攻击。接下来我们一起看下DNS都存在哪些安全攻击及缓解措施&#xff0c;旨在对DNS安全…

MySql结合element-plus pagination的分页查询

实现效果如下&#xff1a; 重点&#xff1a;使用mysql查询的limit和offset 原生SQL写法&#xff1a; select c.id as deptid,c.name as department,position,a.name staffname,2024-11 as shijian ,CASE WHEN b.shijian IS NULL THEN no ELSE yes END AS submit from fa_wecom…

ubuntu20.04安装FLIR灰点相机BFS-PGE-16S2C-CS的ROS驱动

一、Spinnaker 安装 1.1Spinnaker 下载 下载地址为&#xff1a; https://www.teledynevisionsolutions.com/support/support-center/software-firmware-downloads/iis/spinnaker-sdk-download/spinnaker-sdk–download-files/?pnSpinnakerSDK&vnSpinnakerSDK 在上述地址中…

什么是数字图像?

点赞 关注 收藏 学会了 什么是数字图像&#xff1f; 本文可在公众号「德育处主任」免费阅读 弄懂数字图像的概念对学习计算机视觉很有帮助。 那么&#xff0c;什么是数字图像&#xff1f; 字面意思&#xff0c;数字图像就是有数字组成图像。通常由像素&#xff08;Pixel&…

2024年11月13日

1.创业法律指南 留置权和其他三个权 定金和订金 一般保证和连带保证 1.案例 物权编之担保法律制度案例一 冯系养鸡专业户&#xff0c;为改建鸡会和引进良种需资金20万元。冯向陈借款10万元&#xff0c;以自己的一套价值10万元的音响设备抵押&#xff0c;双方立有抵押字据&a…

Android OpenGL ES详解——立方体贴图

目录 一、概念 二、如何使用 1、创建立方体贴图 2、生成纹理 3、设置纹理环绕和过滤方式 4、激活和绑定立方体贴图 三、应用举例——天空盒 1、概念 2、加载天空盒 3、显示天空盒 4、优化 四、应用举例——环境映射:反射 五、应用举例——环境映射:折射 六、应用…

2024版本IDEA创建Sprintboot项目下载依赖缓慢

目录 步骤一&#xff1a;在IDEA中搜索Maven(双击shift) 步骤二&#xff1a;找到Maven下的settings.xml文件修改镜像 ​编辑 ​编辑​编辑 步骤三&#xff1a;用VScode打开settings.xml文件修改镜像 ​编辑 步骤一&#xff1a;在IDEA中搜索Maven(双击shift) 步骤二&#xff…

Android Framework AMS(16)进程管理

该系列文章总纲链接&#xff1a;专题总纲目录 Android Framework 总纲 本章关键点总结 & 说明&#xff1a; 说明&#xff1a;本章节主要解读AMS 进程方面的知识。关注思维导图中左上侧部分即可。 我们本章节主要是对Android进程管理相关知识有一个基本的了解。先来了解下L…

python购物计算 2024年6月青少年电子学会等级考试 中小学生python编程等级考试一级真题答案解析

目录 python购物计算 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序代码 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python购物计算 2024年6月 python编程等级考试一级编程题 一、题目要求 …

Pycharm PyQt5 环境搭建创建第一个Hello程序

第一步: 创建Pycharm项目,下载包: pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple/pip install PyQt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple/下载好了之后,可以看到相应包: PyQt5:PyQt5是一套Python绑定Digia QT5应用的框架。Qt库是最…

【Vue】Vue3.0(十九)Vue 3.0 中一种组件间通信方式-自定义事件

文章目录 一、自定义事件概念及使用场景二、代码解释三、新的示例 一、自定义事件概念及使用场景 概念 在 Vue 3.0 中&#xff0c;自定义事件是一种组件间通信的机制&#xff0c;允许子组件向父组件传递数据或触发父组件中的操作。子组件通过defineEmits函数定义可以触发的事件…