在使用labview过程中,数据库的使用也是最为常用的。下面就来说说labview数据库的使用方法。
从很多Labview的书籍中看到的数据库使用方法都是需要建立数据源,也就是需要进控制面板把在电脑上创建的aess数据库与数据源(ODBC)链接起来。这样做会有一个问题,就是应用程序做完导出后再别的电脑上使用的话也需要先去把aess数据库与数据源链接起来,显得很不方便。
其实还存在另外一种方法,不需要链接数据库与数据源,用SQL语言就能直接 *** 作到数据库,省去了在新电脑中首次使用都需要设置链接的麻烦。
下图就是SQL语言的数据库路径了,也就是(Provider=MicrosoftACEOLEDB120;DataSource=数据库所在的路径数据库名),这就是一个数据库的路径了,因为数据库需要多次读取与写入、查询、创建与删除表等,每次使用都去写这么一段函数就会很麻烦,直接设置一个数据库路径,每次要使用时都用“数据库路径”的局部变量。
下图就用了上图的数据库路径的局部变量,用作为连接代码连接到openconn的。用选择语句从表table1中ID号为1的行中DEEP数据读取出来了。
这样做就不需要在控制面板中设置数据库的链接,直接创建一个数据库就能使用了。
数值控件用于在LabVIEW应用程序的前面板上输入及显示数值数据。下表包含新式、银色、系统和经典子选板上数值控件的一般使用说明。本文以新式为例进行讲解,其他类型的数值控件使用方法和属性
选择的子选板风格不同,可用的数值控件也不尽相同。关于可用的数值控件,请参考新式、银色、系统和经典子选板的内容。
新式数值控件位于:前面板-控件选板-控件-新式-数值;
Express数值控件位于:前面板-控件选板-控件-Express-数值输入控件/数值显示
1)右键单击一个数值对象,从快捷菜单中选择显示格式,显示数值属性对话框的显示格式选项卡。
2)从类型列表框中选择一个格式。如数值对象的表示法为浮点,则无法以十六进制、八进制或二进制表示数值。
3)位数和精度类型选项用于在必要情况下改变数值的精度。所选精度仅影响数值的显示。数值的内部精度由表示法本身决定。
注: 选择高级编辑模式,打开可以直接输入格式字符串的文本选项。输入格式字符串,自定义控件的数值精度。
4)如需改变数字显示的格式与精度,从应用于下拉菜单中选择数字显示并重复执行步骤2和步骤3。则提示框将使用与控件的数字显示相同的格式与精度。如控件的数字显示多于一个,则提示框将使用当前活动指针或滑块的数字显示所使用的精度与格式。只有包含数字显示的项,才会出现应用于下拉菜单。
5)也可使用数字属性,通过编程配置格式与精度,单击确定按钮。
更多的显示格式与进度请参考LabVIEW帮
改变整数数值控件的显示方式(二进制,八进制,十进制,十六进制):
1)右键单击一个数值对象,从快捷菜单中选择显示项-基数;2)浮点数数值控件无法实现显示进制切换,必须改成整数;3)切换成整数后,可以切换二进制,八进制,十进制,十六进制;
LabVIEW中可用的单位:1)LabVIEW中使用的基本单位是SI基本单位。2)LabVIEW也识别SI基本单位的导出单位,下表是LabVIEW识别的SI导出单位。3)右键单击一个数值对象,从快捷菜单中选择显示项-单位标签(注意整数控件不支持)。4)注意输入和输出控件的单位标签保持同一种类型。5)如果数值控件基数-SI符合(控件将自动根据数据长度调整单位)
更多的设置,我们可以通过右击控件属性,设置标签可见,标题可见,启用状态,大小(宽度可以自由设置,高度是根据数值文件字体调整),颜色,显示增量/减量按钮等属性
初学LabVIEW数据采集中常见的问题联系客服
发布时间 : 2023/1/5 0:30:29 星期四 文章初学LabVIEW数据采集中常见的问题更新完毕开始阅读
初学数据采集中常见的问题
经常在论坛上会碰到一些会员朋友发贴提问数据采集的问题,其中很大一部分是初学者刚接触数据采集,对其中的一些基本概念还没有太多的了解,这里将这些问题集中一下,做个总结。由于个人接触的板卡以NI的为主,这里的内容只针对NI的数据采集卡,不保证适用于其它公司的数据采集卡。
1, 数据采集的时候数据会不会丢失? ——这是最常见的一个问题,刚开始学数据采集的时候都会在考虑,如果软件上读取数据的循环运行得不够快时,比如100K采样率的时候,软件上循环肯定没这么快,数据是不是就丢失了?
首先我们要清楚的是,数据采集功能是由数据采集卡来完成的,软件只是将采集到的数据接收到电脑上面过来,数据采集卡有自身的办法来解决硬件采集速度快过于软件读取速度的问题。
这需要对数据采集过程中数据的传输作一个介绍:外部的信号进入数据采集卡后,经过各种处理转换,先进入数据采集卡自身的缓冲区里面,缓冲区是先进先出(FIFO,First In First Out)的,NI的数据采集卡应该是都有板载的缓冲区,区别在于缓冲区的大小而已。然后当板载缓冲区中的数据量到了一定的条件时,数据采集卡将缓冲区的数据上传到计算机内存中,一般是以DMA(直接内存访问)方式传入的,但也可以设置为其它方式,比如中断等。上传数据的方式和时机可以通过DAQmx的属性节点进行设置或查看,DAQmx中默认是使用DMA传输方式,传输条件是板载内存非空。 以下蓝色部分摘自NI网站:
数据传输方式包括直接内存访问(DMA),中断请求(IRQ)和可编程I/O。DMA是一种DAQ板卡和PC内存间直接通讯的传输方式,不再需要处理器的干预。NI \芯片可以处理与PCI总线间的所有总线协议。IRQ传输方式会置高信号并中断处理器,然后由处理器处理数据传输。
IRQ 传输通常很低,只有150 kb/s,而DMA可以高达20 Mb/s。IRQ 传输速率与使用的系统设备相关,如处理器速度等。
图 1 设置模拟输入数据传递方式与时机
数据到了内存后,再由程序中的DAQmx Readvi从内存中读入到计算机中去。这里计算机的内存要和板载缓冲区区分开来,板载缓冲区是厂商固定死的,改变不了,不会出现溢出的情况,它的空间可以很小,比如1Kbit以下,但计算机中为数据采集开辟的内存建议是采
样率的10左右,即是说即使DAQmx Readvi在10秒钟都没有执行一次的话,那么就会出现内存不足以存放采集到的数据的问题,导致数据丢失,DAQmx Readvi会报错。内存中的大小可以在DAQmx Timing (Sample Clock)vi的每通道采样输入端进行设置,参考下图中DAQmx帮助中的说明:
图2 设置内存缓冲区大小
但是DAQmx会默认设置一个最小值,如果你在每通道采样输入端设置的值小于这个值的话,DAQmx会忽略你输入的这个值而使用默认最小值,见下图:
图3 确定缓冲区大小
不过单单将这个缓冲区设置成10倍,并不一定能保证缓冲区不会溢出,因为缓冲区的存储的数据量不但跟它的输入速度(采样率)有关,还跟它的输出速度有关,它的输出速度就是采集程序从它里面读取的速度,所以一般在使用循环中调用DAQmx Readvi的时候,一般是选择多态VI中的多采样而不是单采样,如下图所示:
图4 设置DAQms Readvi
同时将它的每通道采样数设置为-1,表示每次调用DAQmx Readvi的时候都是将内存中的所有数据读取进来。在一些特殊情况下才将这个输入设置为其它整数,但就得保证循环能尽快的执行,以免缓冲区溢出。如果设置为100的话,表示每次从缓冲区中读取100个数据回来,如果缓冲区的数据不足100个,那么就会等到够了100个后才读进来并输出,程序会在这里等待缓冲区的数据够100个才往后执行,跟串口设置读取缓冲区字节数一样。设置为-1则不会出现等待的情况,有就读,没有就返回空数组。
所以,总结一下,为了保证数据不会失丢,要设置好内存缓冲区的大小,还要保证读取缓冲区的程序(DAQmx Readvi)循环得尽量快,每一次读取的数据尽量多。
2, 数据采集的时间问题
数据采集中时间相关的问题主要是二方面,一个是每一个数据点的时间,在NI的数据采集中是通过T0和dt来确定的,T0就是开始数据采集的初始时间,是任务开始时数据采集卡读取的计算机时间,dt二个数据点之间间隔的时间,是采样率的倒数,比如1K采样率,dt就是1/1000=0001秒=1毫秒。在使用DAQmx Readvi的时候要选择波形输出而不是选择DBL输出,波形输出就带有这些信息,而DBL就只是有数据而没有时间信息了。见图4。 另一个就是采样率的设置问题,数据采集卡的采样脉冲一般是由它的内部时钟源进行分频后得到的,所以采样率是不是非常准确,得看时钟源是否能被整数倍地分频到指定的采样率,具体可以参考NI上的文章: 确定NI-DAQmx中采集的实际采样率
硬件: Multifunction DAQ (MIO)
问题: 我设置采集的采样速率为500,001 Hz。我想知道我的设备所用的实际采样率。如果我在LabVIEW中用NI-DAQmx编成,如何确定实际采样率?
解答: 您可以用DAQmx定时属性节点来获得此信息。SamplClkTimebaseRate属性提供了产生实际采样率的时基频率(timebase frequency)。大多数DAQ设备有两个时基频率:20 MHz和100 kHz。SamplClkTimebaseDiv属性提供分频系数,用于从时基频率分频下来到您所希望的实际采样时钟频率。所以当您设置您的采样速率为500,001 Hz,设备利用20 MHz时基和分频系数39来获得实际的采样速率20 MHz/39 = 512,82051 Hz 分频系数永远是一个整数,该整数的大小取决于您的数据采集板卡的型号。举个例子:假设分频系数是一个16位的整数,这样20 MHz时基允许您使用的所有频率均大于30518 Hz,因为一个16位整数对应的最大分频系数为65,535。100 kHz时基用于低于该频率的采样速率。进而,如果您指定的频率不能准确得到,驱动将采用最接近于您指定的采样率且高于您所指定的采样率 对E系列:
AI采样时钟分频系数 = 24位 AI转换时钟分频系数= 16位 AO采样时钟分频系数 = 24位 对M系列:
AI 采样时钟分频系数 = 32位 AI转换时钟分频系数 = 32位 AO采样时钟分频系数 = 32位
另外,如果确实需要指定的采样率,也可以用外部的时钟源作为采样脉冲来进行数据采集。 其实更深入一点的话,在连续采集的应用程序中,数据采集时钟源的准确性问题就会显示出来,假设时钟源的误差是50ppm(百万分之五十),即二万分之一,而一天有86400秒,如果连续运行一天的话数据采集的时钟误差最多就会有4秒多,所以到了24小时后就会出现波形图上的时间与计算机时间差了大概4秒左右的现象,时间越长这个误差就可能越大,如果这个误差不能接受的话就需要想其它办法解决。其中一个方法是换一个更高精度的时钟源,但长时间运行的话始终还是会有误差的,之前用过的方法是到了0点的时候关闭任务再重新开启,让数据采集卡与计算机重新对时。
3, 其它一些问题
A, 数据采集卡在多通道采集时只需要将创建任务时输入多个通道的名称即可,比如单通道
时是使用“Dev1/ai1”表示使用第一块数据采集卡的第二个模拟输入通道,“Dev1/ai0:1”表示使用的是第一块数据采集卡的第1、2个模拟输入通道,那么在DAQmx Readvi时就要选择它的多通道读取,然后可以通过“索引数组”将波形数组分为第一通道波形和第二通道波形。如下图所示:
图5 数据采集例子
但要注意的是同一个数据采集卡只能启用一个同类型的数据采集任务,比如不能创建二个模拟输入的任务,分别测量二个通道,只能是启用一个任务,但是同时读入二个通道的数据。但可以启动不同类型的任务,比如在数据采集时又进行数据输出等。需要注意的是多种任务同时运行时可能会导致DMA通道不够用,这时就需要将某些任务的数据传输方式设置为中断等其它方式了。
B, 在同一个模拟输入采集的任务中,可以对不同的通道分别设置它们的输入范围和接线方
式(单端接地、差分等等),但是不能设置不同的采样率,如果需要使用到不一样的采样率时,可以使用几个采样率中最大的那个采样率来进行数据采集,然后在软件上对低采样率的数据进行重采样,得到较低的采样率。
C, 可以多看一下NI多功能板卡的使用手册,里面有非常详细的各种数据采集相关的知识
的介绍,包括原理、接线等。另外也可以多上NI网站,随便搜索个关键字就能发现很
多非常有用的链接。
使用LabVIEW来防止多开可以采用以下几种方式:
1在LabVIEW中设置文件锁,每次打开相应VI之前需要检查文件锁是否已被设置,如果已被设置则不可再打开;
2在LabVIEW中设置窗口参数,利用窗口参数设置只可打开一个VI,而不能打开多个;
3编写LabVIEW代码,使其一旦发现有多个VI同时打开,就会自动关闭多余的VI。
以上就是关于labview数据库怎么做(labview连接数据库方法)全部的内容,包括:labview数据库怎么做(labview连接数据库方法)、Labview中输出数字怎样使其精度为0.05、labview里数据处理里数据不进行输出如何处理等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)