【问题标题】:is there a way to modify the CANoe Rx Messages before Receiving on the Bus?有没有办法在总线上接收之前修改 CANoe Rx 消息?
【发布时间】:2018-12-14 15:56:53
【问题描述】:

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

【问题讨论】:

  • “在总线上接收之前”是指在发送者发送之前。而且这个只能在发送端配置,不能在CANoe端配置。

标签: can-bus capl canoe


【解决方案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;

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

【讨论】:

  • 如果他希望在CANoe模拟接收之前更改消息,您的代码只会在接收后(on message)修改内容,而不是之前。他希望“劫持”邮车:P 接收后不要更改它。
  • 我理解它就像他正在接收来自控制器的消息,并且他想在收到消息之前更改消息。但我不太确定在这种情况下劫持邮车应该是什么。但我们会看到他的确切意思。但很高兴再次在这里见到你:D
  • Én 是örülök :) 所以 Postoffice1 是控制器,postcar 是消息,Postoffice2 是 CANoe 模拟。如果他希望在 CANoe 处理之前修改内容,他必须在路上抓住它,或者强制控制器发送已经修改的内容。此外,CANoe 不能修改 Rx 消息的内容,它不会在 Trace 上可见。它只能覆盖已经收到的消息对象,但我认为这没有意义。
  • 好的,我也看到了你的回答。我错过了两个设备之间需要 Vector VN 框的一些部分,而且我完全错过了必须重新计算 crc。你是匈牙利人还是只是在谷歌上搜索翻译?
  • 是的,我是匈牙利人。罗马尼亚的匈牙利少数民族。如果您愿意,我们可以随时通过邮件讨论匈牙利语中的 FR 和 CAN 协议以及 CANoe。你可以在我的个人资料描述中找到它:)。
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-19
    • 2013-08-25
    • 2019-11-25
    • 1970-01-01
    • 2021-04-03
    • 1970-01-01
    • 2014-02-13
    相关资源
    最近更新 更多