关于 can bus:有没有办法在总线上接收之前修改 CANoe Rx 消息?

is there a way to modify the CANoe Rx Messages before Receiving on the Bus?

我正在从我的控制器接收 CAN 消息(假设消息 ID= 0x100 信号 S1,S2),
但我想在公交车上接收之前更改 Canoe Rx 消息的信号。


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

例如,如果您希望坚持使用 Vector 产品,它们被称为 CANStress 模块。

他们会在你的总线上嗅探消息,并在定义的触发器(由你)用你想要的任何东西覆盖物理层,成功地改变或注入故障总线。

请注意,修改信号意味着您必须知道它们的映射,以及如何重新计算和修改 CRC 标签,否则 CANoe VN 将不接受您的消息,并会报告 Rx_Err CRC Check。


基本上,如果你想改变 CAN 帧中的某些内容,你可以在 capl 中执行类似的操作。

示例:

1
2
 Framename: TEMP
 Signal you want to change: S1, S2
1
2
3
4
5
6
7
8
9
10
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 文件添加到项目中,但我强烈建议您这样做。您需要在上面的代码中更改的唯一一件事是您必须指定要覆盖的字节。

你改变这个:

1
2
 this.S1 = whatever_value;
 this.S2 = whatever_value;

到这里:

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

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