在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主题



