1.COM相关术语理解
IPDU 简单理解就是一帧报文
IPDU Group:一些报文的集合
同一个PDU group内的所有PDU的方向需保持一致,且一个
PDU可以同时属于多个PDU group。同时,PDU group内可允许嵌套一层PDU
group。
bswm会控制每个group的收发
Signal:消息数据的最小单位
Signal Group:一些signal集合
2.Com模块可支持的信号类型
1、BOOLEAN
2、FLOAT32
3、FLOAT64
4、SINT16
5、SINT32
6、SINT64
7、SINT8
8、UINT16
9、UINT32
10、UINT8
11、UINT8_DYN
12、UINT8_N
3.支持字节序转换
4.信号的UpdateBit
发送端
Update bit用来指示signal发送到PduR之前,其数据是否被更新,以供接收端识别。每个signal / signal group最多只有1个update-bits,
当接口Com_SendSignal或Com_SendSignalGroup被调用时,Com模块将设置signal(group)对应的update-bits;而何时清除update bit取决于配置项
发送端UpdateBit 的清除方式如下:
1、Confirmation:在Com 模块调用PduR 提供的I-Pdu 发送服务接口函数PduR_ComTransmit 时,且收到发送完成确认(Com_TxConfirmation)后进行清除。
2、Transmit:在Com 模块调用PduR 提供的I-Pdu 发送服务接口函数PduR_ComTransmit 时,且发送成功后进行清除。
3、TriggerTransmit:PduR 模块调用Com 提供的回调函数Com_TriggerTransmit,在调用成功后进行清除。
值得注意的是,清除方式选择的最小单位是IPDU,也就是一个IPDU上面的所有信号和信号组的只能有一种UB清除方式,说白了,这个属性是在IPDU里面配置的,并不在signal里面配置
接收端
信号接收端处理策略:
如果接收到的signal(group)没有配置update bit或配有update bit且update bit被设置,则Com模块将接收该signal (group ),并进行后续的解析、滤波等处理。
否则,Com模块认为该signal(group)没有被更新,不再进行后续的处理。
信号组接收端处理策略:
只要有1个组内信号不满足长度、update bit以及过滤条件的中任意一项检查,整个信号组都将被丢弃。
符合条件的信号组数据被存在各个组内信号的缓存中,可通过Com_ReceiveSignal依次读取。
5.transmission mode和transfer property
transmission mode是PDU的属性,对应ComTxMode
transfer property是signal的属性对应ComTransferProperty
● DIRECT:通过发送“TRIGGERED”transfer property的信号来显式地启动发送。
● PERIODIC:按照预先设定的周期重复发送I-PDU。
● MIXED:以上两种混合。
● NONE:不主动发送。
每个PDU可以配置其中的2种发送模式,发送时具体选择哪种模式由该PDU所包含所有signal的过滤条件评估结果来决定。如果至少有1个signal的过滤条件评估为True,发送模式将选择ComTxModeTrue节点下的ComTxModeMode;如果所有signal的过滤条
件都评估为False,发送模式将选择ComTxModeFalse节点下的ComTxModeMode。实际的发送效果不仅取决于PDU的发送模式,还与signal的transfer property有关。signal的transfer property有如下几种:
● PENDING:对该信号的写访问不会触发对应I-PDU的发送。
● TRIGGERED:根据transmission mode不同,对该信号的写访问可以触发相应IPDU的发送。
● TRIGGERED_WITHOUT_REPETITION:根据transmission mode不同,对该信号的写访问可以触发一次相应I-PDU的发送,无需重复。
● TRIGGERED_ON_CHANGE:根据transmission mode不同,当写入信号的值或者长度与本地存储值不同时,可以触发相应I-PDU的发送。
● TRIGGERED_ON_CHANGE_WITHOUT_REPETITION:根据transmission mode不同,当写入信号的值或者长度与本地存储值不同时,可以触发一次相应I-PDU的发送,无需重复。
发送效果与PDU的发送模式以及signal的transfer property之间的关系可总结如下:
发送属性 | DIRECT | PERIODIC | MIXED NONE |
---|---|---|---|
PENDING | - | 周期发送 | 周期发送 |
TRIGGERED | 发送1+ComTxModeNumberOfRepetitions次 | 周期发送 | 周期+触发发送 |
TRIGGERED_WITHOUT_REPETITION | 发送1次 | 周期发送 | 周期+触发发送 |
TRIGGERED_ON_CHANGE | 此次写入数据与上次不同时,发送“1 +ComTxModeNumberOfRepetitions ”次 | 周期发送周期 + 触发发送 | - |
TRIGGERED_ON_CHANGE_WITHOUT_REPETITION | 此次写入数据与上次不同时,发送1次 | 周期发送周期+触发发送 | - |
“-” 表示不发送。 | |||
PDU的发送模式会在每次更新signal(如调用Com_SendSignal)时重新进行选择,或通过接口Com_SwitchIpduTxMode来直接指定当前的发送模式。 | |||
“PERIODIC”模式下,PDU按照配置的周期发送,在此期间调用Com_SendSignal只会更新PDU的内容,而不会触发PDU的立即发送。 | |||
两种发送模式均配置为“NONE”的场景,通常发生在底层总线(如LIN)通过TriggerTransmit的方式请求PDU数据的情况。 |
6.过滤
Algorithm Reference | Algorithm | Description |
---|---|---|
ALWAYS | True | 不进行滤波,允许所有的信号通过 |
NEVER | False | 移除所有的信号 |
MASKED_NEW_EQUALS_X | (new_value&mask) == x | 允许掩码等于X的信号通过 |
MASKED_NEW_DIFFERS_X | (new_value&mask) != x | 允许掩码不等于X的信号通过 |
MASKED_NEW_DIFFERS_MASKED_OLD | (new_value&mask) !=(old_value&mask) | 允许掩码发生变化的信号通过 |
NEW_IS_WITHIN | min <= new_value <=max | 允许取值在预定义边界内的信号通过 |
NEW_IS_OUTSIDE | (min > new_value) OR(new_value > max) | 允许取值在预定义边界外的信号通过 |
ONE_EVERY_N | Occurrence % period ==offset | 每出现N个信号,就传递一个信号。Start:occurrence = 0;信号每次被接收或发送,Occurrence就增加1;Occurrence的长度最低为8 bit。 |
接收端
过滤条件评估为false的signal将被丢弃,不会将此次接收到的数据存入signal的缓存中;对于signalgroup,一旦有1个group signal过滤条件评估为false,整个signal group都将被丢弃。