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

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

3天内不再提示

labview中事件回调的使用

lvxisi 来源:lvxisi 作者:lvxisi 2023-08-24 16:38 次阅读

最近测试了labview调用dll中的回调函数相关功能,遇到了一些问题,现在做一下整理和总结,相关的内容比较多,分多篇来写。

在LabVIEW中,新手经常将所有的程序放在事件结构中来执行,有时还不取消前面板锁定,一个事件触发没有执行完成时,又去执行另外一个事件,导致界面锁死,必须从任务管理器里面关闭程序才行。

wKgZomTnFqOAMqVvAAKtoIyqNeY810.jpg

进一步优化,会采用生产者-消费者结构,在事件结构中触发,在消费者循环中,处理相关的程序。但如果要处理的程序时间较长,还是会导致队列阻塞,不能及时处理相应的程序。此时,便可以采用事件回调的方式来来解决。

wKgZomTnFqOALZiXAALB0o0_JfI308.jpg

先简单介绍一下回调函数,是一种在编程中常见的概念,它通常用于在特定事件发生时执行预定义的操作。回调函数可以作为参数传递给其他函数,以便在需要时被调用,从而实现定制的事件处理和逻辑分离。详细的概念网上很多,可以感兴趣可以查一下。

在labview中,无法实现将函数的地址指针传递给dll的,实际测试过VI引用是不可以的。可通过包装器的方式来实现,网上这方面的信息很少,个人理解,就是额外做一个中间层,将labview和dll进行连接。更进一步,就用其他语言如c++,编写好相关的函数指针,完全实现既定的功能,之后再打包成中间的dll,在labview中进行调用。

labview本身,是支持回调函数的,只不过,这种机制是在内部进行实现(也许还支持其他的交互方式,本人没有测试出来)。可以利用此功能,编写一些异步的程序,解决一些程序执行时间较长的问题。

1)搜索找到“事件回调注册”,这两个是同样的东西,在不同的文件路径下面,选择一个即可。

wKgaomTnFqOAMiF2AABhurO2fqQ366.jpg

2)拖放到程序框图内,这个函数包含了事件、VI引用还有用户参数。

wKgZomTnFqOAfYF8AAEGbSpmYyI094.jpg

3)这里写一个简单的测试函数,a+b=sum。其中a传入值,b和sum传入引用。

void Add(int a, int& b, int& sum) {

sum = a + b;

}

这几个参数,作为函数的输入,连接到用户参数中上面。

wKgaomTnFqOAEJNrAACAEelHcmM625.jpg

4)选择这个回调函数的触发方式,这里使用A的值改变。将A的引用连接到“事件”接线端,选择相应的事件。

wKgaomTnFqOAUrFcAAGpI-YcXmg316.jpg

5)在VI引用上,右键选择“创建回调VI”,可以自动生成一个用于执行的VI函数。

wKgZomTnFqSATtAMAAEgo5mnho8496.jpgwKgaomTnFqSAQXvMAAGGlQfWglo837.jpg

这个生成的VI与自己编写的VI静态调用有所区别,界面显示多了个*,右键查看是选择了“严格类型VI的引用”。

wKgaomTnFqOAQUmBAAH37j7997k875.jpg

6)编程完成相关函数功能,保存VI。

wKgZomTnFqSAMjnRAAFT_7Srmcs758.jpg

7)编写简单的循环和延时,保证程序一直是执行状态。

wKgZomTnFqSAESfKAAFAftMgRv4541.jpg

8)程序测试。输入A=1,B=1,运行软件。软件运行时,程序没有执行。当用于触发的A达到“值改变”的条件时,程序运行,sum得到数据为2。

wKgaomTnFqSAe_LiAAD_i-z5EHM316.jpg

9) 后续改变A的数值,发现整个sum没有发生变化,A的数据是以值的类型传入的,后面再改变数据,也无法改变最初传入的数据值。

wKgaomTnFqeAFcBpAAB4W6jkJHU658.jpg

10)修改B的数据,再修改A触发程序,可以以看到程序运行。说明只需要注册一次,程序可以触发多次。

wKgZomTmHWuAIWsAAAFPqHy_OUg638.png

