CSDN话题挑战赛第2期 参赛话题:学习笔记
学习之路,长路漫漫,写学习笔记的过程就是把知识讲给自己听的过程。这个过程中,我们去记录思考的过程,便于日后复习,梳理自己的思路。学习之乐,独乐乐,不如众乐乐,把知识讲给更多的人听,何乐而不为呢?
博客写作背景----项目中解决的问题
最近遇到一个使用stm32单片机多路采集信号的项目,还需要在上位机进行波形的查看,信号算法的处理,初步定为使用labview编写上位机程序进行处理。为啥用labview呢,概括地说,LabVIEW作为测试软件开发平台有如下特点和优点。 (1)图形化编程环境 LabVIEW的基本编程单元是图标,不同的图标表示不同的功能模块。用LabVIEW编写程序的过程也就是将多个图标用线连起来的过程,连线表示功能模块之间存在数据的传递。被连接的对象之间的数据流控制执行顺序,并允许有多个数据通路同步运行。其编程过程近似人的思维过程,直观易学,编程效率高,无须编写任何文本格式的代码,易为多数工程技术人员接受。 (2)可重用性高 LabVIEW继承并发展了结构化和模块化程序设计概念,使测试程序能够很好地体现分层性、模块化,即可以把任意一个测试程序当做顶层程序,也可将其当做其他测试程序的子程序,这样,用户就可以把一个复杂的应用任务分解为一系列、多层次的子任务。通过为每个子任务设置不同的功能,并将这些测试子程序进行适当的组合、修改、交叉和合并等,就可以在顶层最终建成一个包括所有应用功能的测试系统。 (3)开发功能高效、通用 LabVIEW是一个带有扩展功能库和子程序库的通用程序设计系统,提供数百种功能模块(类似其他计算机语言的子程序或函数),包括算术运算、函数运算、信号采集、信号输出、数据存取、信号分析处理、数据通信等功能模块,涵盖了测试的各个环节,用户通过拖放及简单的连线,就可以在极短的时间内设计好一个高效而实用的测试软件,再配以相应的硬件就可完成各种测试任务,既节约了时间,又可提高测试的可控制性及测试速度。 (4)支持多种仪器和数据采集硬件的驱动 LabVIEW提供了数百种仪器的源码级驱动程序,包括DAQ、GPIB(IEEE488)、PXI、VXI、RS232,根据需要还可以在LabVIEW中自行开发各种硬件驱动程序,也可通过动态链接库(DLL)利用其他语言开发驱动函数库,从而进一步扩展其功能。 下面是我最近写程序的一些知识,进行了部分的整理,发出来和大家一起分享,也方便我以后查找自己的编程过程。
编程知识点–做题思路
连续采集是指使用一个或多个通道,以一定的采样率进行持续的数据采集。在许多数据采集任务中,并不能事先确定需要采集的数据长度,此时连续采集就显得格外实用。
易用VI是基于中级VI构建的,打开其内部程序框图就可发现每一个易用VI都包含了AI Config、AI Start、AI Read、AI Clear等中级VI,这样每一步循环都会在循环间隔将采集任务清除并重启一遍,这在高速采集时将是很重的资源负担,无法保证采集的连续性。
正确的方法应该是将必要的AI Read和简单的数据处理过程放在循环中,而在循环外放置那些只需运行一遍的AI Config、AI Start、AI Clear等中级VI。
引用LabVIEW自带例程中的连续采集例子“Cont Acq&Chart(buffered).vi”进行说明,可在例程中daq分类下找到该例程序 (1)连续采集需要缓冲区作为数据暂存处,AI Config的buffer size参数指定了该缓冲区的大小(以采样点数计),缓冲区过小会造成数据的溢出,旧数据未来得及读取就被新数据覆盖,缓冲区过大则会加重内存资源的消耗,因此,应结合计算机性能和实际运行情况选择缓冲区大小。 (2)AI Start的number of scans to acquire参数需要设定为0,表示连续采集。 (3)AI Read的输出参数scan backlog表示在执行完一次该VI进行读取后缓存区中剩余的样本个数,可用来观察数据读取速度是否跟得上数据采集速度。 如果该值不断增加,表示缓存中剩余的未读数据越来越多,读取数据速度不够快,将来有可能丢失有效数据。 (4)必要的数据处理和分析过程可放在AI Read之后执行,如本例中的My Data Processing.vi,但不宜编写得太过复杂,因为它是放在循环间隔中进行的,若消耗资源太多,不利于数据采集的连续性。
备注:采集的电压范围是指ADC进行模数转换的最高电压和最低电压。许多数据采集设备支持单极性和双极性两种模式下的多种电压范围,单极性是指0V~+xV的电压范围,双极性是指-xV~+xV的电压范围。如果信号电压能够确定一个大致的变化范围,应该尽量选择与该范围最接近的电压范围,这样能够减小量化误差。 在-10V~+10V的双极性电压范围下使用3位ADC测量一个信号,其量化误差最小为[10-(-10)]÷8=2.5V,而根据信号电压范围改用单极性的0~+10V的电压范围后,量化误差可以变为[0-(-10)]÷8=1.25V,缩小了一倍。因此,合理选择电压范围是非常重要的。
|