使用vCDL在程序之间调用函数

CANoe快速提示

Know How
汽车
CANoe
测试、验证和诊断

在CANoe中,您通常需要在多个仿真或测试程序之间进行内部通信。您可以使用vCDL描述语言为此定义接口,从而实现一种功能强大且灵活多变的函数调用机制。

它有什么用?| 它能解决什么问题?

CANoe配置通常包含几个,甚至许多程序:测试、应用模型、仿真节点等。虽然这些程序在理论上是相互独立的,但通常仍需在使用它们时使用某种内部通信:

  • 测试需要将模型交换到另一种内部模式。
  • 有一个仿真特定功能的模型,测试必须告知该模型应提供哪些数据。
  • 该模型主要使用CAPL编写,但为了在后台任务中执行某些操作,会使用一个用C#编写的辅助应用模型。
  • 模型主要使用Python编写,但为了访问更低级别的总线功能,会使用一个用CAPL编写的辅助应用模型。
  • 测试希望使用IL故障注入功能,因此必须告知仿真节点上的CAPL程序调用相应的函数。

您可能已经通过使用一个或多个系统变量进行内部通信,解决其中的一些情况。vCDL描述语言提供一种更强大的机制:可以在其中声明函数,然后在一个程序中实现这些函数,并在另一个程序中调用它们。

在CANoe中哪里可以找到此功能?| 如何启动该过程?

首先,在CANoe的Communication Setup中,将vCDL文件作为new data source创建。在该文件中,添加一个带有内部方法成员的对象,例如:

namespace Example {
  object TestHelpers {
    internal method int32 SwitchModelMode(uint16 newMode);
  }
}

您可以为参数使用vCDL提供的所有数据类型,包括字符串、枚举、列表、结构体等……

在单个程序中通过函数调用句柄实现该方法,这在CAPL、C#和Python中均可实现。以下是CAPL中的实现示例:

on fct_call Example::TestHelpers.SwitchModelMode {
  Write("New model mode: %d", this.newMode);
  // ...
  this.Result = 0;
}

从另一个程序中调用该方法,这一点在所有编程语言中都是可行的。以下是C#中的实现示例:

var result = Example.TestHelpers.SwitchModelMode.Call(1);

您还可以异步调用该方法(使用“CallAsync”代替“Call”),随后等待返回结果,或者使用另一个事件句柄来处理返回结果。

您甚至可以在Trace窗口中显示函数调用及其返回结果。

相关的CANoe主题

___canoe-cube.18101873678914930374.jpg
需要帮助吗?
VectorAcademy
团队
需要帮助吗?
我们很乐意为您提供帮助。如果您对我们的培训和认证项目有任何疑问,或者希望获得个性化建议,只需使用我们的联系表即可。