AutoSar Com模块

news2024/10/7 20:34:18

文章目录

  • Com模块功能
  • 通信传输控制
  • 整体 communication 结构
  • Signal 发送流程
    • 设置信号的 UpdateBit
    • 信号的超时处理
    • 信号的传输方式
  • Signal 发送时序图
  • Signal 接收流程
    • 接收信号的 UpdateBit
  • Signal 接收时序图
  • Com_TxPduInfo / Com_RxPduInfo、Com_PduGrpVector 数据来源
  • Com_TxSigGrpInfo / Com_RxSigGrpInfo
    • 1. Signal Group 概念
    • 2. Com_TxSigGrpInfo / Com_RxSigGrpInfo
  • I-PDU、N-PDU、L-PDU关系

Com模块功能

Com 模块为汽车控制单元中的应用软件提供了一个统一的通信环境, 为内部和外部通信定义了公共的软件通信接口, 增强了汽车控制单元中应用软件模块的可移植性。

通信传输控制

Com 模块控制 I-Pdu 数据的接收和发送, 在系统网络状态激活以后可由 BswMCDD 模块调用 Com 提供的 Com_IpduGroupControl 服务函数控制 I-PduGroup 是否需要激活, 只有在 I-PduGroup 的状态为激活 状态时, 对应的 I-Pdu 才能进行数据的接收和发送。

通信传输控制主要实现以下功能点:

  1. 可将 I-Pdu 按照不同的功能或者不同的通道划分到不同的 I-PduGroup 中, 在启动 I-PduGroup 时对应该组内的所有 I-Pdu 才能进行数据的接收和发送。
  2. 可通过调用 Com_IpduGroupControl 服务函数将信号缓存数据设置为初始值。
  3. 可通过调用 Com_SetIpduGroup 服务函数控制单个 I-PduGroup 的激活状态。
  4. 可通过调用 Com_ClearIpduGroupVector 服务函数将所有的 I-PduGroup 状态设置为未激活状态, 停止报文的接收和发送处理。

整体 communication 结构

communication 自上到下,数据的传递过程是:

ASW –> RTE–> COM –> PDUR –> CANTP –> CAN Interface –> CAN Driver –> CAN controller –> CAN transceiver –> CAN BUS Line

  1. Com 模块获取应用层的信号(Signal),经一定处理封装为 IPDUInteraction Layer Protocol Data Unit)发送到 PduR 模块;

  2. PduR 根据路由协议中所指定的 I-PDU 目标接收模块,将接收到的 I-PDU 经一定处理后发送给 CanIfPduR 也可以将部分I-PDU 发送给 CAN TP 模块,处理之后再发送给 CANIf

  3. CanIf 将信号以 L-PDUData Link Layer Protocol Data Unit)的形式发送给 CAN 驱动模块;

  4. CAN 驱动模块将 Message 报文发送给 CAN controller

  5. CAN controller 与外部硬件的 CAN transceiverCAN 收发器) 进行 CAN 报文的收发;

  6. 外部硬件 CAN 收发器– CAN Transceiver Hardware主要工作内容为,接收 CAN bus 上的网络信息(通常叫做 CAN Frame)相关的信号电平并将其转化为逻辑信息电平转发给CAN Controller , 接收从CAN Controller 传输过来的逻辑电平信息并将其转化为信号电平传从到 CAN bus 上。CAN Transceiver 有两条线,一条连CAN 总线的高电平,一条低电平;

请添加图片描述

Signal 发送流程

