LabVIEW实践之路第三章39-40
- 格式:doc
- 大小:136.50 KB
- 文档页数:2
LabVIEW实践之路第四章数据持久化基础---文件I/O使用文件进行数据持久化是众多中小数据量的软件系统的首选,不好意思,有点酸了---应该说用文件存储和管理数据被广泛使用!当然,数据库系统的优势已经被充分证实,我们在后面专门会实践一下,这一章当让是学习LabVIEW的文件系统了。
在本章正是开始之前,我们得有这样的概念:对数据存储和管理的要求不同,一般来说最适合的文件类型也不同。
比如存储大量的浮点型数据和存储几十行的配置参数,前者必然要求在大数据量下的读、写、查询等性能,但通常不要求文本格式直接编辑,而后者一般不涉及读写性能问题,不过若是文本格式会给维护更方便。
本章主要给出电子表格、文本文件及测试文件的典型应用,对自定义二进制文件、配置文件以及XML(这是很有用滴~)则简单介绍一下喽。
图4.1 文件I/O函数4.1 文本文件(Text files)与二进制文件(Binary files)文本文件与二进制文件在编码层次上时不同的。
简单来说,文本文件是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等等,是定长编码的。
二进制文件是基于值编码的文件,你可以根据具体应用,指定某个值是什么意思(这样一个过程,可以看作是自定义编码),二进制文件可看成是变长编码的。
一般认为,文本文件编码基于字符定长,译码容易些(比如用windows自带的记事本、写字板就能打开);二进制文件编码是变长的,所以它灵活,存储利用率要高些,译码难一些(不同的二进制文件格式,有不同的译码方式,二进制文件直接用记事本打开就是一堆乱码)。
下面我们就用记事本打开两个文件,分别存储了数字1至100,前一个为某种格式的文本文件,后一个则为某种格式的二进制文件。
第四章数据持久化基础---文件I/O图4.2 用记事本打开文本文件和二进制文件用LabVIEW帮助的话说“如需在其它应用程序(如Microsoft Excel)中访问这些数据,使用最常见且便于存取的文本文件;如需随机读写文件或读取速度及磁盘空间有限,使用二进制文件,在磁盘空间利用和读取速度方面二进制文件优于文本文件;如需在LabVIEW中处理复杂的数据记录或不同的数据类型,使用数据记录文件,如果仅从LabVIEW访问数据,而且需存储复杂数据结构,数据记录文件是最好的方式。
LabVIEW 实践之路43下一次输入内容和存储。
图4.7写入文本文件注意,在这个实例中每次输入的文本都会在最后加一个行结束符,接下来通过“写入文本文件”VI 存到制定的文件中,然后通过局部变量清空文本输入框,等待下一次操作。
听起来很好啊,不过需要我们实现了看一下有没有问题。
比如,我先输入了“从前有座山”,存储,打开文件看看,感觉不错啊;又输入了“山里有座庙”,存储,打开文件看看,怎么回事?就剩下了“山里有座庙”一句,原来的“从前有座山”不见了。
很显然,这是覆盖存储的方式,那能不能像电子表格文件VI 一样选择添加至已有文件呢?答案是该VI 没有提供此接线端~但是,如果你仔细观察图4.3,也就是电子表格文件VI 的底层,一切都迎刃而解了!接下来继续实践。
图4.8 改进的连续写入文本文件第四章 数据持久化基础---文件I/O44 图4.8所示文本文件操作具有非常典型的处理流程,即新建(或打开,这儿还包含了配置、预处理等)、循环处理、释放资源。
说它典型,是因为许多其他处理流程都是这样按部就班,或者在此基础上增减。
比如数据采集程序(见第9章),通常包括配置、开始采集、循环读取、释放资源等。
在本例中,循环内写入文本文件前通过“设置文件位置”指定了新写入的文本放置在原有文本的什么位置,总共有开始位置(start )、结尾位置(end )以及当前位置(current )三个选项,可以根据需要选择。
操作完成后释放资源是一个好习惯,在某些情况下,资源是被独占的,如果不释放掉就无法被别的程序使用。
接下来我们读取一下文本文件。
如图4.9所示,用一个子VI “读取文本文件”默认情况下便可以读出全部文本。
如果按需读取,那说来也简单。
要读取“从前有座”前4个字符怎么办?注意“读取文本文件”VI 左侧有一个count 连线端,赋值为8就可以了。
等等,为什么不是4?别忘了,中文属于UNICODE 编码,两个字节一个汉字哦~想读中间数个字符怎么办?看上一段的“设置文件位置”!又如想读出n 行,那怎么办?在“读取文本文件”VI 上面点击右键,看看有什么选项?对了,有“读取行”选项处于未选中,选中它,就变为按行读取模式了。
本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!== 本文为word格式,下载后可方便编辑和修改! ==labview,实习报告篇一:labviEW虚拟仪器实习报告实验一:实验步骤(1)启动LabVIEW,创建一个VI并命名为test1。
(2)在前面板中放置一个温度计控件,并修改控件标签名为发动机温度和设置最大值为100。
该控件从“控件—经典—经典数值”子选项板中获得。
(3)按同样的方法在前面板中放置一个仪表控件,并修改仪表控件的标签名为汽车速度,标尺刻度范围为0~150。
(4)按同样的方法在前面板中放置一个数值输入控件,并修改控件标签名为发动机转速。
(5)从“窗口”下拉菜单中选择“显示程序窗口”切换到程序框图窗口。
(6)在程序窗口中创建乘法函数,该函数中函数选项板中的“函数—编程—数值”子选项板中选择,并和发动机转速输入控件连线,为乘法函数创建一个常量,修改为图中所示值。
(7)按同样的方法创建加法函数、平方根函数和除法函数,并按图中所示修改常量值和连好线。
(8)切换至前面板,在发动机转速控件中输入数值,点击运行按钮,运行VI程序。
(9)修改图标为T/V以表示该子VI输出量为发动机温度和汽车速度,并保存。
前面板:程序框图:实验二:实验步骤:(1)启动LabVIEW,创建一个vi并保存为test2。
(2)在前面板中创建一个旋钮控件,修改标签名为发动机转速,设置数值范围为0~5000,从旋钮控件中调出一个数字显示控件来同步显示旋钮控件当前值。
(3)在前面板创建两个数值显示控件,并修改标签名为汽车速度和发动机温度。
(4)切换至程序框图窗口。
(5)在程序框图中创建一个大于或等于函数。
(6)在程序框图中调用实验一的子函数,从函数选板中的“函数—选择VI”选在实验一创建的子vi.vi。
(7)在程序框图中创建一个蜂鸣器函数,并按图示连线情况连线。
(8)切换至前面板,在发动机转速中输入数值,点击运行按钮运行。
LabVIEW实践之路了。
“数组插入”函数的输入同“替换数组子集”一模一样,分别是输入数组、起始位置和插入/替换的元素。
如右图所示,这是一个在一维数组中插入两个元素的例子。
“删除数组元素”通过两个(如果是多维数组那就会超过两个)输入来确定到底哪些元素被从数组中删除掉:长度和索引(即初始位置),多维数组的初始位置的确定有可能使用多个索引值。
而该函数的输出比较贴心:“已删除元素的数组子集”和实际“已删除的部分”。
“初始化数组”用于通过某一给定初始值来快速构造数组常量。
“创建数组”很有用,你可以通过连接输入(即串接)或并接数组来构造新的数组,有时候我也使用该函数对增加已有数组的维数以适应程序需要。
“数组子集”用来取部分元素,如何确定取哪一部分呢?呵呵,和“删除数组元素”函数相同。
剩下的函数就不再详述了,相信很容易掌握。
像搜索、插值、二维数组转置等都是很有用的。
要是还不知道怎么用,那看帮助或者动手试一下吧!(别忘了,我们常说的优秀的软件都会带有非常好的帮助文献和示例库,LabVIEW也是如此!)我们来看一个综合实例,如图3.3所示,我们需要显示数组的大小,在原数组中找到最小值和最大值,并将最小值置为0,最大值所在列删除掉。
其中用到了五个不同的数组函数,当然你可以继续添加功能,比如将输出的二维数组转置,然后再转成一维数组,然后再……与数组作斗争,其乐无穷哦。
第三章我的类型我做主:从数组与簇说开图3.3 数组函数实例数组能够与其他数据类型直接进行运算或相互转换,由于簇、字符串等还没有详细介绍过,我们只简单说一下数组运算时几个应注意的地方。
数组可以同数字进行加减乘除等运算,运算的结果是每一个元素分别同该数字进行运算后的数组输出,如图3.4实例所示。
图3.4 数组与数字相乘数组同数组进行运算时,如果两数组长度不一,那么以较小的数组长度为基准,超出的被舍弃。
图3.5 两数组相加运算。
LabVIEW实践之路第三章我的类型我做主:从数组与簇说开数组(Array),多么好听的名字(有点想吐…)。
不管怎么说,这个东东是各种编程语言都绕不过去的,你想想,一大堆类型相同的元素,要是没有数组来组织存放,用的时候怎么办呀??(哦,稍微夸张一点,呵呵,我知道还有各种各样的容器类型,java里面容器类就有好多啊)不过非常严肃的说:LabVIEW的数组函数是非常好用的!3.1 LabVIEW中数组的特点稍稍总结一下,LabVIEW中数组的以下特点得了解,这样才能开始学会使用和用好它。
1)LabVIEW的前面板控件中有数组类型,如果你只想使用数组常量,可以在框图程序里面直接构建数组常量,当然,出现最多的还是框图程序中间过程的连线(数据流)表现为数组类型,如右图所示。
顺便说一句,数据流连线的的颜色、形态、粗细等表示了不同的数据类型,像一维浮点数数组的连线就是橙色粗实线等等。
直接在前面板或框图创建数组需要先拖放一个空的数组控件或数组常量,然后再将你需要的特定数据类型的控件或常量放到这里面。
比如你想要一个布尔型的数组控件,那么可以把按钮型或指示灯型布尔控件放到数组控件里。
这里需要注意两个问题:其一是通过上述步骤构造完数组后。
数组并未初始化,还是一个特定数据类型的具有0个元素的数组;其二是一个数组(不管多少维),只能放置一种数据类型的元素,当然这种数据类型可以非常复杂。
2)同大部分编程语言一样,LabVIEW中数组元素的标识(想叫编号、下标也行,能理解就OK)也是从0开始,即如果数组中共有10各元素,那么第一个为0号元素,最后一个为9号元素。
3)LabVIEW的数组最让人高兴的特性就是,它是长度可变的!是能够根据你的需求自动变化的!我们不需要像C语言一样必须事先定义数组长度,用的时候特别小心不要越界,如果想要增加已有数组长度还得费点功夫,在LabVIEW里面这些都可以不去管它,是不是很让人激动呢?举个例子来看一眼,如图3.1所示,我们通过For循环产生随机数数组并显示,不管你产生多少个随机数,数组显示都不用我们去关心到底长度应该设多少。
LabVIEW实践之路
簇非常灵活,操作起来也比较简单,最常用的就是以下四个函数:捆绑/解除捆绑,
按名称捆绑/按名称解除捆绑。
“捆绑”让你可以随心所欲的把多个类型的数据依次打成簇,只要连接到左端输入接口即可,但不能有空置的输入端口;“解除捆绑”则是依次把所有的簇内数据端口提供给你,不管你用不用。
“按名称捆绑”则需要你提供一个预定义的簇的类型,将该簇连接到函数中间的“输入簇”,同时通过左端输入接口你可以有选择的连接一个或几个(注意:预定义的每一个簇内元素都应该有一个名称,因为“按名称解除捆绑”时用得到);“按名称解除捆绑”允许你只选择其中你需要的解出数据,其余的端口干脆不显示,程序看起来很清爽。
(注意,经过测试,发现不管是直接“解除捆绑”还是“按名称解除捆绑”,两者耗用时间几乎相同,大家可以试一下)以下是簇的捆绑、解除捆绑的实例。
另外,这几个函数可以混用哦,只是有些问题得注意,自己试试吧!
图3.11 簇的捆绑和解除捆绑
一直强调簇的灵活性,你可以构建各种各样的簇类型来体验一下,比如簇中有数组,簇中有簇,簇中有各种稀奇古怪的类型的合集~不要小看这一特点,你在设计较为复杂的程序时很可能要求助于它的。
比如LabVIEW中的“错误信息”类型就是一种典型的簇,而用于进行DAQ配置的数据结构更是缺少不了它的身影,如图3.12、3.13所示。
图3.12 典型的簇:错误信息类型图3.13典型的簇:应变采集的桥路信息类型图3.14为使用簇的简单实例,通过自定义的数据类型传递由布尔数组和颜色量
第三章我的类型我做主:从数组与簇说开
(U32)组成的信息,实现通过切换按钮控制指示灯以及颜色显示。
图3.14 簇类型的简单实例
这一章看起来有点短,不过数组和簇确实是非常重要的数据类型,许多操作需要自己在应用中掌握,毕竟这不是帮助文档,不可能全部描述一遍。
LabVIEW里有许多函数是多态的,比如既能够够应用于数组、又能够应用于簇等等,你可以试一下~比如LabVIEW的帮助>>查找范例里面有个例子String Length,将Length函数用于不同的数据类型,你来试试吧!
图3.15 String Length实例。