Labview实现vi间数据传递的方法汇总 ---子VI、队列、全局变量及UDP/TCP协议传输

这篇具有很好参考价值的文章主要介绍了Labview实现vi间数据传递的方法汇总 ---子VI、队列、全局变量及UDP/TCP协议传输。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文汇总一下不同VI之间数据传递的方式,使大家明确数据传递的几种类型并灵活使用。
本文程序均上传至云端,读者可自行下载学习。

基于目前大家所学到的基础知识,在Labview中简单来说数据类型基本包括数值、字符串、数组、簇、布尔量、引用、路径、枚举量、波形图表等,实际上最常用的数据类型可以简单说就只有四种,数值、字符串、数组、布尔。那么这些数据如果是跨VI的时候是如何传输的呢?传输方式有什么不同呢?数据流方向如何?本文针对这一问题做出归纳整理。

一、跨VI数据传输的方式

当我们使用数据采集卡或者其他硬件采集外部数据时,常出现一个问题,就是我们编写的采集模块程序不能实时的将数据传输到主VI中,如果出现多个采集模块程序同时调用或者对采集速度要求极高的情况下,跨VI传输数据的速度效率等就会受到影响。因为传输时可能并不能将当前数据完整从子VI传到主VI中。

1.1 直接调用子VI传输

这种方式传递数据是最便捷用的最广泛的,那么如何建立并调用子VI呢?请看下面步骤:
创建VI,首先新建一个子VI程序并保存在电脑的某个路径里。
创建子VI接口。在前面板的右上角处由两个方形选项,左侧是接线端,可以定义子VI被调用时的接口,右侧是子VI的图像,被调用时的图标。左侧接线端和控件绑定时的操作步骤为:先鼠标单击某个方块,在单击前面板的控件,当这个方块的颜色不再是白色时,就说明绑定好了。
labview 子面板队列传递,Labview,数据采集,labview,udp,tcp/ip
如上图所示,绑定好的控件在方格图中,如错误簇为淡黄色,字符串为粉色。
设置好子VI后,在需要调用该VI的程序中后面板,右键 — 选择VI — 在保存路径中选中子VI — 右键创建所有输入输出控件。如下图所示
labview 子面板队列传递,Labview,数据采集,labview,udp,tcp/ip
此时,可以在本函数中将数据从这几个控件接口中将数据传入到子VI中,再将经子VI处理过后的数据传递回来。当然这种方式的数据传递是存串行传递的,所以需按照数据流从左到右的方式来整理程序。

1.2 队列数据传输

本章讲解队列之前呢,如果大家想更加详细的了解队列操作的理论,深入理解队列是如何使用的,大家可以去看我之前一篇关于队列介绍的文章,链接我放到下面了,大家可以直接点击跳转:
Labview数据采集–基于AMC和队列的生产者和消费者编程模式:https://blog.csdn.net/m0_52176775/article/details/133681332
队列的数据传输方式呢,题主一共提出两种,一种是软件自带的队列函数,一种就是VIPM中带的AMC队列包,当然题主比较推荐后者,AMC比较稳定高效,且对错误的处理比较灵活。
下面一个图就完好的介绍了队列是如何传输数据的。
labview 子面板队列传递,Labview,数据采集,labview,udp,tcp/ip
第一个VI将想传入第二个VI的数据通过队列暂存在电脑内存中,第二个队列向电脑拿取这部分数据。
那么是如何拿取的呢,我们可以拿取这部分数据的标志是什么呢?
① 队列名称。 入队列的名称和出队列的名称只要一致,就可以告诉出队列函数,我要拿取该名称对应的队列数据。
②同时运行。 保持入队列函数和出队列函数同时运行,这样才能保证数据进入队列时,出队列的VI有数据可以拿,完全做到边生产边消费
③传输速率。 保证采集的速率比传输的速度高,才能将实时产生的数据采集出来,因为队列的性质,传入队列的数据不会消失,拿取数据时按照传入的顺序拿取。 这就造成了,如果传入的数据太快太多,传出队列来不及拿取,拿取道德数据可能是很多秒之前传入的数据,这就使队列失去了其传输的时效性。
看下方VI举例:
labview 子面板队列传递,Labview,数据采集,labview,udp,tcp/ip
这两个VI满足以上三条件的情况下,题主在第一个VI中加入了50ms的延时,以保证采集速度大于传输速度。左侧的VI是将元素中的数值传入队列中,每50ms传一次,右侧是拿取这个数值,实时拿取。并且两个队列满足名称一致的条件,均为 “hello” ,此时我们将左侧数值中输入一个随机数值6,观察右侧的变化,此时右侧数值随着左侧发生变化,数值实现了从一个VI到另一个VI的传递。
不仅仅是数值,还可以通过队列传递字符串、数组等的数据。
本文中的程序在文章结尾上传云端,同学可自行下载学习。