NeuSar 为例,梳理 signal 更新发送流程:

  1. NeuSar 中,每一个 signal 都有一个 buffer 用来存储数据
  2. 调用 Rte_Write_XXX_XXX 更新 RTE Signal 的全局变量,并调用 Com 层接口
  3. 调用 Com_SendSignal(SignalId, SignalDataPtr) -> Com_SendSignal_Process(SignalId, SignalDataPtr) ; 将需要发送的信号值,保存到相应 signalbuffer
  4. task 中周期调用 Com_MainFunctionTx(void) -> Com_PduTxProcess(com_astPdu) ,在 Com_PduTxProcess 中根据 PDU 的发送触发方式,进行相应处理
  5. 以 周期 触发为例,调用 Com_PduPeriodicTxProcess(PduInfo, PduCycle) -> Com_PduCycleSend(PduInfo, PduCycle) -> Com_OnePduSend(PduInfo) -> Com_PduTxSetVal(PduInfo) ,调用 Com_PduTxSetVal ( PduInfo ) 把信号值放入 PDU 中(Com_TxPduInfo[txSigInfoPtr->acPduId].dataraw 这个指针指向存储 PDU 数据的地址)
  6. 调用 PduR_ComTransmit(PduId, PduInfo) -> PduR_UpTransmit(PduId, PduInfo) -> PduR_Route_LoTransmit(dstPduPtr, pduInfoPtr) ,在调用 PduR_Route_LoTransmit 中,根据路由通道不同,可以选择 CanIf 或者 CanTp 两种方式。
  7. CanTp 为例:CanTp_Transmit(CanTpTxSduId, CanTpTxInfoPtr) -> CanTp_Transmit_WithData(CanTpTxSduId, CanTpTxInfoPtr, ErrorId), 在 CanTp_Transmit_WithData 函数中,将 I-PDU 数据封装成 N-PDU 数据(增加 帧类型、长度、目的地址等信息)
  8. CanTp_TxStateTask(CanTpTxSduId, TRUE:代表使用数据) , 调用 CanTp_TxStateTask 发送数据,根据 CAN 类型不同,选择 Can 2.0 或者 CanFd,继续封装 N-PDU 信息
  9. CanIf_Transmit(CanIfTxSduId, CanIfTxInfoPtr) -> CanIf_Transmit_Process(txPduPtr, pduInfoPtr) -> CanIf_TxQueueFilling(txPduPtr, pduInfoPtr, sduLen, canId) ,在 CanIf_TxQueueFilling 中将待发送的数据写入 Can Driver 的数据缓冲区内
  10. Can Driver 成功发送报文,通过 CanIf_TxConfirmation 函数回调通知 CanIf
  11. CanIf 通过调用 PduR_CanIfTxConfirmation -> PduR_LoTxConfirmation 回调通知 PduR 发送成功
  12. PduR 调用 PduR_Route_UpTxConfirmation -> Com_TxConfirmation 通知 Com 层发送成功
  13. Com 通过发送消息确认来调用 Com_TxPduClearUb_Process 清除更新位。如果该 signal 绑定了回调函数,则执行回调函数,执行相关操作

设置信号的 UpdateBit

Update BitCom 信号或信号组数据更新位, 在通信矩阵中以一个信号形式存在, 占用 1 个 bit, 当信号数据发送时将 Update Bit 值设置为 1, 发送完成后将 Update Bit 设置为 0。

UpdateBit 作为判断信号或信号组数据是否被更新的标志,可通过配置项 ComUpdateBitPosition 进行配置 UpdateBit 在该 I-Pdu 所在的位置,用户在调用 Com 提供的发送服务接口函数时将信号对应的 Update Bit 设置为更新状态。

信号对应 UpdateBit 的清除, 根据该信号所在的 I-Pdu 配置项 ComTxIPduClearUpdateBit 配置的清除方式进行清除。
UpdateBit 的清除方式如下:

  1. Confirmation: 在 Com 模块调用 PduR 提供的 I-Pdu 发送服务接口函数 PduR_ComTransmit 时, 且收到发送完成确认(Com_TxConfirmation) 后进行清除。
  2. Transmit: 在 Com 模块调用 PduR 提供的 I-Pdu 发送服务接口函数 PduR_ComTransmit 时, 且发送成功后进行清除。
  3. TriggerTransmitPduR 模块调用 Com 提供的回调函数 Com_TriggerTransmit, 在调用成功后进行清除。

信号的超时处理

Com 发送信号的超时监控, 用于监控信号是否在配置的超时时间内发送完成。 在一个 I-Pdu 内的所有信号如果配置不同的超时监控时间, 则根据该 I-Pdu 内信号配置的最小超时时间进行计算。

I-Pdu 的超时监控在调用 PduR 发送数据服务接口函数时启动, 在接收到发送完成确认后该周期的 I-Pdu 发送超时监控结束, 如果 Com 监控到 I-Pdu 发送超时, 可根据信号配置的 ComTimeoutNotification 回调函数将超时状态通知给 Rte 层。

