完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
在一台PC上面如何实现两个Vi的数据交互,或者说如何在编写一个Vi(假设为A),这个Vi预留数据输出接口,以后有新的Vi(假设为B)的时候只要知道这个接口 就可以和A通讯。
××××××××××××××××××××××××××××××××××××× PS:如果是基于C++编程的话,可以通过 油槽等方式解决。 但是labview里面如果实现还真不知道 PS:最好不要涉及到全局变量,有全局变量的程序 大都不好。 PS:当然了 也可以使用PC上面两个串口通讯,不过这有些麻烦。 |
|
相关推荐
22个回答
|
|
|
你难道没有考虑通过文件来进行数据交换吗?
|
|
|
|
|
|
新手,知识量有限。想到个笨办法供参考。
A.VI运行后,生成一个A.txt文件,将传输数据保存在这个文件中。然后扫描B.txt文件是否存在(刚开始肯定没有)。 B.VI运行后,扫描A.txt文件是否存在:不存在,小延时再扫描;存在,读取A.txt文件,然后删除。再生成B.txt文件,并将回传数据保存在这个文件中。 A.VI扫描B.txt文件是否是否存在:不存在,小延时再扫描;存在,读取B.txt文件,然后删除。再生成A.txt文件,并将回传数据保存在这个文件中。 。。。。。。 为避免错误,我觉得有两点要注意: 1.为保证文件没写完就被读取,文件应设置固定字节大小。如果文件存在,先获取其大小值(即文件字节数)。如果等于设置值,再读取。 2.为保证程序上次运行留下的A.txt和B.txt文件,不影响本次程序运行。这样就要求,先运行A.VI,并让它检查A.txt和B.txt文件是否存在。如果存在,就先删除。 |
|
|
|
|
|
A是一个队列状态机,创建一个case,解析B传来的数据。新建B之后,根据A队列的名称,发送相应的数据即可。或者使用Actor framework,更方便。
|
|
|
|
|
|
看看!!!想看看!!
|
|
|
|
|
|
使用队列,datasocket,本机tcp通讯都可以。顺便说一下,全局变量也没有楼主想的那么糟糕
|
|
|
|
|
|
原来方法那么多!路漫漫其修远兮,吾将上下而求索~~~
|
|
|
|
|
风之追逐 发表于 2015-12-29 16:59 1)使用硬盘文件 交互数据是不错的想法,不过有读写的竞争冲突。而且如果数据量比较大的话,速度也会不好。 我以前做C++编程的时候 ,使用这个方法。 2)如果对于实时性较高的程序,每个10几个微秒就对硬盘访问一次,也是对CPU很大的负担。 3)所以基于内存的交互是比较合适方面。 最后谢谢 你的回答。。 |
|
|
|
|
|
以前玩单片机的,电脑程序刚接触,谢谢提醒。正努力学习中,早晚都用得到
|
|
|
|
|
sushu 发表于 2015-12-29 18:09 多谢版主指点。。。队列已经实现。 有个问题问下:在同一PC上面, 同一个名字的队列是可以被全部运行在这个PC上面的VI访问的。 这个说法正确吗? 关于Actor Framework,我正在查资料,估计要到下午才能实现
|
|
|
|
|
|
我是楼主的马甲. 首先感谢你的提醒,队列这个策略已经实现,代码在回复版主的帖子中已经上传。不过回帖正在审核。 datasocket 和TCP 都是需要使用本地的网口上吧。。? 这样不太好。 网口以后会用于连接Basler的相机。 所以不能占用。 谢谢 |
|
|
|
|
|
|
|
|
|
|
|
共享变量应该也是个不错的选择……
|
|
|
|
|
|
说的 也是 我试一下。。 我就是担心 会影响到数据采集的稳定性。 比如:Basler 500万的相机 ,按通常的14帧秒算账的话,,占用的带宽是很庞大的。 况且,数据从网卡里面走了下,速度可能会降低。 不过我还是试下 你说的方案。。 |
|
|
|
|
sushu 发表于 2015-12-29 18:09 桑心啊 版主。。 在同一个项目的两个Vi 可以使用队列实现数据交换。但是如果两个VI 不在一个项目里面,就不行了。。。 |
|
|
|
|
|
刚刚测试了DataSocket这个方案,在两个项目里面是可以通讯的。 字母 中文都可以。 不过有个问题,就是我发现的时候 就发送一次,,但是却可以接受无数次。。 这个不好。 缓冲区没有清理机制。 另外我也测试了 一个端口从打开到关闭的时间,合计需要250-300mS。 |
|
|
|
|
高顺周 发表于 2015-12-30 21:10 datasocket打开时间没测试过,个人觉得数据传输数度还是很快的,你应该看过用他传递波形数据的吧,数据传输还是很流畅的,其实最优方案还是队列啦。我说那些是给你拓展一下思路 |
|
|
|
|
|
|
|
|
|
|
|
不同的项目文件夹。还没有研究过,不能是一个项目吗? |
|
|
|
|
|
要是同一个项目的话, 就方便多了。。 可惜不是的。 所以我现在还是使用老方法了。。串口通讯。 谢谢 |
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
211 浏览 0 评论
请教大神,在labview里面对实时扫描资源中的C系列模块NI9234进行配置发生非预期错误
1709 浏览 0 评论
1585 浏览 0 评论
LABVIEW 2023 Q1调用python后一直报错1671
1960 浏览 2 评论
5207 浏览 3 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 15:08 , Processed in 1.475137 second(s), Total 112, Slave 92 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1714