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

【NI-RIO入门】理解Windows、Real Time与FPGA之间数据通信的原理

于NI kb摘录

1.概述

        对于NI RIO系列设备(CompactRIO、sbRIO、myRIO等)进行编程时,需要注意有三个不同的组件。

  • 人机界面 (HMI) 。有时称为“主机”,为用户提供图形用户界面(GUI),用于监控系统状态和设置操作参数。使用 HMI 是可选的,因为 RIO 产品可以编程为无头运行,并且有些产品可以直接连接到嵌入式用户界面,但是当实施 HMI 时,它们可以采用 Windows 台式计算机、平板电脑或触摸面板的形式以计算机为例。
  • 实时(RT)处理器:RT 处理器运行主要的实时程序,并且允许 RIO 可靠地执行具有特定时序要求的程序。
  • 现场壳编程门阵列:FPGA是一种可重新编程的硅芯片,是嵌入式系统的核心。FPGA 将机箱 I/O 直接连接到 RT 处理器,无需通过总线,与其他控制器架构相比,系统响应的控制延迟非常低。由于 FPGA 通过 LabVIEW FPGA 模块在硬件而不是软件中运行其代码,因此其速度和可靠性通常用于使用高速缓冲 I/O、快速控制循环或自定义信号过滤的应用。

        HMI、RT 和 FPGA 在 LabVIEW 项目中都有自己独特的编程位置,并且每个组件内部和组件之间的通信方法也不同。本白皮书阐述了这些方法及其差异。下图显示了这些组件如何交互(假定 PC 用作 HMI)。

2.调用IO

        在深入研究不同的通信方法之前,了解数据如何从 RIO 目标上的物理输入和输出端口传输到嵌入式系统组件非常重要。使用CompactRIO时,可以通过三种方式访问​​I/O:

  1. 对于实时(NI-DAQmx)模式,数据通过处理器通过 NI-DAQmx VI 读取。
  2. 对于实时扫描(IO变量)模式,数据通过FPGA发送,但最终通过将IO节点拖放到实时VI来在处理器上访问。
  3. 对于LabVIEW FPGA模式,通过将IO节点拖放到FPGA VI中,可以直接从FPGA内部读取I/O。

        编程模式由 LabVIEW 项目中模块旁边的文本指示。

        下图显示了每种模式如何通过不重叠的唯一路径发送 I/O 数据。

        请注意,并非所有 CompactRIO 都支持使用 NI-DAQmx 进行编程。请参阅文档了解哪些型号的 CompactRIO 支持使用 NI-DAQmx 进行编程。 

3.标签、流、消息

        对 RIO 目标进行编程时,了解三种通信范例非常重要: 

        标签类型有时称为当前值类型,用于传达最新值。标签的一个示例是操作员通过 HMI 给出的控制设定点。该标签不需要传达控制设定点的所有历史数据,而只需传达操作员输入的最新值。此外,由于不需要所有先前设定点的历史数据,因此不能保证标签传输。无保证传输的这一方面有时被称为“有损”通信。 

        相比之下,流类型使用缓冲来传输每个数据点,其中吞吐量比延迟更重要。流通信的一种用例是通过 FPGA 将所有温度数据传输到 RT 处理器以记录到文件中。在这种情况下,历史数据是必要的,因此每个数据点的传输都得到保证。有保证的传输的这个方面被称为“无损”通信。 

        当需要保证信息的传递并且具有低延迟时,使用最后一种通信类型,即消息。紧急停止命令是消息通信类型的一个示例。在下表中,通信选项将指定为标签、流或消息类型。在大多数情况下,由于该选项的保证传递方面,可以支持流类型的通信选项也将支持消息类型。下表总结了这些通信类型。 