信号的传输方式

Com 模块可通过 ComTransferProperty 配置项配置发送模式, 详细模式配置如下:

发送模块PERIODIC(周期)DIRECT(触发)MIXED
PENDING当用户请求信号的发送时, 不会立即触发对应的 I-Pdu 发送, 只能根据 I-Pdu 配置的发送周期进行周期性发送。
TRIGGEREDI-Pdu 进 行 周 期发送在信号有发送请求时, I-Pdu 会触发发送一次。 如果ComTxModeNumberOfRepetitions配置了重复发送次数, 且配置ComTxModeRepetitionPerio 重复发送周期, 则进行周期触发发送I-Pdu 进行周期和触发发送
TRIGGERED_WITHOUT_REPETITIONI-Pdu 进 行 周 期发送I-Pdu 只会触发发送一次I-Pdu 触发发送一次,然后继续按照周期进行发送
TRIGGERED_ON_CHANGEI-Pdu 进 行 周 期发送当信号数据与上次发送的信号数据的值或长度不同时, 触发发送一次。 如果 ComTxModeNumberOfRepetitions 配置了重复发送次数, 且配置ComTxModeRepetitionPerio 重复发送周期, 则进行周期触发发送I-Pdu 进行周期和触发发送
TRIGGERED_ON_CHANGE_WITHOUT_REPETITIONI-Pdu 进 行 周 期发送当信号数据与上次发送的信号值或长度不同时, 触发发送一次I-Pdu 进行周期和触发发送

Signal 发送时序图

时序图较大,查看时可以在图片上右键选择 “在新标签页中打开图片”

请添加图片描述

Signal 接收流程

NeuSar 为例,梳理 signal 接收流程:

  1. Can 驱动模块接收到报文会调用接口 CanIf_RxIndication 通知 CanIf 模块
  2. 在通过所有过滤器和验证检查后,成功接收到发送给 CanIfCAN Rx LPDU ,调用 CanIf_RxIndication_ProcessPDU 进行解析
  3. CanIf 调用 PduR_CanIfRxIndication -> PduR_LoRxIndication 回调函数,将数据上传到 PduR
  4. 调用 PduR_Route_UpRxIndication ,表示收到下层通信接口模块的 I-PDU。即,当 PduR_<Lo>RxIndication 被调用时,PDU Router 模块将为每个目的上层模块调用 <Up>_RxIndication
  5. 调用 Com_RxIndication ,通知 Com ,表示收到下层通信接口模块的 I-PDU
  6. 调用 Com_RxIndicationProcess 处理 I-PDU 数据
  7. 调用 Com_RxSignalAnalysis_Process 解析信号,调用 Com_RxSigRead_Normal 获取解析出来的 Signal 值,再根据数据类型调用 Com_RxSigUbInvFilterProcessI8 或其他对应函数将接收到的数据存储在 Com_RxSignalInfo[sigIdx].sigRTEValue
  8. 调用 Com_RxSigNotification_Handle 回调函数,通知 RTE 接收完成,更新 RTE 层的 全局变量
  9. 通过 RTE 接口调用 Rte_Read_XXX_XXX 函数,内部再调用 Com_ReceiveSignal -> Com_ReceiveSignal_Process ,将存储在 RX BuffSignal 值赋给 RTE 中的全局变量

接收信号的 UpdateBit

如果接收的信号或者信号组配置有对应的 UpdateBit 数据更新位, Com 先解析对应 UpdedateBit 对应的信号数据, 如果 UpdedateBit 为 1, 代表对应的信号数据有更新并进行解析。

Signal 接收时序图

请添加图片描述

Com_TxPduInfo / Com_RxPduInfo、Com_PduGrpVector 数据来源

配置 COM 模块,需要导入 DBC 文件

一般来说,一个 DBC 文件中含有多个 Node;一个 PDU 相当于一个 message,而 COM 模块由多少个 PDU ,与导入 DBC 时选择的 Main Node 有关。

在这里插入图片描述
BMS 节点为例:
请添加图片描述

Node Tx Messages 有10个,Rx Messages 有2个,所以

