LabVIEW中管理大型数据

LabVIEW中管理大数据

LabVIEW的最大优势之一是自动内存管理。这种内存管理允许用户轻松创建字符串、数组和集群,而无需C/C++用户经常担心。但是,这种内存管理设计为绝对安全,因此数据被非常频繁地复制。这通常不会造成任何问题,但是当线路中的数据大小开始蔓延到兆字节范围时,副本开始引起内存问题,最终导致内存不足错误。虽然LabVIEW没有针对大型数据线进行优化,但它可以用于大型数据集,前提是程序员知道一些技巧,并为大型框图做好准备。

如何使用

1.大数据存储的方法

有时,需要在内存中存储大型数据集。要存储大型数据集而没有内存问题,需要一种存储机制,该机制允许保存数据的一个副本并以块的形式访问数据,从而允许在不占用大量内存的情况下传输数据。此问题的一个常见解决方案是函数全局,也称为移位寄存器全局。另一种解决方案是单元素队列。

可以使用VI服务器的重入VI创建C/C++指向缓冲区的指针的功能。该缓冲区产生对VI的引用,可以在任何地方传递。如果需要另一个缓冲区,请使用VI服务器启动另一个缓冲区。由于VI是可重入的,因此将创建另一个实例。现在可以传递此VI参考并在任何地方使用它。请注意,使用VI引用将导致对数据的任何访问都使用UI线程。使用UI线程进行数据访问会减慢程序执行速度。可以通过为每个缓冲区创建不同的VI并使每个VI不可重入来解决此问题。

GigaLabVIEW.llb中的GLV_WaveformBuffer.vi是功能全局概念的一个例子。要查看实际应用的概念,请打开GLV_TypicalMemoryStoreAndBrowse.vi。将点数设置为100或更多并运行VI。现在打开GLV_GigaLabVIEWMemoryStoreAndBrowse.vi并执行相同的操作。请注意响应能力和内存使用情况的差异。将点数增加到一百万或更多以查看主要差异。GLV_GigaLabVIEWMemoryStoreAndBrowse.vi使用GLV_WaveformBuffer.vi中的移位寄存器数据库来保存数据。该数据库还包含一个帧缓冲区-一个完整数据的预抽取数组,无需重新计算即可重用。它还使用上一示例中已经引入的分块和显示算法。

GigaLabVIEW.llb中的GLV_GigaLabVIEWMemoryStoreAndBrowseQ.vi是单元素队列概念的一个例子。它使用标准的面向对象技术来创建队列并对其进行操作。用途与GLV_GigaLabVIEWMemoryStoreAndBrowse.vi相同。在本例中,GLV_WaveformBuffer.vi中的不同移位寄存器作为单独的队列实现。使用哪种方法在很大程度上取决于品味和编程风格。

现在已经知道如何创建大型数据集,可以期望分配多少内存?答案取决于几个因素。当LabVIEW分配一个数组时,它会请求一个连续的内存部分。如果内存碎片化,即使仍有数百兆字节的可用内存,也可能会出现内存不足错误。可以通过将数据分块分配来解决此问题。如果正确编写了存储库VI,则对它的访问不应更改。LabVIEW使用签名的32位内存访问,因此总内存绝不会超过2GB。Windows操作系统使用无符号的32位内存访问,但保留高2GB的内存供系统使用,并仅允许在低2GB的内存中执行程序(服务器版本更灵活)。此外,系统DLL占据了2GB用户数据空间中大部分的高四分之一。因此,Windows系统的实际限制是1.0-1.5GB。

不同版本的LabVIEW以不同方式对内存进行分段。这将更改可以分配的最大数组大小。在LabVIEW7中。x及更高版本,通常可以在单个阵列中分配略高于1GB的带宽。LabVIEW8.x由于其较大的功能集,仅允许最大数组大小约为800MBytes。

2.显示数据

要查看实际速度改进,请从GigaLabVIEW.llb打开GLV_TypicalGenerateAndDisplay.vi。打开操作系统的内存监视器。将点数设置为1万或更多并运行它。请注意执行时间和内存使用。关闭VI。现在打开并使用相同的点数运行GLV_GigaLabVIEWGenerateAndDisplay.vi。请注意时间和内存使用情况的差异。GLV_TypicalGenerateAndDisplay.vi使用标准LabVIEW正弦波发生器一次生成整个数据集,然后绘制到屏幕上。GLV_GigaLabVIEWGenerateAndDisplay.vi以块的形式生成数据,抽取这些块,然后丢弃原始数据。它还使用较低级别的正弦波发生器来生成一个简单的数组。当波形数据类型用于图形时,点数足够低,因此复制的成本不是很高。请注意,将该VI从波形数据类型正弦发生器转换为使用较低级别的简单阵列发生器,可在LabVIEW20.7及更高版本中将速度提高20%。

