当前位置: 首页 > news >正文

LabVIEW中的数据通信方法

LabVIEW中的数据通信方法

LabVIEW中包含多种数据通信方法,不同的方法适用于不同的场景。确保在应用程序中使用正确的数据通信方法。

数据通信类型:

数据流元素

缓冲接口

变量接口

应用场景:

在多数程序框图对象间发送数据。

在位置间发送数据,此时要求避免或丢失数据值。

在内存中存储容易获取的值,目标为获取最新值。谨慎使用以避免竞争状态。

范例:

从VI输出传输数据至VI输入。

采集波形;发送消息或命令;流输出图像。

监控当前温度;监控系统状态。

类别:

— 连线

— 移位寄存器

— 反馈节点

— 通道线

内部终端或PC

— 队列

— RT  FIFO

— 用户事件

— 异步消息传递通信(AMC)参考库已联网

— 网络流

— TCP

— 简单TCP消息传递(STM)参考库内部FPGA

— 终端范围的FIFO

— VI定义的FIFO

— DRAMFPGA至主机或主机至FPGA

— DMA FIFOFPGA至FPGA

— 点对点(P2P) FIFO

内部终端或PC

— 局部变量

— 全局变量

— 功能全局变量(FGV)

— 单进程共享变量

— 数据值引用

— 当前值表格(CVT)已联网

— 网络发布共享变量

— 编程共享变量API

— Web服务

— UDP内部FPGA

— 全局变量

— 存储器项

— 寄存器项FPGA至主机或主机至FPGA

— 读取/写入控件

— NI扫描引擎和变量

— 用户定义I/O变量


数据流元素

如要发挥LabVIEW的数据流编程环境优势,应将连线、移位寄存器、反馈节点和通道线作为应用程序的主要数据通信方法。

方法

属性

连线

§   程序框图对象之间的主要数据传输

移位寄存器

§   循环间的主要数据传输

反馈节点

§   代码循环间的主要数据传输(无需循环)

通道线

§   在并行代码段之间进行异步通信的主要数据传输


缓冲接口

从一个位置发送数据至另一个位置,且不想覆盖或丢失值的情况下使用缓冲接口。缓冲接口通常表示为单元素或多元素FIFO(先进先出)缓冲区,一个或多个写入方添加数据至缓冲区一端,读取方从另一端接收数据。

内部终端或PC

方法

属性

队列

§   灵活大小和访问选项

§   非确定性

RT FIFO(Real-Time模块)

§   确定性

§   轮询模式(默认)确定性地处理读取/写入等待时间,但占用大量的CPU系统开销。

§   阻隔模式处理读取/写入等待时间时优化了CPU使用,但非确定性地处理。

§   由于固定大小和限制访问选项的原因,灵活性不如队列。

用户事件

§   应用程序不同部分间的事件触发通信

§   响应对象的编程改动

异步消息传递通信(AMC)库

(通过ni.com获取)

§   进程内和进程间消息通信

§   相对于队列,设计消息传递架构时更易于使用

§   包含“队列消息处理器”(QMH)模板

§   注:此内容符合Sample  Code License Terms,通过ni.com/samplecodelicense打开条款。

已联网

方法

属性

网络流

§   1:1通信

§   比TCP易于实现

§   自动处理未连接和重新连接

§   单向

§   仅在Windows和RT系统上可用。

TCP

§   广泛适用于需要网络连接至不支持网络流设备的应用

§   低端协议增加了执行的复杂性

简单TCP消息传递(STM)参考库

(通过ni.com获取)

§   消息访问控制低端TCP函数

§   用于实现1:N(单个服务器对多个客户端)的通信

§   注:此内容符合Sample  Code License Terms,通过ni.com/samplecodelicense打开条款。

内部FPGA

方法

属性

终端范围的FIFO(FPGA模块)

§   执行选项指定FIFO使用的存储类型:触发器、查找表或块内存

VI定义的FIFO(FPGA模块)

§   执行选项指定FIFO使用的存储类型:触发器、查找表或块内存

§   通过复制每个实例的资源,避免可重入子VI的资源冲突。

§   利于用于多个项目的VI可重用代码

§   在项目浏览器窗口不可见或不可自定义

DRAM(FPGA模块)

§   使用内存项或CLIP接口与动态随机访问内存(DRAM)交互

§   相对于终端范围或VI定义的FIFO,提供了大量的缓冲内存控件

§   非确定性访问延时

§   并非全部终端可用

FPGA至主机或主机至FPGA

方法

属性

DMA FIFO(FPGA模块)

§   使用直接内存访问(DMA)传输大量数据至主机或接收来自主机的数据

FPGA至FPGA

方法

属性

点对点(P2P) FIFO(FPGA模块)

§   终端间的1:1通信


变量接口

在内存中存储值,且需读取方和写入方在使用最小或无流控制的情况下访问该值时使用变量接口。注意,在需要获取最新值,且允许新值覆盖之前的值的情况下使用变量。谨慎使用以避免竞争状态。

内部终端或PC

方法

属性

局部变量

§   存储可通过单个VI访问的数据

全局变量

§   存储可通过同一LabVIEW应用实例中多个VI访问的数据