通讯类型基本特征可选功能表现
标签仅当前值,定期读取动态查找、分组管理低延迟、高通道数
缓冲、阻塞(超时)多层缓冲高吞吐量
消息缓冲、阻塞(超时)确认数据传输低延迟

 4.通信选型摘要

        

        下表提供了 HMI、RT 处理器和 FPGA 之间不同通信选项的最高级别概述。适用时请参阅更详细的表格。单击各个链接可查找有关该通信选项的更多详细信息。

From\ToHMIRTFPGA
HMI

Tag

  • Local Variable
  • Global Variable
  • Notifiers
  • Functional Global Variable (FGV)

Stream

  • Queues
  • Channel Wires (as of 2016)

Message

  • User Events
详情看RT/HMI通信T用于 FPGA 和 RT 处理器之间通信的相同通信方法也可用于 FPGA 和 HMI 之间的通信。然而,这种情况不太常见,因为一旦通过以太网与 HMI 进行通信,就无法保证确定性。 
RT

   

详情看RT/HMI通信

详情看RT进程间通信

Tag

  • Read/Write Control 
  • User Defined Variables
  • Interrupts

Stream

  • DMA FIFO
  • Host Memory Buffer
FPGA用于 FPGA 和 RT 处理器之间通信的相同通信方法也可用于 FPGA 和 HMI 之间的通信。然而,这种情况不太常见,因为一旦通过以太网与 HMI 进行通信,就无法保证确定性

Tag

  • Read/Write Control 
  • User Defined Variable 
  • Interrupts

Stream

  • DMA FIFO
  • Host Memory Buffer

  

 详情查看FPGA进程间通信

 

RT进程间通信

        下表概述了 RT 程序上不同进程之间进行通信时可用的通信选项。该表分为在确定性循环(例如定时循环)与非确定性循环之间通信或在非确定性循环与另一个非确定性循环之间通信时可用的选项。最佳实践是,实时处理器上的每个内核仅运行一个确定性循环,以避免优先级冲突。

通讯类型确定性循环到非确定性循环非确定性循环到非确定性循环
标签
  • 启用 RT FIFO 的单进程共享变量(单个元素)
  • 单进程共享变量
  • 局部变量
  • FGV
  • 通知者
流、消息
  • RT 先进先出功能
  • 尾巴
  • 用户事件(仅限消息)

RT/HMI 通讯

        下表概述了实时程序与 Windows PC 上运行的 HMI 之间进行通信时可用的不同通信选项。该表还列出了通信选项是否支持一个或多个 RT 处理器或 HMI 之间的通信。值得注意的是,我们的 CompactRIO 目标运行 64 位 NI Linux Real-Time 操作系统,有一个嵌入式 UI 选项,允许显示 Real-Time VI 的前面板。在这种情况下,无需对 HMI 进行编程。

通讯类型通讯选项RT 目标数量:HMI 数量
标签网络发布的共享变量1:1、1:N、N:1
TCP/IP1:1
UDP协议1:N 或 N:1
网页服务1:1、1:N
流、消息网络流1:1
TCP/IP(仅消息)1:1

 FPGA 进程间通信

        

通讯类型通讯选项常用
标签局部/全局变量分享最新数据
记忆项目分享最新数据
注册项目分享最新数据
流、消息握手建立持续通信的参数
FIFO(触发器)

传输缓冲数据

(FIFO < 100 字节)

FIFO(查找表)

传输缓冲数据

(100 字节 ≤ FIFO ≤ 300 字节)

FIFO(块存储器)

传输缓冲数据

(FIFO > 300 字节)

*可用块存储器的上限由FPGA目标指定

        下表概述了 FPGA 上不同进程之间进行通信时可用的通信选项。有多种方法可以在两个不同的 FPGA 之间进行通信,但这里不讨论这些选项。 

5.RIO开发人员必备指南 

        此链接必看,文档范例皆有:RIO Developer Essentials Guide for Academia

 6.FPGA、实时处理器和分布式系统之间的通信范例

Communicate Between FPGA, Real-Time Processor, and Distributed Systems - NI

