1

我正在使用 Canoe 10.0 版,我想问是否有一种智能方法可以将可选信号的值从数据库生成到其他值。

现在我正在做硬编码,但对每个信号都这样做很烦人。特别是当我知道数据库包含信号长度、起始位和最小和最大可能值等信息时。

我看到有诸如 getSignal、setSignal 等选项。但我没有设法理解如何正确使用它们以实现我的目标。

谢谢您的帮助。

4

2 回答 2

0

我知道已经很久了,但我的理解如下。

特别是当我知道数据库包含信号长度、起始位和最小和最大可能值等信息时。

通常数据库在 2 个文件中定义:

  • 定义信号、名称、位开始、长度等的 DBC(来自 VECTOR 的格式)
  • 定义帧周期和信号默认值的 EXCEL 文件

您可以将 DBC 文件直接输入到 CANoe/CANalyser 中,CAPL 将能够直接访问信号值。

on message ABSdata // <== frame name as defined in the DBC file
{
  if (this.DIR == RX) 
  {
    // CarSpeed is a signal belonging to the frame ABSdata
    write("The signal value of car speed is %d", this.CarSpeed);
  }
}

无需编写任何复杂的函数来提取信号的值。如果您提供正确的 DBC 文件,CANoe/CANalyser 将进行正确的解码。

于 2019-12-25T08:44:32.347 回答
0

简短:不,您不能从 CAPL 访问 dbc/fibex 数据库中描述的给定信号的符号值。所以你不能拨打这样的电话:

 SetSignal (SignalnamefromDbc, SNA_VALUE); /*SNA_VALUE defined in dbcis 7*/

有几种解决方法,但我需要更多关于你的模拟可以做什么和不能做什么的信息。

例如:OEM 和 Vector 通常会编写特定的 dll 库来生成真实的信号值,而无需您的特定要求。这些 dll 通常链接到模拟节点,并且可以在模拟过程中随时激活/干扰/停止。

于 2018-09-21T11:18:28.863 回答