-1

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

4

2 回答 2

1

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

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

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

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

于 2018-12-16T10:27:24.723 回答
1

基本上,如果您想更改 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;

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

于 2018-12-15T20:17:49.293 回答