其他

        初学者可以先看一下NI对于每个工具包的说明文档,这个对于知识盲区打开有一定的帮助。

                LabVIEW Real Time Module: 产品文档 - NI      

                LabVIEW FPGA Module:产品文档 - NI

       

LabVIEW Real-Time和LabVIEW FPGA项目范例

嵌入式系统通常需要具有可靠性和确定性的架构。因此,许多嵌入式应用需要专门处理系统状态监测、错误处理和看门狗定时器。针对CompactRIO和PXI RT DAQ的LabVIEW项目范例提供了推荐的软件架构,可用于各种嵌入式控制与监控系统,这是满足这些需求的最佳实践。这些项目范例还给出了数据通信、网络连接、控制例程、数据记录等的最佳实践。

为了在LabVIEW中查看这些模板,您必须安装LabVIEW Real-Time和/或LabVIEW FPGA模块。

CompactRIO项目范例

CompactRIO的LabVIEW FPGA控制

CompactRIO的LabVIEW FPGA控制

此项目范例专为需要高性能控制和/或基于硬件的安全逻辑的应用程序而设计。控制通过FPGA架构实现,而并非在软件中运行控制算法,使控制循环速率能够达到10 kHz以上,且抖动极小。FPGA VI还包含安全逻辑,可在出现严重错误或者实时软件故障时立即将所有输出设置成安全状态,从而更大限度地确保系统的可靠性。

参阅相关文档 | 参阅NI社区的详细指南

CompactRIO的LabVIEW Real-Time控制(RIO扫描接口)

此项目范例专为需要确定性控制性能的控制应用而设计,其单点I/O速率不超过100 Hz。此项目范例不使用FPGA硬件,而是使用确定性的实时处理器进行系统控制。此范例使用RIO扫描接口(RSI)在实时应用中获取I/O数据,如同变量一样。

CompactRIO的LabVIEW FPGA波形采集与记录

CompactRIO的LabVIEW FPGA波形采集与记录

此项目范例包含基于FPGA的可自定义高速模拟采集,并可在满足触发条件时,将采集到的数据记录至实时系统的磁盘。此项目范例可以自主运行,或者连接到所提供的可选用户界面。

CompactRIO的LabVIEW Real-Time序列生成器

CompactRIO的LabVIEW Real-Time序列生成器

此项目范例可实现序列引擎,可针对控制应用在LabVIEW Real-Time中执行用户自定义的序列或方法。它包括一个基于Windows的用户界面,该界面能够生成用户定义的序列,将此类序列部署到CompactRIO,以及监测序列引擎状态。用户界面动态加载子面板,展示了高效、响应流畅的用户界面架构。

查看视频教程

Real-Time项目范例(使用DAQmx)

LabVIEW Real-Time (NI-DAQmx)项目范例专为实时控制和/或波形采集与记录应用而设计。

LabVIEW Real-Time控制(NI-DAQmx)

LabVIEW Real-Time控制(NI-DAQmx)

实现基于软件的确定性设备控制。此项目范例采用NI-DAQmx,并专为使用NI Real-Time PXI控制器和NI DAQ且需要确定性DAQ控制I/O的控制应用而设计。

参阅相关文档

LabVIEW Real-Time波形采集与记录(NI-DAQmx)

LabVIEW Real-Time波形采集与记录(NI-DAQmx)

采集连续波形数据并将数据记录至磁盘。此项目范例采用NI-DAQmx,包含模拟数据采集,并在可满足触发条件时,将采集到的数据记录至实时系统的磁盘。此项目范例可以自主运行,或者连接到所提供的可选用户界面。此范例专为使用NI Real-Time PXI控制器和NI DAQ或者NI独立式CompactDAQ的应用而设计。

参阅相关文档

相关文章:

【NI-RIO入门】理解Windows、Real Time与FPGA之间数据通信的原理