extern CONST(COM_TxPduInfo_st, COM_CONFIG_DATA) Com_TxPduInfo[COM_TXPDU_NUM]; // COM_TXPDU_NUM = 10
extern CONST(COM_RxPduInfo_st, COM_CONFIG_DATA) Com_RxPduInfo[COM_RXPDU_NUM]; // COM_RXPDU_NUM = 10

Node 下,Tx Messages 共有 29 个 signalRx Messages 共有 4 个 signal,所以

extern CONST(COM_TxSignalInfo_st, COM_CONFIG_DATA) Com_TxSignalInfo[COM_TXSIG_NUM];  // COM_TXSIG_NUM = 29
extern CONST(COM_RxSignalInfo_st, COM_CONFIG_DATA) Com_RxSignalInfo[COM_RXSIG_NUM]; // COM_RXSIG_NUM = 4

Com_TxSigGrpInfo / Com_RxSigGrpInfo

在这里插入图片描述

1. Signal Group 概念

Com 模块控制 I-Pdu 数据的接收和发送, 在系统网络状态激活以后可由 BswMCDD 模块调用 Com 提供的 Com_IpduGroupControl 服务函数控制 I-PduGroup 是否需要激活, 只有在 I-PduGroup 的状态为激活状态时, 对应的 I-Pdu 才能进行数据的接收和发送。

多个 Signal 可以组成一个 Signal Group。一个 Signal Group 中只能包含同一消息中的 Signal

从下面可以看出,信号组和普通信号的图标不同

在这里插入图片描述

下面问答参考:https://www.elecfans.com/d/1936426.html

  1. 问题1:什么是Signal Group,为什么要用Signal Group?
  • 答:为了支持复杂数据类型的AUTOSAR概念,AUTOSAR COM提供了信号组的解决方案。AUTOSAR COM模块一致地发送和接收信号组,为复杂数据类型提供必要的一致性。通俗的来讲,Signal Group就是一个IPDU里面的几个Signal的集合,这几个Signal的操作需要保持一致性(也就是如果外部发送方有对这几个数据中一个或多个数据有改动,那么接收方也需要同时更新,比如车道线的一阶参数、二阶参数、三阶参数、常数项是4个不同的Signal,这4个Signal就需要保持一致性,不然到最后仪表上画出来的车道线就会偶发的和实际不一样)。
  1. 问题2:什么是Shadow buffer,Shadow buffer机制为什么能保证数据的一致性?
  • 答:本来COM模块为每个Rx SignalRx Signal都设有一个Signal Buffer的,Signal数据的收发都通过这个Signal来实现。如果Signal GroupCOM模块为每个Signal Group又额外设置了一片Signal Group Buffer,这片Buffer就是所谓的Shadow buffer。在发送Signal Group的时候,将Signal Group拷贝到IPDU Buffer的时候是原子操作(也就是拷贝前关闭全局中断,拷贝后打开全局中断,保证拷贝过程不被中断干扰)保证了Signal Group数据的一致性。
  1. 问题5:RTE在获取一个Signal时,如果这个Signal属于一个Signal Group,那么Signal的值从Signal的buffer获取还是Shadow buffer获取?
  • 答:从Shadow buffer中获取。

2. Com_TxSigGrpInfo / Com_RxSigGrpInfo

COM_TXGRP_NUMCOM_RXGRP_NUM 分别表示发送和接收信号组的个数

extern CONST(COM_TxSigGrpInfo_st, COM_CONFIG_DATA) Com_TxSigGrpInfo[COM_TXGRP_NUM + 1U];
extern CONST(COM_RxSigGrpInfo_st, COM_CONFIG_DATA) Com_RxSigGrpInfo[COM_RXGRP_NUM + 1U];

I-PDU、N-PDU、L-PDU关系

更多参考:https://blog.csdn.net/initiallizer/article/details/130040286

  • L-PDU:对应链路层的PDU,一般来说,我们称接口层(Interface,XX_If)为链路层,比如:CanIf、FlexrayIf等。更确切地说是 Driver和Interface 构成链路层。

  • N-PDU:网络层对应的 PDU,一般来说,我们称传输层(Transport,XX_Tp)为网络层,比如:CanTp、FlexrayTp等。

  • I-PDU:交互层(表示层)对应的 PDU

