有没有办法在总线上接收之前修改CANoe Rx消息?

时间:2018-12-14 15:56:53

标签: can-bus capl canoe

我正在从控制器接收CAN消息(假设消息ID = 0x100信号S1,S2), 但是我想在总线上接收之前更改独木舟Rx消息的信号。

2 个答案:

答案 0 :(得分:0)

基本上,如果要更改CAN框架中的某些内容,则可以在capl中执行类似的操作。

示例:

 Framename: TEMP
 Signal you want to change: S1, S2
on message TEMP /* or "on message 0x100" in your case */
{
 /* if you have a dbc or arxml assigned to the canoe project you can directly 
  * use frame names and signal names to manipulate the data.
  * if not you need to use it's ID and write over the bytes on it. 
  */
 this.S1 = whatever_value;
 this.S2 = whatever_value;
 output(this);
}

如果您没有将DBC / ARXML文件添加到项目中,但是我强烈建议您这样做。在上面的代码中,唯一需要更改的就是必须指定要覆盖的字节。

您更改此设置:

 this.S1 = whatever_value;
 this.S2 = whatever_value;

对此:

 this.byte(0) = whatever_value;
 this.byte(1) = whatever_value;

但是您需要知道需要覆盖哪些字节。

答案 1 :(得分:0)

如果无法在控制器发送消息之前对其进行修改,则修改消息的唯一选择是HIL(循环中的硬件),您可以将其放置在发送方(控制器)和总线上的CANoe VN之间。

例如,如果您希望使用Vector产品,则将它们称为CANStress模块​​。

它们将嗅探总线上的消息,并在定义的触发条件下(由您触发)用您希望的任何内容覆盖物理层,从而成功更改或注入总线故障。

请注意,修改信号意味着您必须了解其映射,还必须了解如何重新计算CRC标签并进行修改,否则CANoe VN将不接受您的消息,并会报告Rx_Err CRC Check < / strong>。