功能全局变量(FGV)

§   使用未初始化寄存器存储全局数据的VI

§   可实现简单全局变量和复杂的数据结构(例如,堆栈或队列缓存)

§   通过定义指定操作避免了竞争状态,调用代码可对变量执行指定操作

单进程共享变量

§   确定性选项可用

§   可扩展至网络发布的使用场景

数据值引用

§   存储大的数据集

§   帮助管理内存并避免数据副本

当前值表格(CVT)

(通过ni.com获取)

§   通用数据存储,用于带有独立组件的应用程序变量

§   通过集中I/O操作,比共享变量使用更少的计算资源

§   注:此内容符合Sample  Code License Terms,通过ni.com/samplecodelicense打开条款。

已联网

方法

属性

网络发布共享变量

§   确定性选项可用

§   监控值的理想选择

§   在网络数据服务器上存储值(共享变量引擎)

§   用于1:N和N:1网络配置的内置连接管理器

编程共享变量API

§   相对于静态节点绑定,通过提供对变量的动态访问增强了设计的可扩展性

§   通过单个变量API函数访问多个变量

§   访问网络发布的I/O变量

Web服务

§   使用标准HTTP协议的网络数据通信

§   数据流标准MIME数据类型。例如,文本、图像和视频

§   使用LabVIEW VI生成和部署网络服务

UDP

§   对于设备进程间的低端通信,支持单点传送(1:1)和多点传送(1:N)

§   应用使用的协议性能如高于TCP,无需要求无损数据传输

§   低端协议增加了执行的复杂性

§   不能确保客户端接收到数据

内部FPGA

方法

属性

全局变量

§   存储可通过同一LabVIEW应用实例中多个VI访问的数据

存储器项(FPGA模块)

§   可将值存储为多个数据点

§   执行选项指定存储项使用的存储类型:块内存、查找表或DRAM

§   终端范围(在项目中配置)和VI定义(在重入VI中配置)选项

寄存器项(FPGA模块)

§   可在每个时钟周期发布状态信息

§   终端范围(在项目中配置)和VI定义(在重入VI中配置)选项

§   比FIFO占用更少的FPGA资源

FPGA至主机或主机至FPGA

方法

属性

读取/写入控件(FPGA模块)

§   读取或写入FPGA终端顶层FPGA VI的输入控件或显示控件。

NI扫描引擎和变量

(终端支持FPGA模块 + NI扫描引擎)

§   FPGA I/O数据与RT主机间的简单、周期性通信

§   减少了FPGA终端与RT主机间传输I/O数据所需的代码

用户定义I/O变量(FPGA模块)

§   在混合模式使用扫描引擎时发送用户定义数据

§   FPGA VI和LabVIEW  RT主VI之间的数据传输

§   传输自定义FPGA处理的I/O数据

上文中提到的例子和资料,均在word中的附件里,可点击下载。

 

相关文章:

  • 排序链表,
  • ESP32-arduino,超好玩的定时器!
  • Python selenium 页面滚动
  • 【FPGA教程案例69】硬件开发板调试9——通过ila在线调试DDS,并通过HDMI接口在显示器上显示正弦波形
  • MeterSphere专题之: 配套的浏览器插件:chrome-extensions
  • 【FPGA教程案例70】硬件开发板调试10——vivado程序固化详细操作步骤
  • 计算机毕业设计ssm青年志愿者社团管理36uiu系统+程序+源码+lw+远程部署
  • 数据结构————树
  • 【操作系统】 第二章 —— 系统调用 中断 异常
  • 移动端测试
  • Cmake、Qt与VS编译VTK(生成QVTK)
  • Java——JDBC(Java DataBase Connectivity)数据库连接技术
  • Express
  • java学习之springcloud之服务调用+服务降级+服务网关篇
  • 常见的设计模式
  • [case10]使用RSQL实现端到端的动态查询
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • 3.7、@ResponseBody 和 @RestController
  • canvas 五子棋游戏
  • ES2017异步函数现已正式可用
  • JavaScript 奇技淫巧
  • Javascript设计模式学习之Observer(观察者)模式
  • Java比较器对数组,集合排序
  • PAT A1092
  • session共享问题解决方案
  • TCP拥塞控制
  • Vue2 SSR 的优化之旅
  • 三栏布局总结
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 自制字幕遮挡器
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (SpringBoot)第二章:Spring创建和使用
  • (多级缓存)多级缓存
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (一)SpringBoot3---尚硅谷总结
  • (转)c++ std::pair 与 std::make
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .NET Micro Framework初体验(二)
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .NET简谈设计模式之(单件模式)
  • @modelattribute注解用postman测试怎么传参_接口测试之问题挖掘
  • @param注解什么意思_9000字,通俗易懂的讲解下Java注解
  • [ C++ ] STL---string类的使用指南
  • [20150707]外部表与rowid.txt
  • [23] GaussianAvatars: Photorealistic Head Avatars with Rigged 3D Gaussians
  • [Android]一个简单使用Handler做Timer的例子
  • [BT]小迪安全2023学习笔记(第15天:PHP开发-登录验证)
  • [BZOJ4554][TJOI2016HEOI2016]游戏(匈牙利)