3.突破2GB文件大小障碍(LabVIEW7.1及更早版本)

LabVIEW8.0引入了64位文件指针,因此不需要本节中的技术。早期版本的LabVIEW使用32位有符号整数作为文件指针。这直接将文件的可寻址大小限制为2GB。以10MBytes/s的速度串流到磁盘,这是使用NI数字化仪轻松完成的,在32分3秒内填满20位有符号整数空间。有两种直接选择可以解决此问题。

第一个相当简单。如果使用的是具有NTFS格式磁盘分区(必须是Windows NT,2000或XP)的Windows操作系统,则只需使用LabVIEW写入基元即可写入磁盘。不要将任何东西连接到偏移,并将位置模式连接到电流。可以写入,直到磁盘空间用完为止。

对于一个简单的例子,在GigaLabVIEW.llb中打开GLV_StreamToDisk.vi。本示例将双精度浮点数的升序保存到磁盘。在前面板上设置数据量,运行,然后在存储数据时坐下来放松。默认块大小65,000字节经实验确定为基于Windows的系统的最佳速度。

要读回数据,请反向执行该过程。使用没有偏移输入的读取基元。最多可以使用2GB边界的偏移量。如果在该边界之外使用它,则会收到文件结束错误。但是,如果只是按顺序从磁盘读取数据,则可以读取直到文件末尾。VIGLV_ReadFromDisk.vi显示了这个过程。

此技巧仅适用于上述Windows操作系统。此外,无法在文件中查找高于2GB边界的任意位置并读取那里的数据。

这将我们带到了第二个选项–将64位文件工具与LabVIEW配合使用。一个很好的例子是HDF5。HDF5是由美国国家超级计算应用中心(NCSA)设计、编写和维护的二进制分层文件实用程序。它是免费的,因为它是由美国政府资助的。有关HDF5的完整信息、源代码和二进制文件,请访问http://hdf.ncsa.uiuc.edu/HDF5/。使用HDF5或任何其他64位实用程序需要能够将64位数字传递给实用程序。这就引出了最后一个话题。

4.与64位DLL接口(LabVIEW7.1及更早版本)

LabVIEW8.0引入了对64位整数的完全支持,因此不需要本节中的技术。对于早期版本,有两个选项可用于与64位DLL接口。第一种是编写一个C/C++包装器,它只公开LabVIEW可以本地处理的数据结构。由于这有没有了LabVIEW的易用,我们将讨论第二种选择-使用调用库节点并直接访问DLL,使用一些数字技巧。

可以通过两个64位数字的群集来表示32位数字。64位数字之间的数学运算可以使用众所周知的算法进行编码,以实现任意精度的算术。这些算法超出了本文的范围,但可以在Web上轻松找到它们。

现在有了一种表示64位数字并对其进行数学运算的方法,如何将它们获取到DLL?最简单的方法是将64位实体类型转换为双精度值,然后在DLL请求64位整数时传入双精度值。由于类型转换执行二进制图像转换,类似于C中的并集,因此只要有正确顺序的高阶和低阶双字,一切都会很好。下图显示了正确的顺序和转换为double格式。

调用库节点将负责特定平台的字节排序。此方法也适用于数组,甚至可以在需要它的体系结构(如SPARC)上提供正确的填充。这是因为双精度是一个64位实体。因此,如果DLL具有以下函数原型:  int32 fooFunc(uint64 length, uint64 *elements)

在调用库节点中创建的原型如下所示

Long fooFunc(double length, double *elements).

不能使用此技巧获取函数的返回值。如果希望使用的功能具有原型

uint64 barFunc(void)

那么旧版本的LabVIEW就无法访问完整的返回值。LabVIEW只能获取底部的32位因为函数返回值在处理器的寄存器中返回,而调用列表中的项目则在程序堆栈中返回。在堆栈上,唯一重要的是LabVIEW和DLL使用相同大小的对象。对于函数返回值,整数和浮点值在不同的寄存器中返回。LabVIEW无法访问返回的32位整数的前64位。C/C++包装器是必需的。使用上面的例子,包装器的形式是

void barFuncWrapper(uint64 *barFuncData){

  *barFuncData = barFunc();

   return;

}

幸运的是,这通常不是必需的。NI产品提供了两个与64位DLL接口的示例–两个接口都与HDF5连接。

HWS文件工具是一个C/C++包装器,设计时考虑了LabVIEW接口。由于HDF5的级别非常低且难以掌握,HWSAPI在HDF5复杂性上放置了标准的LabVIEW文件I/O接口。HWS目前可与NI-HSDIO、NI-SCOPE和NI-FGEN驱动程序、模拟和数字波形编辑器以及2004年<>月及以后的任何驱动程序CD一起提供。