XX_If以上模块的信息交互依赖 I-PDUXX_IfXX_Tp模块的交互依赖 N-PDU

一般来说,小数据传输时,用XX_If;大数据传输时,用XX_Tp所以,在诊断的多帧传输时,XX_Tp层会将多个N-PDU缓存,直到一个完整的I-PDU接收完,之后通过 PduR送给DCM ,即:I-PDU = n * N-PDU(n是大于1的正整数)。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二维码生成点击按钮展示二维码

使用HBuider 1.先安装插件 &#xff08;地址 : https://ext.dcloud.net.cn/plugin?id1287&#xff09; 这里直接就安装到了uni-modules里面了 2、引入 import uQRCode from ‘/uni_modules/Sansnn-uQRCode/components/u-qrcode/u-qrcode.vue’ 3、代码实现 <template…

下载git

1.官网下载可能会有访问失败 2.用其他的镜像源下载 快 准 狠 CNPM Binaries Mirror

python3 简易 http server:实现本地与远程服务器传大文件

在个人目录下创建新文件httpserver.py &#xff1a; vim httpserver.py文件内容为python3代码&#xff1a; # !/usr/bin/env python3 import datetime import email import html import http.server import io import mimetypes import os import posixpath import re import…

1200V的SiC - Trench - MOSFET的性能和耐久性

标题&#xff1a;Performance and Ruggedness of 1200V SiC - Trench - MOSFET 摘要 本文介绍了一种新颖的SiC沟槽MOSFET概念。该器件旨在平衡低导通损耗和Si-IGBT类似的可靠性。介绍了45 mΩ/1200 V CoolSiCTM MOSFET的静态和动态性能以及短路能力的基本特点。在状态电阻的有…

JAVA数组、String与集合详解

目录 1. 数组 1.1 初始化 1.2 遍历 1.3 数组执行原理 1.4 Arrays操作数组 2. String字符串 3. 集合 3.1 Collection 3.1.1 常用方法 3.1.2 分类 3.1.3 遍历方式 3.1.4 List 3.1.5 Set 3.1.6 适用场景 3.1.7 Collection总结 3.2 Collection其他操作 3.2.1 并发修…

系统配置与性能评价

系统配置与性能评价 考点概况性能指标性能评价方法阿姆达尔解决方案 考点概况 性能指标 标红的常考 了解性能指标对应哪一个的 性能指标是干嘛的 网络和路由器都有吞吐量&#xff0c;优先选择网络 d 数据处理速度&#xff1a;PDR c D A 根据选项去选择最合适的就行 B和D都是网…

把DTC从Excel导入cdd的方法

本文是基于CANdelaStudio12.0讲解 问题一&#xff1a;当导入DTC的xxx.cdi文件报如下红色错误 可能原因&#xff1a;在设置具有下拉框的属性的内容时&#xff0c;输入的内容不在下拉框列表中 解决办法:在.cddt文件中更新“”Error Code Table“”内容&#xff0c;把新的选项更新…

Matlab信号处理2:方波信号的合成与分解

周期信号可展开为傅里叶级数&#xff0c;因此方波信号可用若干谐波去拟合。以下是Matlab的实现&#xff1a; %% 方波信号的分解% 1.生成方波信号 % 方波信号周期、基波频率 T0 2; w0 (2 * pi) / T0; % 方波信号值为1的区间 T1 0.5; % 绘图周期&#xff1a;(2*n1)个周期 n …

SpringBoot项目--电脑商城【用户注册】

1.创建数据表 1.1 创建t_user表 CREATE TABLE t_user (uid INT AUTO_INCREMENT COMMENT 用户id,username VARCHAR(20) NOT NULL UNIQUE COMMENT 用户名,password CHAR(32) NOT NULL COMMENT 密码,salt CHAR(36) COMMENT 盐值,phone VARCHAR(20) COMMENT 电话号码,email VARCH…

S7-1500/ET200MP 使用 TIA STEP7 进行自由口通讯

1. 硬件列表 2. 组态和配置 1) 新建项目 2) 创建CPU1500站点 3) 组态CM PtP 串口 4) 设置协议自由口 3. 编写通信程序 1) 逻辑地址的填写 2) 调用发送接收功能块 3) 创建发送DB块和接收DB块 4. 设备连接 5. 通信测试 1) 设置串口调试调试软件SSCOM32 2)…

