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