0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用vCDL在程序间调用函数

Vector维克多 来源:Vector维克多 2026-04-27 14:36 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在2026年,CANoe迎来了它的30周年。在这个重要节点,我们整理了一系列由一线专家团队沉淀的技术经验,希望帮助您在实际项目中更高效地发挥CANoe的能力。每一个主题,都对应一个CANoe的具体功能或典型工作流程,助您解决开发中的实际挑战,优化使用方式,并带来可感知的效率提升。

摘要

在CANoe使用过程中,通常需要在多个仿真或测试程序之间进行内部通信。vCDL(Vector Communication Description Language)为此提供一种结构化的解决方案:通过定义接口,可以在不同程序之间建立清晰的函数调用关系,从而实现更加灵活、可维护的交互机制。相比传统方式,vCDL不仅提升通信能力,也让跨模块协同更加清晰和高效。

能做什么?

能解决什么问题?

CANoe工程可以包含多个不同类型的程序,例如:测试、仿真节点、应用模型。虽然这些程序在结构上是独立的,但在实际工程中,它们之间往往需要交互数据。

例如:

测试脚本需要控制模型切换不同的模式

模型需要根据测试指令动态提供或调整数据

使用CAPL编写的模型,借助C#编写的辅助应用模型完成后台任务

使用Python编写的模型,通过CAPL编写的辅助应用模型访问底层总线

测试脚本需要触发仿真节点中的特定功能(如IL故障注入)

在很多情况下,这类通信可以通过系统变量实现。但对于更为复杂的交互逻辑,除了可以使用基于“数据传递”的通信方式,vCDL还提供一种更强大的机制:可以在vCDL中声明函数接口,然后在某一个程序中实现这些函数,并在其他程序中直接调用这些函数。

如何在CANoe中找到此功能?

如何开始使用?

1.创建vCDL

打开Simulation → Communication Setup后,在Data Sources中选择New Data Source,即可创建vCDL文件作为数据源。这个文件将作为接口定义的统一入口,用于描述不同程序之间的交互方式。

4ed27aa2-3ef4-11f1-90a1-92fbcf53809c.png

2.声明内部方法

创建的vCDL文件中,默认包含一个命名空间(namespace),可用于逻辑分组和隔离,以便在存在相互引用时进行明确的分类。可以在其中定义数据类型、接口、对象等。

之后,可以定义一个对象(object),并在其中声明内部方法(internal method),用于后续的函数调用。

4f2ab73a-3ef4-11f1-90a1-92fbcf53809c.png

接口定义中,可以使用vCDL支持的各种数据类型作为参数或返回值,例如:

字符串(string)

枚举(enum)

列表(list)

结构体(struct)

这使得接口不仅可以传递简单数据,也能够描述更复杂的交互场景。

3.实现函数

vCDL本身只负责“声明接口”,接口定义完成后,需要在具体程序中对这些方法进行实现,真正的函数逻辑可以在不同语言中完成,例如CAPL、C#或Python。

以下是在CAPL中实现的示例,在调用该函数时会在Write窗口打印当前mode,并将返回值设为0:

4f86b90e-3ef4-11f1-90a1-92fbcf53809c.png

4.调用函数

实现函数之后,在其他编程语言编写的应用程序中都可以调用该函数。

以下是在C#中调用的示例,为函数传入参数1,并将返回值存储在变量result中:

4fdc7b82-3ef4-11f1-90a1-92fbcf53809c.png

除同步调用外,还可以将Call替换为CallAsync来实现异步调用。调用方无需阻塞等待结果,可以在后续主动等待返回值,或通过额外的事件处理机制来接收结果,这种方式在涉及耗时操作或并行处理时,会更加灵活。

5.观测函数

CANoe还提供一个非常实用的功能:可以在Trace窗口中观测函数。

在函数被调用时,会触发Trace窗口中的显示,可以直接观测函数的传入参数、返回值等。这使得跨程序的函数调用可以像总线报文一样进行跟踪和调试,大大提升问题定位的效率。

50359488-3ef4-11f1-90a1-92fbcf53809c.png

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 程序
    +关注

    关注

    117

    文章

    3849

    浏览量

    85472
  • CANoe
    +关注

    关注

    4

    文章

    88

    浏览量

    9907
  • 调用函数
    +关注

    关注

    0

    文章

    12

    浏览量

    2496

原文标题:CANoe Tips | 使用vCDL在程序间调用函数