1.3 全局变量

题主之前在讲解局部变量和全局变量的文章中介绍过一次通过全局变量传输数据的用法,文章链接放在这里,大家如果有想理解的可以直接点击链接查看。
Labview局部变量、全局变量、引用、属性节点、调用节点用法理解及精讲:
https://blog.csdn.net/m0_52176775/article/details/135567798
全局变量建立步骤:后面板右键------结构------全局变量-------双击进入-------在全局中放入控件------回到原VI点击全局变量-----选择我刚刚建立的控件,此时就可以将数据传输到全局变量了,此时将全局变量以vi的形式保存在电脑中,可以在其他vi中调用该变量。使用该变量传递数据需要注意以下几点:
① 调用该全局变量的VI必须同时都在运行。
② 全局变量中可以同时放入多个数量、多种类型的控件。
③ 可以在多个VI中拿取全局变量的值,但对于同一个控件,只能有一个输入。
数据流的方向如下图所示:
labview 子面板队列传递,Labview,数据采集,labview,udp,tcp/ip
除传递数值之外,全局变量也可以用同样的方式传递字符串、数组等所有数据。并且该方式的优点在于:传输速度高、可以多线并行、满足多个控件同时传输的特点。

二、使用通讯协议实现数据传输

Labview佩戴了多种传输接口,如它自带的UDP协议接口,TCP/IP协议接口等,本章以范例为基础,讲解通过协议方式传输数据的方法,首先以UDP协议为例讲解一下协议传输的大致原理,如下图所示:
labview 子面板队列传递,Labview,数据采集,labview,udp,tcp/ip

2.1 UDP数据传输

那么UDP的程序如何去写呢,labview配备了强大的范例功能,大家可以在Labview中点击:帮助 — 查找范例 — 输入关键词:UDP — 搜索 — 打开:Simple UDP 项目
labview 子面板队列传递,Labview,数据采集,labview,udp,tcp/ip
发送方从端口处将数据发送到本地端口,UDP向电脑申请了用于发送数据的端口,最终两程序同时运行时,数据由发送方发送,由接收方获取,完成数据传输。

2.2 TCP/IP协议数据传输方式

TCP/IP数据传输的方式时类似于UDP的,该传输方式相对于UDP传输方式来讲目标明确、传输数据稳定,更适合于不丢包数据的传输条件下。同样的,我们打开范例搜索:帮助 — 查找范例 — 输入关键词:TCP — 搜索 — 打开:Simple TCP 项目
labview 子面板队列传递,Labview,数据采集,labview,udp,tcp/ip
在该程序中,服务器同样开启一个电脑端口向电脑内部发送数据,客户端通过寻找端口的方式向该端口接收来自于上一个服务器VI的数据,完成数据的传输,后期大家可以根据需要自行选择这两个项目程序做项目传输的二次开发工作。这里提一嘴UDP/TCP这两个协议传输数据的区别:
UDP: 适用于 传输速度快,要求时效性 的程序,丢包率比TCP要多。比如,开视频电话或者打游戏首先需要的是时效性而非流畅性,因此采用UDP的传输方式。
TCP: 适用于 数据稳定传输,要求稳定性 的程序,丢包率低,传输稳定。比如,实验室数据监测,要求的是数据的稳定性和不丢包,因此采用TCP的方式传输。

本文仅讲解了UDP/TCP通讯协议的传输方式,TCP等其他方式除本程序自带之外,还可以在VIPM(lanbiew安装时自带的软件),中自行搜索相关协议,在范例基础上并完成项目的开发工作。

提供一个开发经验: 大家可以在软件开发时,建议多借鉴相关程序或范例安装包等完成程序的二次开发,由于目前程序相对成熟,各类安装包及二次开发文件盛行,避免了大家直接从头开始浪费时间。直接调用子程序的方式可以节省更多的开发时间。

本文提供文章中的范例程序,下载地址:
链接: https://pan.baidu.com/s/1bGuJs-yLcwpPZqW70tIUFQ
提取码:6666文章来源地址https://www.toymoban.com/news/detail-846461.html