某米ax3000路由器组网解析

我们使用某米k60手机与某米ax3000 wifi6路由器组网&#xff0c;来分析和学习网络速率与瓶颈限制。 某米 AX3000 路由器简介 某米 AX3000 路由器是一款支持 WiFi 6 的双频路由器&#xff0c;它的 MIMO 是 22&#xff0c;也就是两根天线。MIMO 是 Multiple Input Multiple Outpu…

[hpsupport@privatemail.com].Elbie勒索病毒的最新威胁:如何恢复您的数据?

引言&#xff1a; 随着技术的不断发展&#xff0c;网络犯罪分子也在不断进化和改进他们的方法&#xff0c;其中之一就是恶名昭著的勒索病毒。最近&#xff0c;出现了一种新的威胁&#xff0c;名为 [ hpsupportprivatemail.com ].Elbie 勒索病毒。让我们一起深入探索这个威胁&am…

拥抱国产化,生态软件信创兼容适配之路

国产化是指技术引进项目投产后所生产的产品中&#xff0c;国内生产件的数量占整件产品生产件数量。换句话说&#xff0c;软件国产化的占比&#xff0c;直接影响到技术是否会在某一个时点上被”卡脖子“。 随着国家经济的发展和技术水平的提高&#xff0c;国家整体实力大大增强…

视频集中存储/直播点播平台EasyDSS点播文件分类功能新升级

视频推拉流EasyDSS视频直播点播平台&#xff0c;集视频直播、点播、转码、管理、录像、检索、时移回看等功能于一体&#xff0c;可提供音视频采集、视频推拉流、播放H.265编码视频、存储、分发等视频能力服务。 TSINGSEE青犀视频的EasyDSS平台具有点播文件分类展示方法&#xf…

深入synchronized

##深入synchronized 2.1 类锁、对象锁 synchronized的使用一般就是同步方法和同步代码块。 synchronized的锁是基于对象实现的。 如果使用同步方法 static&#xff1a;此时使用的是当前类.class作为锁&#xff08;类锁&#xff09; 非static&#xff1a;此时使用的是当前对…

【网络安全带你练爬虫-100练】第23练:文件内容的删除+写入

目录 0x00 前言&#xff1a; 0x02 解决&#xff1a; 0x00 前言&#xff1a; 本篇博文可能会有一点点的超级呆 0x02 解决&#xff1a; 你是不是也会想&#xff1a; 使用pyrhon将指定文件夹位置里面的1.txt中数据全部删除以后---->然后再将参数req_text的值写入到1.txt …

【C++】反向迭代器精讲(以lIst为例)

目录 二&#xff0c;全部代码 三&#xff0c;设计思路 1. 讨论 2. 关于迭代器文档一个小细节 结语 一&#xff0c;前言 如果有小伙伴还未学习普通迭代器&#xff0c;请参考这篇文章中的普通迭代器实现。 【STL】list用法&试做_底层实现_花果山~~程序猿的博客-CSDN…

Android架构 架构和 CPU ABI - NDK

查看设备架构 adb -s emulator-5554 shell getprop ro.product.cpu.abi C:\Users\liyd>adb -s emulator-5554 shell getprop ro.product.cpu.abi x86_64C:\Users\liyd>adb -s 804c11f1 shell getprop ro.product.cpu.abi arm64-v8amumu模拟器12 C:\Users\liyd>adb …

MobaXterm 突破14个session限制

通常情况下&#xff1a;随着工作时间的增长&#xff0c;我们会保存许许多多的linux到本地的mobastream&#xff0c;然后当超过14个&#xff0c;就会被被限制&#xff0c;这个会让人很头疼。 1. 安装python&#xff0c;配置好环境变量 测试安装成功&#xff1a; 2. 基于项目进行…

uniapp点击事件在小程序中无法传参

这个问题很是神奇&#xff0c;第一次遇到。在h5中&#xff0c;点击事件可以正常传参&#xff0c;打包小程序后确失效了。 修改&#xff1a;for循环中的key&#xff0c;使用 index就好了