CAN报文的发送类型分为基本发送类型和混合发送类型两大类
-
CAN基本发送类型包括Cyclic周期发送、OnChange变化时发送、OnWrite写入时发送和IfActive有效时发送。基本发送类型中的Cyclic称为周期型,而其他3个类型称为事件型(Event)。发送次数是通过定义Repetition重复次数来实现的,所以基本型中又衍生出3个子类型OnChangeWithRepetition、OnWriteWithRepetition和IfActiveWithRepetition。
- 对于需要快速响应变化的数据,应该选择 OnChange 机制。例如,一个温度传感器节点,当温度发生变化时会立即发送一个 CAN 报文,通知其他节点温度的变化情况。
- 对于需要实时更新其他节点的数据,应该选择 OnWrite 机制。例如,一个电机控制节点,当接收到来自上位机的电机控制指令时,会立即发送一个 CAN 报文,通知电机驱动节点执行相应的动作。
- 对于只有在特定条件下需要更新的数据,应该选择 IfActive 机制。例如,一个故障检测节点,当检测到某个故障发生时会发送一个 CAN 报文进行报警。只有在故障发生时才会发送这个报文。
- 对于需要周期性更新的数据,应该选择 Repetition 机制。例如,一个节点会定期发送一个"心跳"报文,即使它的内部数据没有发生变化。
- 举例:AEB一般是Cyclic and OnChange也可以采用 Repetition 机制,定期发送车速、加速度等状态信息的 CAN 报文。这样可以让其他安全系统模块持续了解 AEB 系统的工作状态,有利于整车协调控制。
-
混合发送类型就是指基本类型中的周期型与事件型的组合,包括Cyclic and OnChange、Cyclic and OnWrite、Cyclic and IfActive
- Cyclic and OnChange:是指报文平时是周期性发送,当报文中的信号变化时,此报文会额外的发送一次,原来的周期不变。
- Cyclic and OnWrite:指报文平时是周期性发送,当报文中的信号被重新写入时,此报文会额外的发送一次,原来的周期不变。
- Cyclic and IfActive:指报文平时是按正常周期cyclic time发送,当报文中的信号为有效值时,报文会按IfActive报文的快速周期cyclic time fast发送,等到信号变为无效值时,报文又会恢复到原来的正常周期发送。
-
Cyclic是通过Com_MainFunctionTx周期TASK调用,到了时间就去传输。Direct是通过调用写接口Com_SendSignal去传输数据,只有接口被调用,并且等到周期Com_MainFunctionTx才会传数据。
-
Cyclic周期发送
-
Cyclic + OnChange变化时发送:是指当报文中的信号发生变化时,报文才会发送
-
Cyclic + OnWrite写入时发送:写入时发送是指当报文中的信号被重新写入时,报文才会发送。OnWrite与OnChange的主要区别是OnWrite重新写入不一定就是数值的改变,也可以保持不变
-
IfActive有效时发送,有效时发送是指当报文中的信号为有效值时,报文会以一个快速的周期(cycle time fast)发送,当信号变为无效时,报文就不再发送。
-
OnChangeWithRepetition:当报文中的信号发生变化时,重复发一次,重复发送之间间隔50毫秒。
- J1939 Rep=1,Trigger = 5 sec
- ADAS Rep=1,Trigger = 5 sec