Autosar 从Com模块发送的信号怎么传输的?

我们知道使用COM模块提供的统一API接口可以很简单的发送一个信号,那么你知道执行了发送信号后,是立即发送还是周期发送呢?

在进行COM模块配置时,涉及到signal和I-PDU的配置。每个signal有一个ComTransferProperty  属性,可以设置为如下值:

每个I-PDU有两个ComTxModeTrue和ComTxModeFalse可设置,其子项可以配置ComTxMode,如下:

先了解几个前提概念:

发送模式条件TMC:  他是信号的发送滤波机制,但是和接收不同,他不丢弃信号,只用于计算TMC的值,滤波机制可以配置为ALWAYS、NEVER、MASKED_NEW_EQUALS_X、MASKED_NEW_DIFFERS_MASKED_OLD、MASKED_NEW_DIFFERS_X、NEW_IS_WITHIN、NEW_IS_OUTSIDE、ONE_EVERY_N。
发送模式选择 TMS:是I-PDU下每个信号的TMC做或运算所得到的结果,是TRUE/FALSE; 

COM模块接收到发送信号请求时,会将I-PDU的所有信号按照设置好的滤波计算每个信号的TMC,再讲所有TMC做或运算,得到TMS结果。这个TMS结果就会对应ComTxModeTrue还是ComTxModeFalse。

换句话说,底层发送肯定是PDU形式的,那么只要其中一个信号要发送,则一个PDU就要发送,所以TMC是或运算,而TMS提供了用户或运算后两种结果的执行动作而已。最后发送的模式逻辑关系是信号的TransferProperty和ComTxMode所配置的值来决定的。

在<AUTOSAR_SWS_COM.pdf>手册中,给我们介绍了几组示例,我们一起来看看:

前提参数说明

示例1

示例1:很简单,在周期模式下,无论信号配置为PENDING or TRIGGERED, 实际上信号都在周期点进行发送。这说明了I-PDU的ComTxMode优先级是更高的。

示例2

示例2:引入了tr和dt参数,从图中可以看出分为3个部分对比演示:

1,DIRECT模式配合信号设置的触发属性,目的是触发到了直接发送,但是要注意tr时间,是要等待COM主函数周期的延迟,等待COM主函数调用时才会触发。这个并不难理解。注意下ComTxModeNumberOfRepetitions 设置的是2,实际发送个数是2+1;

2,如果此次触发是在上次触发的重复周期内,那么实际是等待tr后立即发送,并且上次还没有发完的信号不再继续了,依据当前的触发进行2次td周期的发送。注意第四个td的两侧都是绿色箭头。

3,信号的发送除了等待tr的时间也要等待dt最小发送延迟的时间。注意倒数第二个td的两侧是蓝色箭头起始和绿色箭头结束。

这个示例细节在于两个注意上,如果新的触发离前一个信号的时间是大于dt PDU最小发送时间,那么新的周期td计算是以绿色箭头也就是实际发送的时刻为开始计时的。如果是小于dt,则是以tr结束后为开始计时的。我分析和代码实现有关,此示例模式下,信号从COM请求能直接发送才是最理想的,但是有tr和dt的限制,为了靠近理想只能将dt给考虑进去,tr不行的,因为tr是COM主函数的周期延迟,只有主函数执行到了,才会去处理个更新整个COM下的逻辑状态,这个tr相当于是COM执行的最小单元不能在快了。

上面的分析在以下示例出现都是相同的分析,后面不再提了。

示例3

示例3:对比示例1,可以看出来TMS的优先级是更高的,尽管都是周期的模式,TMS状态改变,信号是跟着改变的,并且会维持当前的状态。

示例4

示例4:将DIRECT和PERIODIC模式进行交叉演示,其中如果当前TMS是TRUE,那么将保持周期模式,如果TMS是FALSE,将执行DIRECT模式。a情况最后触发的是FALSE,设置的是DIRECT,所以最后发完就不发了。b情况最后是周期模式的,所以会持续周期发,也就是说PDU的发送总是保持上一个发送逻辑的状态。

示例5

示例5: MIXED模式当然是结合了两种情况的特点,当周期发送过程中,如果有新的触发发送请求,则立即触发送,DIRECT模式发送结束后则持续周期发送,只不过注意,从DIRECT切换到周期的时候,周期发送的时间是参照本身周期模式的时间的,并不是在DIRECT结束后的时间点继续计算的。这里可以将MIXED理解为“叠加”状态。

示例6

示例6:这个要告诉你的是当前的发送模式永远是保持当前TMS选择的状态,也就是TRUE还是FALSE; 同时对比示例2,在相同TMS选择状态下,tc的起始时间才有可能以tr时刻计时,如果发生了TMS切换,则以绿色箭头实际发送时刻为基准。

示例7

示例7:a\b\c的对比告诉我们,并不是tr和dt永远都是参照最新已发送的信号基准点的,混合发送模式下,从周期切换到DIRECT时,是不用等dt的,同时从DRIECT切换到周期模式时,也不用等dt的;但tr是永远都要等的,因为主函数的有效调用才是实际的执行嘛。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值