于NI kb摘录 1.概述 对于NI RIO系列设备&#xff08;CompactRIO、sbRIO、myRIO等&#xff09;进行编程时&#xff0c;需要注意有三个不同的组件。 人机界面 (HMI) 。有时称为“主机”&#xff0c;为用户提供图形用户界面&#xff08;GUI&#xff09;&#xff0c;用于监控系统…...

关于游戏性能优化的技巧

关于游戏性能优化的技巧 游戏性能优化对象池Jobs、Burst、多线程间隔处理定时更新全局广播缓存组件缓存常用数据2D残影优化2D骨骼转GPU动画定时器优化DrawCall合批处理优化碰撞层优化粒子特效 游戏性能优化 好久没有在CSDN上面写文章了&#xff0c;今天突然看到鬼谷工作室技术…...

antdesignpro实现滚动加载分页数据

原理解析&#xff1a;每滚动一次相当于翻页&#xff0c;请求后端时给的页码参数要想办法加1&#xff0c;后端才能根据页码给出相应数据 注意后端收到页码参数之后要准确计算出每页的首行数据&#xff0c;关键逻辑代码&#xff1a; # 根据前端传的页码&#xff0c;进行计算下一…...

步兵 cocos2dx 加密和混淆

文章目录 摘要引言正文代码加密具体步骤代码加密具体步骤测试和配置阶段IPA 重签名操作步骤 总结参考资料 摘要 本篇博客介绍了针对 iOS 应用中的 Lua 代码进行加密和混淆的相关技术。通过对 Lua 代码进行加密处理&#xff0c;可以确保应用代码的安全性&#xff0c;同时提高性…...

【算法设计与分析】——动态规划算法

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…...

WPF组合控件TreeView+DataGrid之DataGrid封装

&#xff08;关注博主后&#xff0c;在“粉丝专栏”&#xff0c;可免费阅读此文&#xff09; wpf的功能非常强大&#xff0c;很多控件都是原生的&#xff0c;但是要使用TreeViewDataGrid的组合&#xff0c;就需要我们自己去封装实现。 我们需要的效果如图所示&#x…...

PIL/Pillow

Abstract PIL(Python Imaging Library)是一个用于图像处理的 Python 库。它提供了广泛的功能&#xff0c;包括图像加载、保存、调整大小、裁剪、旋转、滤镜应用等。 由于 PIL 的开发停止在 2009 年&#xff0c;因此推荐使用其后续的维护版本 Pillow。Pillow 是一个兼容 PIL 接…...

ARM 汇编入门

ARM 汇编入门 引言 ARM 汇编语言是 ARM 架构的汇编语言&#xff0c;用于直接控制 ARM 处理器。虽然现代软件开发更多地依赖于高级语言和编译器&#xff0c;但理解 ARM 汇编仍然对于深入了解系统、优化代码和进行低级调试非常重要。本文将为您提供一个简单的 ARM 汇编入门指南…...

SQL进阶:多表查询

在SQL基础部分&#xff0c;我们在讲解的过程中只用到了单表查询。但实际上&#xff0c;常见的业务场景单表查询不能满足&#xff0c;或者拆分查询性能过慢。这个时候我们就需要用到连接查询。即查询多表按一定规则合并后的数据。 注意&#xff0c;合并后的数据也是表&#xff…...

多层负载均衡实现

1、单节点负载均衡 1&#xff09;站点层与浏览器层之间加入了一个反向代理层&#xff0c;利用高性能的nginx来做反向代理 2&#xff09;nginx将http请求分发给后端多个web-server 优点&#xff1a; 1&#xff09;DNS-server不需要动 2&#xff09;负载均衡&#xff1a;通过ngi…...

Redis取最近10条记录

有时候我们有这样的需求&#xff0c;就是取最近10条数据展示&#xff0c;这些数据不需要存数据库&#xff0c;只用于暂时最近的10条&#xff0c;就没必要在用到Mysql类似的数据库&#xff0c;只需要用redis即可&#xff0c;这样既方便也快&#xff01; 具体取最近10条的方法&a…...

