- 博客(134)
- 收藏
- 关注
原创 【功能全局变量】设计模式讲解
FGV是一种标准的LabVIEW数据结构,允许对数据或资源进行受控访问,通常允许执行各种操作。每次调用FGV时,框图只会执行一次,要么进行数据更新,要么进行读取数据。功能全局变量最常使用未初始化的移位寄存器或未初始化的反馈节点作为存储数据的机制,并支持您在应用程序中的任何位置(即“全局”)访问该数据。只要 VI 仍在内存中,USR 就会在 VI 的连续运行之间存储其数据。功能全局变量又称LV2型全局变量,VI Global。
2024-08-14 11:22:01
1684
原创 【AMC】异步消息通信框架讲解(三)
启动 LabVIEW 并选择“创建项目”。从“创建项目”对话框中,启动“连续测量和记录”示例项目。请参阅连续测量和记录样本项目,了解将 QMH 模板适配到测量应用程序的示例。注意事件处理循环、消息处理循环以及任务之间的交互。使用突出显示执行来观察框图循环之间发送的数据流和消息流。在项目资源管理器窗口中,打开并运行Main.vi。单击前面板控件并观察显示指示器更新。
2024-08-12 17:49:03
466
原创 【AMC】异步消息通信框架讲解(二)
队列消息处理器 (QMH) 设计模式是包含在 AMC 参考库中的 VI 模板。它位于 AMC 函数面板上,可以直接拖放到空白 VI 的图表上。QMH 是一种基本的生产者-消费者架构,可用作整个应用程序中各种 LabVIEW VI 的基础。QMH 设计模式的常见用途是应用程序的用户界面、对话框窗口、命令和通信解析器、基于状态的控制器等。QMH 设计模式的目的是接收、存储和处理消息。消息可以是来自用户界面的事件、从通信接口收到的命令等。一般来说,消息是需要某些动作、操作、服务或其他响应的异步事件。
2024-08-12 17:38:10
1382
原创 【AMC】异步消息通信框架讲解(一)
异步消息通信 (AMC) 库是一个通用 LabVIEW API,用于在 LabVIEW 应用程序中的进程内、进程之间以及不同 LabVIEW 目标(网络上的系统)之间发送消息。队列消息处理器 (QMH) 设计模式是一种通用 VI 架构,可用作各种 LabVIEW VI 的基础。它使用 AMC API 发送和接收消息。此设计模式可用于实现状态机、应用程序的用户界面、异步通信处理器以及大型应用程序中的其他任务和系统组件。此设计模式与其他 VI 架构实现类似,通常称为排队状态机。
2024-08-12 17:29:56
1807
原创 【NI-DAQmx入门】LabVIEW数据采集基础应用程序框架
对于可管理规模的 LabVIEW 程序,分析现有程序或设计新程序的方法通常是从整体到具体,即从高级到低级的分析和设计。从一开始就直接深入细节可能会效率较低。在设计阶段,开发人员首先将程序垂直划分为几个层级。从最顶层开始,他们考虑如何根据程序的功能以及各部分之间的相互关系将这一最高层划分为各个部分。然后,针对这一最顶层的每个部分,再考虑下一层,根据各自的任务将其进一步划分为更详细的功能模块。这种分层方法一直延续到下方。根据程序的规模和复杂程度,程序可以分为不同的层次结构。
2024-08-12 15:45:20
1162
原创 【NI-DAQmx入门】基于TSN的以太网NI CompactDAQ机箱(9185/9189)
TSN 是标准以太网(特别是 IEEE 802.1 标准)的演变。TSN 提供了一种使用以太网数据包传输的设备时间同步机制、使用协调时间安排循环数据包传输的能力以及用于配置所有网络元素的标准参数集。基于 TSN 以太网的测量系统需要从设备周围的多个位置获取相关传感器读数,因此使用 TSN 的时间同步元素。TSN 同步通过 IEEE 802.1AS 标准提供。IEEE 802.1AS 是 IEEE 1588 配置文件,它为 IEEE 802.1AS 子网内的所有节点提供通用的时间概念。
2024-08-12 13:38:30
2083
原创 【JKI SMO】框架讲解(九)
可以看到下面有一行是进度提示。首先需要做一个延时,对于实际工业应用程序来说,在程序启动时通常需要加载配置文件,仪器初始化,界面UI初始化等等操作。5.打开SystemSplash.TestLauncher.vi,切换到程序框图可以明显看到对应的工作原理。添加一个延时OpenG函数,如果需要在启动界面执行完成自动停止,则需要加入停止SMO函数和隐藏SMO函数。打开Process.vi可以看到有个初始点JKI启动界面模板,后期我们可以在此基础上进行修改。3.新建一个SMO,选择SMO.UI.Splash。
2024-07-31 15:56:56
614
原创 【JKI SMO】框架讲解(八)
当您将状态机对象 (SMO) 的新实例放入 LabVIEW 框图并调用其 Create 方法时,框架会初始化状态机的所有必要组件并使其准备好运行。此方法由 JKI 状态机和一些内置的额外元素组成,这些元素是 SMO 框架的一部分。方形矩形表示当 SMO 在状态之间移动时,您可以实现可重写的方法以执行操作。如果您想永久丢弃状态机,可以调用 Destroy 方法,框架会完成剩下的工作。然后,只需调用 Start 方法,您的状态机就会异步运行。当您准备停止状态机时,请调用 Stop 方法。
2024-07-31 14:44:00
355
原创 【JKI SMO】框架讲解(七)
第六节展示了在一个SMO UI里显示多个SMO的数据,如果是有多个SMO UI,那么我们就需要用到子面板函数。1.在项目里新建一个Launcher,重新命名为Launcher-Muti SMO UI。同时创建一个显示控件,断开显示控件的链接,拷贝此控件到SMO UI的自定义控件里面。这里为了节省时间,我就不重新生产SMO UI了,直接拿同一个SMO UI来举例。3.调整SMO UI 界面大小,并在VI属性里设置为当前大小。4.调整Launcher VI的子面板大小和SMO UI 大小一致。
2024-07-31 13:42:05
392
1
原创 【JKI SMO】框架讲解(六)
5.打开process.vi类核心程序,切换至 "", "Idle" 状态,修改事件结构的超时时间为100ms,即每100ms进行一次电流采集, 需要用到解除捆绑函数,获取当前SMO对自身的引用,并将电流值和警告状态进行发布。接JKI SMO 框架讲解(五),现在对代码进行一个扩展,当前代码仅有一路电压采集,现在需要扩展一路电流采集通道。8.切换至状态机的 "", "Idle" 分支,添加两个事件,同时在前面板创建一个波形图和布尔灯控件。函数目录参考章节五。1.打开项目,在工具里打开SMO Editor。
2024-07-31 10:58:26
622
原创 【JKI SMO】框架讲解(五)
打开process.vi类核心程序,切换至 "", "Idle" 状态,修改事件结构的超时时间为100ms,即每100ms进行一次电压采集, 需要用到解除捆绑函数,获取当前SMO对自身的引用,并将电压值和警告状态进行发布。引用对象创建SMO,将Volt Acq SMO类的值写入Volt Acq类,然后启动SMO并显示Signal Display的前面板,最后创建一个停止事件结构用于关闭前面板、停止SMO、销毁SMO。切换至程序框图,在项目中将两个SMO类拖放到程序框图中,同时在下面路径找到SMO的函数。
2024-07-30 17:37:47
1175
1
原创 【JKI SMO】框架讲解(四)
本节将讲解JKI SMO Editor的一些基本用法,在VI Package Manager 下载并安装了JKI SMO Editor以后,会在LabVIEW菜单里创建一个应用程序,通过这个程序可以从模板创建新的SMO,这样做的效率很高。打开LabVIEW,找到工具一栏,JKI State Machine Objects>>SMO Editor,打开SMO Editor,如下图所示,
2024-07-30 15:24:25
906
原创 【JKI SMO】框架讲解(三)
如果我们需要对于一些特定的错误进行错误处理和弹窗提示等(不影响程序运行),比如部分仪器报错,某套外设失联等等,可以在此部分写一个错误处理VI,对于不同的报错编号可以对应程序执行 退出、复位、重新初始化加载,也可以在此部分直接调整data簇里面的参数,确保机器是运行安全的,再停止。所有的错误通过while循环的移位寄存器进行传递,同时状态机有一个 Error Handler 分支,这个分支里我们可以看到有一个错误显示,而后直接清除错误。本节主要讲JKI状态机的错误处理,
2024-07-30 11:38:49
435
原创 【RaspberryPi】树莓派32bit系统安装pyinstaller
可以看到目录里面有32bit的arm支持文件夹了。使用File命令查看run里面的内容是否正确,如下图,则可以继续正常使用。1.在Github官网下载Pyinstaller源代码,例如5.13.2最新版本。使用CP复制命令将Linux-32bit-arm拷贝到Python3安装路径下面。然后可以在Dist文件夹里找到打包好的exe应用程序。2.解压到树莓派桌面以后执行下面操作。进入bootloader目录。简单测试命令,进行打包测试。
2024-07-22 17:49:42
417
原创 【RaspberryPi】树莓派CM4关闭开机提示brcm-pcie link down message
问题在于缺少 PCIe 端口,因此您必须禁用该功能才能消除此消息。这个消息是一个正常的消息,原因就是PCIE插槽没有插设备,所以会在开机时提示这个消息。下次重新启动时,上面的消息将消失。,系统会要求您保存。
2024-07-22 16:53:49
394
原创 【RaspberryPi】树莓派安装pygame2.0以上版本
pygame是一个开源的库,最简单的,我们可以通过这个库,给树莓派连接一个2.4G的遥控手柄。具体安装方式参考下面的命令行,针对高版本的pygame。
2024-07-22 16:48:36
328
原创 【RaspberryPi】树莓派Matlab/Simulink支持包安装与使用
连接成功以后会进入到下一步,检查工具包是否安装的界面,检查完以后,点击INSTALL安装即可,根据不同的网络状况,安装时间大概在10-40左右,但是此种情况,会遇连接失败的问题,如果失败可以使用方法一安装,对于Bullseye系统只能在线安装完了,将镜像保存。2. 执行配置树莓派命令,按终端中显示的设置步骤进行操作,全部输入y,同意安装或配置即可。在进行安装步骤之前,需要将树莓派连上网,同时打开ssh服务,并设置用户名和密码。1.在树莓派终端下面输入以下命令,安装适用于树莓派的安装包。选择当前使用的硬件。
2024-07-22 10:34:51
2173
1
原创 【JKI SMO】框架讲解(二)
将JKI State Machine 模板拖曳到程序框图中,如下图,此模板会默认放置一个OK按钮在前面板中,用于提示用户如何增加一个简单的用户事件去使用此框架。“Event Structure”,Idle:此分支可以设置用户时间,超时时间设置为-1意味着超时帧永远不会执行,如果要执行超时分支,则需要将此处的超时时间改为0ms或者在更大的数值,同时此框架的 核心是一个事件结构,来控制程序的整体响应。
2024-06-16 22:28:41
841
原创 【JKI SMO】框架讲解(一)
JKI State Machine是一款易于使用且功能强大的状态机模板,可以作为界面或者仪器工作流程的基础框架,但是他不能处理复杂系统的多任务并发机制,因为他是只能处理单个进程。随之,JKI推出了基于面向对象封装的SMO框架,是一种轻量且易于理解的开发框架,它扩展了 JKI 状态机的功能,并允许您使用面向对象设计在 LabVIEW 中创建可扩展和模块化的应用程序。使用 SMO 框架,您可以生成多个异步运行的状态机,并让它们通过事件相互通信。
2024-06-16 10:53:14
987
原创 【香橙派Kunpeng Pro】开发者的新选择
近日,博主收到了一块硬件板这对于一个电子爱好者来说是一个兴奋的事情。博主的话最近一直在使用树莓派做一些控制和实时系统的开发,对于debian用的很熟了,但是对于kunpeng内置的还不熟悉,这当然对于博主也是一个挑战。这是为什么呢?博主经常用到树莓派,里面的东西都是不同的厂家自己封装的,所以使用起来很简单,就和对协议一样,的操作系统更贴合原始的Linux使用习惯,开发起来会有一点挑战,但是对于开发者来说那种酣畅淋漓的感觉何尝不是一种享受呢!好了,现在我们进如拆箱环节。
2024-05-27 23:23:49
1220
原创 【LabVIEW FPGA入门】同步C系列模块
数字通道可以在一个时钟周期内执行。模拟通道需要多个时钟周期。同步模拟模块的每个通道有一个 ADC,采集的数据在通道之间没有明显的偏差。多路复用模块使用多路复用器通过单个 ADC 路由多个通道,因此多路复用模块中的所有通道之间存在通道间延迟或偏移。要同步不同通道和不同模块,请将所有通道读取或更新放在同一个 FPGA I/O 节点中,以最小的偏差混合模拟输入、模拟输出和数字 I/O 通道。
2024-05-21 14:25:54
947
原创 【LabVIEW FPGA入门】使用事件发生函数同步FPGA循环
使用 Occurrences 函数来控制单独的同步活动。特别是,当您希望程序框图的一部分等待程序框图的另一部分完成任务而不强制 LabVIEW 进行轮询时,请使用这些函数。您可以使用全局变量执行类似于occurrences函数的功能,通过一个循环轮询全局变量,直到其值发生变化。然而,全局变量会消耗更多的系统资源,并且会因轮询循环而引入抖动。
2024-05-21 11:02:56
744
原创 【LabVIEW FPGA入门】NI 环境安装教程
然后确认LabVIEW开发的位数,默认情况下使用32bit,有特殊应用深度学习、python、大数据量的特殊应用可以装64bit的LabVIEW,但是注意32bit和64bit的工具包是互不兼容的,即不能64bit LabVIEW 不能安装32bit的工具包,32bit LabVIEW也不能安装64bit 工具包,对于32bit的终端设备也只能安装32bit的LabVIEW。步骤7:安装完成后,重启激活软件,操作系统自动识别并安装硬件,如果未发现硬件,则可以在计算机管理里面,启动NI的服务。
2024-05-15 18:21:22
1608
原创 【LabVIEW FPGA入门】FPGA不同传递数据方法比较
只有变量、寄存器项和块内存 FIFO 才具有跨不同时钟源传输数据的能力。不同时钟源的使用与单周期定时循环的使用有关。数据共享方法的选择应基于应用的需要。根据应用程序的重要特性,所讨论的任何一种方法都可能是合适的。传输缓冲数据(100 至 300 字节的 FIFO)
2024-03-23 20:38:48
708
原创 【LabVIEW FPGA入门】FIFO
要在 FPGA VI 的不同部分之间或 FPGA 目标中的 VI 之间传输缓冲数据,可使用 FIFO。FIFO 是一种先进先出的缓冲器,第一个写入内存的数据项就是第一个从内存中读取和删除的数据项,类似于队列。FPGA FIFO 的功能类似于一个固定长度的队列,可将多个数据项写入内存或从内存中读出。与队列不同的是,FPGA FIFO 通过对数据大小施加限制来确保行为的确定性,读写器可同时访问数据。
2024-03-23 18:25:23
3211
原创 【LabVIEW FPGA入门】FPGA寄存器(Register)
Target-scoped register items: 如果希望寄存器项在 "项目浏览器"(Project Explorer)窗口中可见并可配置,则可使用目标范围寄存器项。目标寄存器项可在项目浏览器窗口中同一目标下的任何 FPGA VI 中使用。- VI-defined register items: 使用VI定义的寄存器项创建可重入的子VI,避免资源冲突。如果在可重入的 FPGA VI 中配置了 VI 定义的寄存器项,LabVIEW 将为 VI 的每个实例创建寄存器项的单独副本。
2024-03-23 17:16:22
729
原创 【LabVIEW FPGA入门】FPGA 存储器(Memory)
可以使用内存项将数据存储在FPGA块内存中。内存项以2kb为倍数引用FPGA目标上的块内存。每个内存项引用一个单独的地址或地址块,您可以使用内存项访问FPGA上的所有可用内存。如果需要随机访问存储的数据,请使用内存项。内存项不消耗FPGA上的逻辑资源,因为它们不包括确保跨时钟域数据完整性所需的额外逻辑。内存项中的每个内存地址只存储最新的值。如果在从内存地址读取之前对该地址进行N次写入,则在最近的值之前的N - 1个值将丢失。
2024-03-23 16:59:26
1926
原创 【RaspberryPi】如何备份树莓派系统镜像
需要准备 32G/64G SD卡 及 USB3.0读卡器。1.点击左上角 树莓派图标 >> 附件 >> SD Card Copier。2.勾选SD卡。/dev/mmcblk0 字样的是树莓派当前系统/dev/sda 字样的是需要拷贝镜像的新卡3.开始复制。点击 Start ,会出现一个提醒格式化SD卡的弹窗,点击 Yes, 继续。拷贝完成后会出现一个 拷贝完成的窗口,这时就可以拔下读卡器,取出SD卡。
2024-03-21 17:38:10
2384
2
原创 【LabVIEW FPGA入门】局部变量和全局变量
无法访问某前面板对象或需要在程序框图节点之间传递数据时,可创建前面板对象的局部变量。创建局部变量后,局部变量仅仅出现在程序框图上,而不在前面板上。局部变量可对前面板上的输入控件或显示件进行数据读写。写入局部变量相当于传递数据至其他接线端。但是,局部变量还可向输入控件写入数据和从显示控件读取数据。实际上,使用局部变量可将前面板对象同时用作输入和输出。例如,如果用户界面需要用户登录,可在每次新用户登录时清空登录和密码提示框中的内容。
2024-03-20 23:48:42
1789
原创 【LabVIEW FPGA入门】使用FPGA实现串行同步接口(SSI)
传感器不断更新位置数据,并传送到移位寄存器中。在每一个时钟脉冲序列之间,最少有25毫秒的保持时间,用于将新的数据写入移位寄存器。当传感器从控制器接收到一个脉冲序列时,数据被移出。当最低有效位 (LSB) 变为HIGH,并且超出最小保持时间时,就可以读取新的数据。请参考下图,了解典型SSI框图,SSI时序图以及含有25毫秒的保持时间的顺序测量SSI时序图。SSI(串行同步接口)是连接绝对位置传感器和控制器的广泛应用的串行接口。SSI利用控制器发出一个时钟脉冲序列,初始化传感器的门限输出。
2024-03-19 20:52:58
856
原创 【LabVIEW FPGA入门】并行执行
这些任务可以作为单个循环中的序列来实现,但也可以编码为三个单独的循环,如下所示。第二个循环从第一个循环接收数据,对其进行处理,然后将其传递给第三个循环,第三个循环负责将处理后的数据传输到主机应用程序。除了提高性能之外,这种模块化编程方法还可以帮助您组织和管理应用程序代码,使您能够更轻松地测试和调试应用程序,并提高未来具有类似要求的应用程序中的代码重用。该技术几乎可以应用于任何应用。通过查看应用程序内的数据流,您可以识别可以彼此独立运行的不同进程,即使它们需要在应用程序的更大方案中同步。
2024-03-18 23:29:52
1103
原创 【LabVIEW FPGA入门】浮点数类型支持
从定点到单精度浮点的转换需要由应用程序的主机或实时部分完成,这主要是由于在 FPGA 上实现此转换的复杂性。虽然浮点算法可以直接在 FPGA 上执行,但混合实现可以在算法内的关键计算中提供更高的灵活性和卓越的性能。值得注意的是,虽然浮点数据类型提供了许多好处,但在单周期定时循环中使用时它的支持有限,并且对于某些操作,它使用的 FPGA 资源比定点数据类型要多得多。在 FPGA 上开发单精度浮点数据类型的应用程序时,最重要的是要考虑到该数据类型比定点数据类型使用更多的资源,并且需要更多的时钟周期来完成操作。
2024-03-17 21:57:06
1606
原创 【LabVIEW FPGA入门】流水线
在当今多核处理器和多线程应用程序的世界中,程序员在开发应用程序时需要不断思考如何最好地利用尖端 CPU 的强大功能。尽管用传统的基于文本的语言构建并行代码可能难以编程和可视化,但 NI LabVIEW 等图形开发环境越来越多地允许工程师和科学家缩短开发时间并快速实现他们的想法。由于 NI LabVIEW 本质上是并行的(基于数据流),因此多线程应用程序编程通常是一项非常简单的任务。框图上的独立任务自动并行执行,无需程序员进行额外的工作。但是那些不独立的代码片段又如何呢?
2024-03-17 21:03:08
1218
原创 【LabVIEW FPGA入门】单周期定时循环
组合路径是 FPGA 上一个寄存器的输出与另一个寄存器的输入之间的逻辑路径。寄存器将数据存储在FPGA上并在时钟的上升沿更新数据。长组合路径需要更多时间来执行并限制时钟域的最大时钟速率。长组合路径通常是单周期定时循环中的一个问题,因为输入寄存器和输出寄存器之间的逻辑必须在您指定的时钟速率的一个周期内执行。在单周期定时循环中,组件内部和组件之间的寄存器被移除,从而增加了寄存器之间的组合路径的长度。如果组合路径中的代码未在一个时钟周期内执行,LabVIEW将在编译失败对话框中返回时序违规。
2024-03-17 19:39:45
2225
原创 【LabVIEW FPGA入门】FPGA中的数据流
数据流编程模型与用 C 等语言实现的控制流模型形成对比。由于自上而下的顺序编程方法,用 C 编写的应用程序在映射到并行硬件时具有固有的局限性。相反,在数据流模型中,框图上的节点相互连接以表达逻辑执行流,并且可以使用它们轻松地表达并行性。当框图节点接收到所有必需的输入时,它会生成输出数据并将该数据传递到数据流路径中的下一个节点。数据通过节点的移动决定了框图上功能的执行顺序。LabVIEW数据流编程范例允许LabVIEW执行系统在不同线程中运行两个循环。在许多基于文本的编程语言中,您必须显式创建和处理线程。
2024-03-17 18:49:31
1684
原创 【LabVIEW FPGA入门】定时
在本节学习使用循环计时器来设置FPGA循环速率,等待来添加事件之间的延迟,以及Tick Count来对FPGA代码进行基准测试。
2024-03-17 16:46:15
2866
原创 【LabVIEW FPGA入门】插值、输出线性波形
控件中的值,程序结束。您可以再次开发一个可在主机上运行的 VI,该主机将以编程方式执行该 VI。下面的 VI,执行线性输出 - 添加点,在主机上开发并运行。通过主机上的该VI,您可以多次调用该VI,而无需手动与FPGA上的VI连接,并且可以将该VI用作其他VI中的子VI。使用线性插值生成分段线性波形分段线性波形是由线性波形组合构成的波形。整个波形不是线性的,但各个部分包括线性波形。您可以使用前面几节中描述的方法来输出分段线性函数。
2024-03-17 15:46:21
2590
2
【LabVIEW FPGA入门】使用CompactRIO进行SPI和I2C通信
2024-01-13
【LabVIEW FPGA入门】使用数字IO卡进行正交编码器采集
2024-01-13
【LabVIEW FPGA入门】NI FPGA 硬件实现RS-232、RS422、RS-485
2024-01-13
【NI-RIO入门】LabVIEW for CompactRIO Developer’s Guide
2023-12-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人