首页 > 解决方案 > 如果消息是由交互式生成器块生成的,如何修改 CAPL 中的消息数据?

问题描述

我正在使用 CANalyzer。我正在使用 Interactive Generator 块传输 CAN 消息。我使用 IG 手动修改传输消息中的信号。每次发送消息时,我都需要自动计算校验和(消息中的最后一个字节)。校验和是根据消息中所有先前的数据字节计算的(消息总是 8 个字节长)。IG 没有选择这样做。

我需要: 1. 使用 IG 手动设置信号。2.根据前面数据字节的值自动计算最后一个数据字节的值。

我尝试用 CAPL 编写简单的代码,但没有成功。我将 CAPL 程序节点放在配置窗口中的 IG 节点之后,并在 CAPL 脚本中写入消息事件:

on message FooMsg
{
  message FooMsg msg1; // FooMsg is name of message in database

  msg1 = this; // copy message from IG to temporary variable
  // this.byte(7) = 0x11; // not posibble, compiler warning
  msg1.byte(7) = 0x11;  // constant value just for test
  output(msg1); // send message
}

消息正在传输,但不遵守 IG 中设置的 Tx 周期(消息尽可能快地传输)。

我以为我捕获了从 IG 生成的消息,对其进行修改并发送到 CAN 总线。

有人可以帮忙吗?我是CAPL的初学者。

谢谢

标签: can-buscaplcanoecanalyzer

解决方案


最后我按照 VioletVynil 的建议重新设计了整个东西。我创建了面板,添加了系统变量并将它们连接到面板上的控件,在 CAPL 中编写了一些代码来计算校验和并定期传输消息并且它运行了!没有任何问题!是的,有效载荷上的额外 CRC 用于额外的安全性(铁路应用)。我没有设计通信协议,我只是得到它。

谢谢!

就一个问题。CANanalyzer 不支持环境变量,它仅支持系统变量。CANoe 支持它们。我什么时候需要 envVars?我什么时候需要 CANoe 而不是 CANalyzer?用于模拟总线上的多个节点....?


推荐阅读