Mybatis之增删改查

目录 一、引言 二、Mybatis——增 举例&#xff1a;添加用户 三、Mybatis——删 举例&#xff1a;删除用户 四、Mybatis——改 举例&#xff1a;修改用户 五、Mybatis——查 六、注意 END&#xff1a; 一、引言 书接上回&#xff0c;我们在了解完mybatis之后&#xff0c;肯…...

Go 代码检查工具 golangci-lint

一、介绍 golangci-lint 是一个代码检查工具的集合&#xff0c;聚集了多种 Go 代码检查工具&#xff0c;如 golint、go vet 等。 优点&#xff1a; 运行速度快可以集成到 vscode、goland 等开发工具中包含了非常多种代码检查器可以集成到 CI 中这是包含的代码检查器列表&…...

SwiftUI 趣谈之:绝不可能(Never)的 View!

概览 SwiftUI 的出现极大的解放了秃头码农们的生产力。SwiftUI 中众多原生和自定义视图对于我们创建精彩撩人的 App 功不可没&#xff01; 不过&#xff0c;倘若小伙伴们略微留意过 SwiftUI 框架头文件里的源代码&#xff0c;就会发现里面嵌有一些奇怪 Never 类型&#xff0c…...

etcd是什么

目录 1.关于etcd2.应用场景 本文主要介绍etcd 概念和基本应用场景。 1.关于etcd etcd是一个开源的、分布式的键值存储系统&#xff0c;用于共享配置和服务发现。它是由CoreOS团队开发的&#xff0c;主要用于实现分布式系统的配置管理和服务发现。 etcd的主要特性包括&#x…...

应用全局的UI状态存储AppStorage

目录 1、概述 2、StorageProp 2.1、观察变化和行为表现 3、StorageLink 3.1、观察变化和行为表现 4、从应用逻辑使用AppStorage和LocalStorage 5、从UI内部使用AppStorage和LocalStorage 6、不建议借助StorageLink的双向同步机制实现事件通知 6.1、推荐的事件通知方式…...

MySQL数据库 触发器

目录 触发器概述 语法 案例 触发器概述 触发器是与表有关的数据库对象&#xff0c;指在insert/update/delete之前(BEFORE)或之后(AFTER)&#xff0c;触发并执行触发器中定义的soL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性&#xff0c;日志记录&am…...

C语言学习之给定任意的字符串,清除字符串中的空格

实例要求&#xff1a;给定任意的字符串&#xff0c;清除字符串中的空格&#xff0c;并将其输出&#xff1b;实例分析&#xff1a;1、指针函数实现&#xff0c;需要注意指针函数的返回值是一个指针类型&#xff1b;2、字符类型的数组实现&#xff0c;循环遍历并赋给新的数组&…...

由实验数据进行函数拟合的python实现

0.引言 已知公式求参的过程&#xff0c;对工程而言&#xff0c;一般是一个线性拟合或者非线性拟合的过程。我们现在来以代码片段为例&#xff0c;来描述如何求参。一般这个过程会涉及超定方程的计算。这个过程&#xff0c;原本需要使用matlab&#xff0c;现在python照样可以做…...

<JavaEE> 基于 UDP 的 Socket 通信模型

目录 一、认识相关API 1&#xff09;DatagramSocket 2&#xff09;DatagramPacket 3&#xff09;InetSocketAddress 二、UDP数据报套接字通信模型概述 三、回显客户端-服务器通信 1&#xff09;服务器代码 2&#xff09;客户端代码 一、认识相关API 1&#xff09;Data…...

英雄联盟智能工具集:3个颠覆性功能重塑你的游戏体验

英雄联盟智能工具集&#xff1a;3个颠覆性功能重塑你的游戏体验 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 作为英雄联盟玩家…...

【国家级等保2.0工业网关合规缺口】:3步完成Python网关安全基线加固(含GB/T 22239-2024映射表)