sfpFile实用程序集是一个LabVIEW实用工具,可直接连接HDF5,使用尽可能少的C封装器。它可从ni.com获得,但不受NI的支持。它体现了直接使用LabVIEW的64位DLL的原则。此实用程序集中的两个示例VI包含在GigaLabVIEW.llb中。第一个是H5Screate_simple.vi,它是对带有原型的HDF5DLL的直接调用。

int32  H5Screate_simple(int32  rank, const uint64 *dims, const uint64 *maxdims).

LabVIEW调用库节点原型是

long H5Screate_simple(long rank, double *dims, double *maxdims).

第二个是DU64_DBLToDU64.vi,这是一个如何将双精度浮点数转换为两个32位整数的簇的示例,然后转换回双精度以传递给HDF5例程。双精度提供了一种方便的方法来跟踪LabVIEW中的大文件指针整数,因为其精度为52位。由于NTFS只有48位数据空间,因此效果很好。整数值浮点数的加法、减法和乘法通常是精确运算。

请注意,HWS和sfpFile生成相同的文件格式。只是API不同。

5.示例代码

GigaLabVIEW.llb包含本教程中提到的所有示例代码。如果愿意,还可以下载HDF5DLL以防止HDF5示例查找不存在的库。将它们放在系统目录中。

这是LabVIEW的一个功能介绍,更多的使用方法与开发案例,欢迎登录官网,了解更多信息。有需要LabVIEW项目合作开发,请与我们联系。

厂家没有提供LabVIEW的例子。根据通讯协议的相关的说明,编写了适合项目的程序。程序截图如下所示。

相关资料说明,如下所示。

LabVIEW程序,如下附件所示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/113498.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3 列表页开发【选择展示列】功能

目录 背景描述&#xff1a; 开发流程&#xff1a; 详细开发流程&#xff1a; 总结&#xff1a; 背景描述&#xff1a; 这个功能是基于之前写的 封装列表页 的功能继续写的&#xff0c;加了一个选择展示列的功能&#xff0c;可以随时控制表格里展示那些列的数据&#xf…

深度强化学习 第 4 章 DQN 与 Q 学习

4.1 DQN 最优动作价值函数的用途 假如我们知道 Q ⋆ Q_⋆ Q⋆​&#xff0c;我们就能用它做控制。 我们希望知道 Q ⋆ Q_⋆ Q⋆​&#xff0c;因为它就像是先知一般&#xff0c;可以预见未来&#xff0c;在 t t t 时刻就预见 t t t 到 n n n时刻之间的累计奖励的期望。假如…

5G来临,迎客莱带你探索运营商大数据的应用

随着5G时代的来临&#xff0c;不仅在算力的基础上得到了加强和保障&#xff0c;同时也丰富了计算的方式和模式&#xff0c;如边缘计算、霾计算等。计算方式和模式的改变&#xff0c;对于运营商来说&#xff0c;意味着更丰富的数据维度&#xff0c;更鲜活的数据和更强大的数据处…

无人机航拍图像拼接与目标识别

一、简介 无人机用来做图像侦察是常见功能&#xff0c;现有技术基本是无人机对某片区域进行飞行&#xff0c;人工实时监控飞行图像&#xff0c;将图像录制成视频供事后回放。此方法对人员业务要求比较高、反应速度足够快、不利于信息收集、录制视频丢失空间信息、对于后期开展区…

Qt判断一个点在多边形内还是外(支持凸边形和凹变形)

这里实现的方法是转载于https://blog.csdn.net/trj14/article/details/43190653和https://blog.csdn.net/WilliamSun0122/article/details/77994526 来实现的&#xff0c;并且按照Qt的规则进行了调整。 以下实现方法有四种&#xff0c;每种方法的具体讲解在转载的博客中有说明&…

Python之爬虫

目录 HTTP请求HTTP响应获得页面响应伪装用户访问打包数据爬取豆瓣top250 HTTP请求 HTTP&#xff1a;HypertextTransferProtcol 超文本传输协议 1、请求行 POST/user/info?new_usertrue HTTP/1.1#资源了路径user/info 查询参数new_usertrue 协议版本HTTP/1.1 2、请求头 Ho…

element ui 下拉框 选择月份和天数

一、背景 目前做的管理系统项目&#xff0c;期望实现功能为&#xff1a;设置出账周期和出账日&#xff0c;考虑使用element ui下拉框实现功能 二、所用技术 vue2element ui 三、实现效果 四、具体代码 <template><popup-frame :title"批量设置出账日" …

Leetcode—2530.执行K次操作后的最大分数【中等】(C语言向上取整数学公式)

