COM 信号发送和接收概述

文摘   2024-12-26 07:15   上海  
回顾了基于AUTOSAR架构的CAN报文发送和接收的控制流和数据流之后,查找了下与应用层交互的COM层函数Com_SendSignal和Com_ReceiveSignal,稍作扩展,找到了一篇关于COM 层报文/信号的发送和接收文章,在此分享:

本文我们将了解在 COM层发送和接收信号/信号组时需要进行的一些操作。对于内部通信(同一 ECU 内软件组件之间的通信)是由 AUTOSAR中的 RTE 来处理,因此我们在这里不关注,本文我们将关注的是不同 ECU 之间发送和接收报文/信号的整个过程。

1 COM 发送

下图描述了报文/信号的发送。在 COM 层中有三个实体负责触发与发送相关的操作:API Com_SendSignal , Com_SendSignalGroup 以及基于信号的网关(后者可以对发送和接收有发言权)。

在执行这些操作时,将设置信号更新位,进行字节序转换和符号扩展,并在处理后用信号数据填充 I-PDU。中间,可以为属于信号组的信号填充阴影缓冲区。

然后,根据信号发送属性和 I-PDU 发送模式选择或通过 PduR Com_TriggerTransmit的 API 调用,I-PDU 将通过 PduR 通过 API PduR_ComTransmit(触发 I-PDU 标注后)从 COM 发送出去,并遵守 I-PDU MDT(最小延迟时间)监控。

最后,等待 PduR 通过 API Com_TxConfirmation的反馈,并在发送截止日期监控的密切监督下。最后,发送截止时间监控或 ComTxConfirmation 将分别Com_CbkTxTOut或Com_CbkTxAck发送通知。

上述过程如下图所示:

COM 发送过程概述
2 COM 接收
接收由 Com_RxIndication API 调用启动。同时,接收截止时间监控正在运行,如果消息未在预期时间内到达,则可以通过此调用重新启动或触发回调Com_CbkRxTOut。
当收到 I-PDU 时,将调用可选的 I-PDU 标注。然后,对每个信号进行字节序转换和符号处理,检查更新位的值(如果它使用它们并且信号尚未更新,则将其丢弃),并验证它不是已定义的无效信号值(在这种情况下,将进行进一步的操作,包括可能的标注Com_CbkInv触发),这些将根据过滤器配置进行过滤。只有在经过过滤后,才能重置对信号的截止时间监控。

也可以进行标注Com_CbkRxAck,数据也可以跟随到基于信号的传输网关,通过 PDU 路由器再次传输。最后,更新信号值,并更新信号组的阴影缓冲区。当应用程序通过Com_ReceiveSignal 或 Com_ReceiveSignalGroup 使用信号时,将消耗信号值。

上述过程如下图所示:
COM 接收过程概述


创作不易,欢迎点赞再看收藏关注


汽车研发交流群,有兴趣的朋友请添加群主:prOmiseyes,备注:公司+职务入群。仅限汽车从业人员。


ECU 应用层软件模型系列文章不断更新中,从零开始教你做应用层开发:

谦益行
分享汽车研发日常,助力你我共同成长。
 最新文章