第一章&#xff1a;工业Python网关安全基线合规总览工业Python网关作为OT与IT融合的关键枢纽&#xff0c;承担着协议转换、数据采集、边缘计算与远程控制等核心职能。其安全基线合规性直接关系到生产系统的可用性、完整性与保密性。依据IEC 62443-3-3、等保2.0三级及NIST SP 80…...

Anaconda3重装避雷指南:Win11系统这些配置不删干净等于白装(2024实测)

Anaconda3重装避雷指南&#xff1a;Win11系统深度清理实战手册 为什么你的Anaconda重装总失败&#xff1f; 每次重装Anaconda后&#xff0c;那些熟悉的报错信息又阴魂不散地出现&#xff1f;"明明已经卸载干净了"——这是大多数数据科学从业者最常发出的困惑。实际上…...

【ybtoj】【KMP】【例题1】子串查找

【例题1】子串查找Link解题思路CodeLink 传送门 题目 解题思路 kmp模板题 找了超级多篇KMP的博客&#xff0c;一直都看不懂 直到……直到我找到了光&#xff08;bushi&#xff09; 这篇博客直接把我升华 Code #include <iostream> #include <cstring> #include…...

探索黑苹果安装实战:从零到完美的完全指南

探索黑苹果安装实战&#xff1a;从零到完美的完全指南 【免费下载链接】Hackintosh 国光的黑苹果安装教程&#xff1a;手把手教你配置 OpenCore 项目地址: https://gitcode.com/gh_mirrors/hac/Hackintosh 破解三大核心技术痛点 直面固件层兼容性障碍 当PC尝试运行mac…...

自动驾驶轨迹预测新思路:VectorNet如何用矢量编码替代传统栅格化方法?

自动驾驶轨迹预测的矢量革命&#xff1a;VectorNet如何重构环境编码范式 在自动驾驶系统的决策闭环中&#xff0c;轨迹预测模块犹如驾驶员的预判能力&#xff0c;其准确性直接关系到行车安全与舒适性。传统基于卷积神经网络&#xff08;CNN&#xff09;的预测方法存在一个根本性…...

YOLOv5 vs YOLOv8:2024年工业部署选型指南(附实测对比)

YOLOv5 vs YOLOv8&#xff1a;2024年工业部署选型指南&#xff08;附实测对比&#xff09; 在工业视觉检测领域&#xff0c;目标检测模型的选型直接关系到产线良率、运维成本和系统响应速度。作为YOLO系列当前最成熟的工业级解决方案&#xff0c;YOLOv5和YOLOv8的抉择让不少工程…...

vue-sonner:轻量级Vue通知组件的高效集成方案

vue-sonner&#xff1a;轻量级Vue通知组件的高效集成方案 【免费下载链接】vue-sonner &#x1f514; An opinionated toast component for Vue. 项目地址: https://gitcode.com/gh_mirrors/vu/vue-sonner 项目概述 vue-sonner是一个为Vue和Nuxt应用设计的轻量级通知组…...

从单点到高可用:在Ubuntu 22.04上一步步将HBase 2.x升级为HA架构(含故障切换测试)

从单点到高可用&#xff1a;在Ubuntu 22.04上实现HBase 2.x高可用架构实战指南 当你的数据服务从测试环境走向生产环境&#xff0c;单点故障就成了悬在头顶的达摩克利斯之剑。想象一下凌晨三点被报警电话惊醒&#xff0c;只是因为唯一的HMaster节点宕机导致整个数据服务不可用—…...

VS Code+智谱AI+Cline 完整实战教程

对于习惯用VS Code做日常开发、偏爱国产大模型的开发者来说&#xff0c;Cline是一款轻量无广告、适配性极强的AI编程客户端插件&#xff0c;搭配智谱GLM-4系列、CodeGeeX 4编码专用模型&#xff0c;既能完美适配中文编程需求&#xff0c;又能无缝对接Vue、Python、Java、小程序…...