到了这里,关于Labview实现vi间数据传递的方法汇总 ---子VI、队列、全局变量及UDP/TCP协议传输的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 将 VI 升级到较新的 LabVIEW 版本

    将 VI 升级到较新的 LabVIEW 版本 LabVIEW 向前兼容,这意味着您可以在较新版本的 LabVIEW 中打开来自先前版本 LabVIEW 的 VI。升级到更高版本的 LabVIEW 使您可以重复使用既有的代码,同时还集成了 LabVIEW 的最新改进。 本教程将引导您了解如何将您的 LabVIEW 文件升级到较新版本的

    2024年02月09日
    浏览(40)
  • LabVIEW图形化的AI视觉开发平台(非NI Vision)VI简介

    今天想和大家分享的是:仪酷LabVIEW AI视觉工具包的VI简介,如介绍内容有误,欢迎各位朋友们帮忙纠正~ 已经安装好的AI工具包位于程序框图-函数选板-Addons-VIRobotics-opencv_yiku,内容包括:Mat类型(矩阵)的操作、摄像头采集、图片文件读写、基本算子、视频读写、神经网络调

    2024年02月14日
    浏览(34)
  • mac m1上esc键失灵不能退出vi解决方法

    这种情况下,一般是由于打开了siri,导致热键冲突所致 关闭siri方法: 1,打开系统偏好设置 2,打开siri 3,关闭siri 4,删除历史记录

    2024年02月13日
    浏览(50)
  • linux下vi或vim操作Found a swap file by the name的原因及解决方法--九五小庞

    在linux下用vi或vim打开Test.java文件时 [root@localhost tmp]# vi Test.java 出现了如下信息: E325: ATTENTION Found a swap file by the name \\\".Test.java.swp\\\" owned by: root dated: Wed Dec 7 13:52:56 2011 file name: /var/tmp/Test.java modified: YES user name: root host name: localhost process ID: 26153 (still running) While opening file \\\"Test.java

    2024年02月10日
    浏览(43)
  • vi&vim复习

    vivim常用命令 vi filename 打开或新建文件,并将光标置于第一行首 vi +n filename 打开文件,并将光标置于第 n行首 vi + filename 打开文件,并将光标置于最后一行首 vi -r filename 在上次正用 vi编辑时发生系统崩溃,恢复文件 vi file1....filen 打开多个文件,依次编辑 命令行模式 (comma

    2024年02月19日
    浏览(31)
  • linux系统 VI 命令

    一、 进入vi的命令 二、 移动光标类命令 三、 屏幕翻滚类命令 四、 插入文本类命令 五、 删除命令 六、 搜索及替换命令 七、 选项设置 八、 最后行方式命令 九、 寄存器操作 一、 插入文本 命令 描述 i 在当前字符前插入文本 I 在行首插入文本 a 在当前字符后添加文本 A 在

    2024年02月01日
    浏览(33)
  • vi命令使用详解

    命令模式:通过 命令 对文件进行常规操作 打开文件时进入命令模式 (vi的入口) 通过命令对文件进行常规操作,如定位、翻页、复制、粘贴、删除等在图形界面下通过鼠标或快捷键实现的的操作 末行模式:执行 保存、退出 等操作 若要退出vi返回控制台,需在末行模式下输

    2024年02月09日
    浏览(32)
  • linux vi命令详解

    linux vi命令详解 刚开始学着用linux,对vi命令不是很熟,在网上转接了一篇。 vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指 令。由于 对Unix及Linux系统的任何版本,vi编辑器是完全相同

    2023年04月17日
    浏览(44)
  • vi编辑器命令

    vi提供两种操作模式:输入模式(insert mode)和指令模式(command mode)。在输入模式下,用户可输入文本资料。在指令模式下,可进行删除、修改等各种编辑动作。 在输入模式下,按Esc键切换到指令模式下。 在指令模式下,按输入指令(i、a、o等)进入输入模式。 直接键入“

    2023年04月26日
    浏览(42)
  • 文件编辑(vi/vim)

    目录 1、命令模式 1.1、dd(字母d连按两次):将光标所在行文件内容删除 1.2、ndd:删除光标所在行及其后续的n行内容 1.3、u:撤回上次命令(操作) 1.4、Ctrl r:恢复被撤销掉的命令 1.5、nyy:从光标所在行开始,连续拷贝n行内容(包括光标所在行) 1.6、p:粘贴拷贝到的内容

    2023年04月15日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包