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(先进先出)缓冲区,一个或多个写入方添加数据至缓冲区一端,读取方从另一端接收数据。
方法 | 属性 |
队列 | § 灵活大小和访问选项 § 非确定性 |
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打开条款。 |
方法 | 属性 |
终端范围的FIFO(FPGA模块) | § 执行选项指定FIFO使用的存储类型:触发器、查找表或块内存 |
VI定义的FIFO(FPGA模块) | § 执行选项指定FIFO使用的存储类型:触发器、查找表或块内存 § 通过复制每个实例的资源,避免可重入子VI的资源冲突。 § 利于用于多个项目的VI可重用代码 § 在项目浏览器窗口不可见或不可自定义 |
DRAM(FPGA模块) | § 使用内存项或CLIP接口与动态随机访问内存(DRAM)交互 § 相对于终端范围或VI定义的FIFO,提供了大量的缓冲内存控件 § 非确定性访问延时 § 并非全部终端可用 |
方法 | 属性 |
DMA FIFO(FPGA模块) | § 使用直接内存访问(DMA)传输大量数据至主机或接收来自主机的数据 |
方法 | 属性 |
点对点(P2P) FIFO(FPGA模块) | § 终端间的1:1通信 |
在内存中存储值,且需读取方和写入方在使用最小或无流控制的情况下访问该值时使用变量接口。注意,在需要获取最新值,且允许新值覆盖之前的值的情况下使用变量。谨慎使用以避免竞争状态。
方法 | 属性 |
局部变量 | § 存储可通过单个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,无需要求无损数据传输 § 低端协议增加了执行的复杂性 § 不能确保客户端接收到数据 |
方法 | 属性 |
全局变量 | § 存储可通过同一LabVIEW应用实例中多个VI访问的数据 |
存储器项(FPGA模块) | § 可将值存储为多个数据点 § 执行选项指定存储项使用的存储类型:块内存、查找表或DRAM § 终端范围(在项目中配置)和VI定义(在重入VI中配置)选项 |
寄存器项(FPGA模块) | § 可在每个时钟周期发布状态信息 § 终端范围(在项目中配置)和VI定义(在重入VI中配置)选项 § 比FIFO占用更少的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中的附件里,可点击下载。