文章出处:【微信号:VectorChina,微信公众号:Vector维克多】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何查看及更改函数/函数块的调用环境

    模块化设计的思想是把一些相似的功能(比如电机控制、阀控制)设计成函数函数块,这样就可以反复调用。其优点是:使程序架构更加清晰,避免重复编写相似功能的代码。不过可能会产生一个疑惑:既然
    的头像 发表于 11-17 09:08 2491次阅读
    如何查看及更改<b class='flag-5'>函数</b>/<b class='flag-5'>函数</b>块的<b class='flag-5'>调用</b>环境

    C++教程之函数的递归调用

    C++教程之函数的递归调用 执行函数 f 的过程中,又要调用 f 函数本身,称为
    发表于 05-15 18:00 35次下载

    系统调用函数库分析及实例

    作为用户我们极少接触系统调用,但是我们熟悉C 语言,对库函数调用并不陌生。C语言支持一系列库函数调用,而事实上,库
    发表于 06-23 16:46 46次下载
    系统<b class='flag-5'>调用</b><b class='flag-5'>函数</b>库分析及实例

    函数执行完毕后,如何返回调用处?

    函数执行完毕后,如何返回调用处呢?由于该函数可能会被多次调用,且每次调用的地方很可能不一样,这样被调用
    的头像 发表于 09-14 14:27 1.7w次阅读
    当<b class='flag-5'>函数</b>执行完毕后,如何返回<b class='flag-5'>调用</b>处?

    高效的C编程之函数调用

    指令BL或MOV pc,lr一般只需要6个指令周期(ARM7上)。 函数的入口和出口使用多寄存器加载/存储指令LDM和STM(Thumb指令使用PUSH和POP)提高函数体的执行效率。 ARM体系结构过程
    发表于 10-17 16:49 6次下载
    高效的C编程之<b class='flag-5'>函数</b><b class='flag-5'>调用</b>

    一种动静结合的恶意程序函数调用图提取方法

    完整准确地提取函数调用图是基于函数调用图进行恶意程序相似性分析的基础。为此,提出一种动静结合的恶意程序
    发表于 02-24 13:52 0次下载
    一种动静结合的恶意<b class='flag-5'>程序</b><b class='flag-5'>函数</b><b class='flag-5'>调用</b>图提取方法

    Linux内核模块函数调用正确方法

    模块之间发生调用关系是常有的事情,下面以两个模块A、B,B使用A模块提供的函数为例,讲解正确使用的方法。
    发表于 04-28 17:00 2774次阅读

    如何在中断C函数调用C++

    之前,我们单片机程序开发时都会面对中断函数。众所周知的,这个中断函数肯定是要用C函数来定义的。我在用C++进行
    发表于 05-09 18:17 0次下载
    如何在中断C<b class='flag-5'>函数</b>中<b class='flag-5'>调用</b>C++

    C程序流程设计之函数

    使程序控制从被调用函数返回到调用函数中,同时把返值带给调用
    的头像 发表于 02-17 14:11 1744次阅读
    C<b class='flag-5'>程序</b>流程设计之<b class='flag-5'>函数</b>

    函数调用时底层会发生什么

    如果你懂得用箱子打包东西,你就能明白函数调用是怎么一回事。 原来,程序运行时每个被调用函数
    的头像 发表于 02-17 14:47 1302次阅读
    <b class='flag-5'>函数</b><b class='flag-5'>调用</b>时底层会发生什么

    C语言函数调用的形式及过程

    C语言函数调用时的数据传递 调用有参函数时,主调函数和被调
    的头像 发表于 03-10 14:28 2852次阅读

    什么是函数调用

    函数调用,就是使用我们已经定义好的函数,或者C语言自带的库函数
    的头像 发表于 04-04 17:21 7583次阅读

    SCL中调用函数的示例

    在此,可插入函数 (FC) 调用函数块 (FB) 调用函数块可作为单实例、多重实例或参数实例进行调用
    的头像 发表于 06-06 10:18 3955次阅读

    python定义函数调用函数的顺序

    定义函数调用函数的顺序 函数被定义后,本身是不会自动执行的,只有在被调用后,函数才会被执行,得
    的头像 发表于 10-04 17:17 2812次阅读

    python函数函数之间的调用

    函数函数之间的调用 3.1 第一种情况 程序代码如下: def x ( f ): def y (): print ( 1 ) return y def f (): print ( 2
    的头像 发表于 10-04 17:17 1571次阅读