2023每日刷题&#xff08;五&#xff09; Leetcode—2530.执行K次操作后的最大分数 向上取整思想 参考了这篇文章 有人肯定会问&#xff0c;这个向上取整为什么是这样来的。接下来我简单讲解一下。 数学式&#xff1a; x y 数学式&#xff1a;\frac{x}{y} 数学式&#xff1a…

配置Linux

首先安装VMware&#xff1a; 安装说明&#xff1a;&#xff08;含许可证的key&#xff09; https://mp.weixin.qq.com/s/XE-BmeKHlhfiRA1bkNHTtg 给大家提供了VMware Workstation Pro16&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1q8VE3TkPzDnM3u9bkTdA_g 提取码&…

文件的物理结构(连续分配,链接分配,索引分配)

1.文件块&#xff0c;磁盘块 类似于内存分页&#xff0c;磁盘中的存储单元也会被分为一个个“块/磁盘块/物理块”。 很多操作系统中&#xff0c;磁盘块的大小与内存块、页面的大小相同。 内存与磁盘之间的数据交换&#xff08;即读/写操作、磁盘I/O&#xff09;都是以“块”为…

详细解读DALLE 3技术报告:Improving Image Generation with Better Captions

Diffusion models代码解读&#xff1a;入门与实战 前言&#xff1a;OpenAI是推动大模型创新的领头羊&#xff0c;最近发布的DALLE 3凭借着远超市面上其他图片生成模型的表现&#xff0c;再次火出圈。最近OpenAI官方发布了DALLE 3的技术报告《Improving Image Generation with B…

Catalan 数 和 Stirling 数

这个也可以理解为栈&#xff0c;用 ( 表示 入栈 &#xff0c; ) 表示出栈 , 任何情况下表示入栈的 ( 都必须大于等于 ) 的个数 这个思路和入栈出栈的思路是等价的

ms-sql server sql 把逗号分隔的字符串分开

案例&#xff1a; sql 查询-字段里是逗号,分隔开的数组&#xff0c;查询匹配数据 sql 查询-字段里是逗号,分隔开的数组&#xff0c;查询匹配数据_sql server 数组匹配-CSDN博客 SQL SERVER 把逗号隔开的字符串拆分成行 SQL SERVER 把逗号隔开的字符串拆分成行_sqlserver拆分…

【暴力剪枝】CF1708D

https://codeforces.com/contest/1708/problem/D 题意 思路 这样的操作下&#xff0c;数列减的速度是非常快的&#xff0c;也就是说&#xff0c;易出现很多的0&#xff0c;0的操作没啥意义&#xff0c;所以我们要找到第一个 >0 的数对其后的序列进行排序&#xff0c;就能大…

051校园短期闲置资源置换平台

大家好✌&#xff01;我是CZ淡陌。一名专注以理论为基础实战为主的技术博主&#xff0c;将再这里为大家分享优质的实战项目&#xff0c;本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路…

Mac硬盘检测工具

Mac硬盘检测软件是一款用于检测和诊断Mac硬盘健康状态的工具&#xff0c;帮助用户及时发现潜在的硬盘问题&#xff0c;避免数据丢失和系统故障。通过全面的检测和报告功能&#xff0c;用户可以更好地了解自己的硬盘状况&#xff0c;确保数据的安全和可靠。给大家介绍几款好用的…

数字秒表VHDL启动暂停清零,源码和视频

名称&#xff1a;数字秒表VHDL启动暂停清零&#xff08;代码在文末付费下载&#xff09; 软件&#xff1a;Quartus 语言&#xff1a;VHDL 代码功能&#xff1a; 数字秒表 使用VHDL语言设置数字秒表。要求具有百分秒、秒和分钟显示,百分秒范围00-99,秒范围00-59,分钟范围0…

视频播放音画同步处理

一、视频播放流程 播放一个视频&#xff0c;一般分一下几步完成 解复用&#xff08;Demux&#xff09;&#xff1a;在媒体文件中将音频数据、视频数据、字母数据分离出来。 二、播放参数说明 视频帧率&#xff1a;一秒钟需要显示的画面&#xff0c;比如25FPS&#xff0c;意思就…

el-upload实现上传文件夹

背景&#xff1a;如图一所示&#xff0c;最下面有一个黄色上传文件按钮&#xff0c;为手动上传而且上传区域有上传文件和上传文件夹的区分 所以需要在点击了上传文件夹做特殊处理使得el-upload可以上传文件夹 一、template区域 <el-uploadclass"upload-file"dra…

【COMP305 LEC 3 LEC 4】

LEC 3 A basic abstract model for a biological neuron 1. Weights of connections Neuron gets fired if it has received from the presynaptic neurons 突触前神经元 a summary impulse 脉冲, which is above a certain threshold. Signal from a single synapse突触 ma…