11)在常规用事件结构处理的事件,在“事件检测窗口”中,都是有记录的。但是利用事件回调是没有记录的,说明这个事件回调和事件结构没有直接关系。

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

    关注

    1959

    文章

    3651

    浏览量

    321787
  • 调试
    +关注

    关注

    7

    文章

    571

    浏览量

    33853
  • 程序
    +关注

    关注

    115

    文章

    3753

    浏览量

    80709
  • 回调函数
    +关注

    关注

    0

    文章

    87

    浏览量

    11525
收藏 人收藏

    评论

    相关推荐

    GUI函数

    GUI函数在哪里编写?
    发表于 03-21 12:37

    函数

    C++内编写的DLL中有很多事件都是通过函数来反馈,LABVIEW如何可以调用呢?
    发表于 11-06 15:36

    labview怎么处理dll函数输出值

    ); PrintLastFlashError(false);} }请问函数一的参数值progressInPercent, remainingTimeInS,
    发表于 02-19 10:21

    关于labview调用dll的事件并回问题

    我用c#写了一个dll,其中方法add中有一个事件MyEvent(图1),我在labview调用了这个方法并使用了事件(图2),
    发表于 11-22 10:55

    详解java 机制

    代码示例 接下来看一下的代码示例,代码模拟的是这样一种场景:老师问学生问题,学生思考完毕回答老师。 首先定义一个接口,只有一个方法tellAnswer(int answer),
    发表于 09-28 13:14 0次下载

    LabWindows/CVI 程序 函数设计

    函数是系统框架设计中非常重要的一种手段,所谓函数(callback )是指一个通过函数指针调用的函数。
    发表于 05-03 16:54 1.1w次阅读
    LabWindows/CVI 程序 <b class='flag-5'>回</b><b class='flag-5'>调</b>函数设计

    函数的详细资料说明

    异步事件的处理,首先将异步事件发生时需要执行的代码编写成一个函数,并将该函数注册成为函数,这样当该异步事件发生时,系统会自动调用事先注册好的函数。
    发表于 02-28 08:00 6次下载
    <b class='flag-5'>回</b><b class='flag-5'>调</b>函数的详细资料说明

    5个使用带有中断的的技巧

    是对更高级别软件传递到函数的可执行代码的引用。这些能够极大地提高嵌入式软件的可移植性和重用性,但是根据它们的定义,它们需要使用函数指针,如果不仔细使用,可能会非常危险。以下是在
    的头像 发表于 08-09 09:18 5028次阅读
    5个使用带有中断的<b class='flag-5'>回</b><b class='flag-5'>调</b>的技巧

    C语言函数的函数

    来源:嵌入式客栈 1 什么是函数?首先什么是呢? 我的理解是:把一段可执行的代码像参数传递那样传给其他代码,而这段代码会在某个时刻被调用执行,这就叫做回
    的头像 发表于 09-11 09:57 4083次阅读

    嵌入式开发软件函数的使用

    在嵌入式开发软件函数是经常接触的一种软件设计方法,像我们的事件处理机制基本上都会使用到函数。
    的头像 发表于 04-29 08:57 2201次阅读

    根据机制注册事件并处理VI

    通过事件注册函数(Register Event Callback)注册一个VI,在事件发生时会运行该回VI,通常用于注册和处理.N
    的头像 发表于 11-24 09:15 2142次阅读

    函数指针和函数的使用方法

    了解开发语言的朋友应该都会对函数有所了解,在很多的程序开发语言中都能看到的身影。很多场景下,当某个条件成立以后我们希望代码执行某些指定的部分,这个时候可以考虑使用回
    的头像 发表于 04-10 15:08 1032次阅读

    C语言|函数的不同用法

    函数是个高级操作技巧,也是日常项目中常常使用到的技能。之所以说函数是个高级操作技巧,是因为它让异步操作更加方便,众所周知程序执行分为同步操作和异步操作,同步操作故名思意就是按代
    发表于 07-10 10:34 1206次阅读

    ​​嵌入式函数的实现方法

    函数的命名规范没有固定的标准,但是根据通用惯例和编码规范,函数的命名应该能够反映函数的作用和功能,让其他开发者能够快速理解并使用。
    发表于 03-04 14:49 612次阅读

    函数(callback)是什么?函数的实现方法

    函数是一种特殊的函数,它作为参数传递给另一个函数,并在被调用函数执行完毕后被调用。函数通常用于事件处理、异步编程和处理各种操作系统和框架的API。
    发表于 03-12 11:46 2588次阅读