- LabVIEW数据采集
- 唐赣
- 5083字
- 2021-01-07 19:11:59
3.1 数据操作
3.1.1 数据类型
前面板中的控件,可以输入或显示数值、文本、布尔等多种类型的数据,这里的“类型”是指数据类型。举个简单的例子,数值控件里显示的阿拉伯数字“1”和字符串控件显示的文本“1”,尽管都可以表示“1”这个意思,但在程序运算时是按不同的数据类型处理的。
LabVIEW的数据类型如表3-1-1所示,程序框图中的接线端利用颜色来表示数据类型。例如,橙色的接线端表示数值型数据,并且细分为单精度浮点数、双精度浮点数、扩展精度浮点数、单精度浮点复数、双精度浮点复数、扩展精度浮点复数。编程中常用的数据类型大致是:数值型、布尔型、字符串型、枚举型等。
(1)函数所能处理的数据类型必须满足函数自身的功能定义。例如,位于“字符串”选板的“字符串”函数支持的数据类型为字符串型,而不支持数值型数据。
(2)选用简单且一致的数据类型对于优化程序的内存有非常大的帮助。
表3-1-1 LabVIEW的数据类型
续表
【练习3-1】
在前面板或程序框图中,快速找出数据类型为数值型、布尔型、字符串型及枚举型的控件。
3.1.2 数值型数据
LabVIEW的数值可以表达浮点数、定点数、整型数、无符号整型数及复数,如图3-1-1所示。
不同数据类型的数据的差别在于存储数据使用的位数和表示的值的范围。
LabVIEW 只能处理介于数值数据类型表范围内的数据,但可以以文本格式显示±9.9999999999999999E999范围内的数据。
图3-1-1 数值的数据类型
1.浮点数
LabVIEW中的浮点数符合ANSI/IEEE标准754-1985。需要提醒的是,并非所有实数都可以用该标准的浮点数表示,因此使用浮点数进行大小比较时会因舍入误差造成非预期错误。浮点数的数据类型接线端颜色为橙色,LabVIEW的浮点数有如下三种数据类型。
① 单精度浮点数(SGL):为32位IEEE单精度格式。在内存空间有限,且不会出现数值范围溢出时,应使用单精度浮点数。单精度浮点数如图3-1-2所示。
图3-1-2 单精度浮点数
② 双精度浮点数(DBL):为64位IEEE双精度格式。双精度是数值对象的默认格式,大多数情况下,应使用双精度浮点数。双精度浮点数如图3-1-3所示。
图3-1-3 双精度浮点数
③ 扩展精度浮点数(EXT):保存扩展精度数到磁盘时,LabVIEW将其保存为独立于平台的128位格式。内存中,大小和精度根据平台有所不同。仅在必需时,才使用扩展精度浮点数。扩展精度算术的运行速度根据平台的不同有所不同。
1)浮点数的符号数值
程序运算可能会产生未定义的或预期的结果,此种数据将会影响后续运算。以浮点数为例,浮点数可以返回以下两种用来表示错误的计算或无意义的结果的符号值。
① NaN(非法数字):表示无效操作产生的浮点数值,如对负数取平方根。
② Inf(无穷):表示超出某数据类型值域的浮点数值,如1被0除时产生Inf。LabVIEW可返回+Inf或-Inf。
浮点运算能够可靠地传送NaN和Inf,而整型数和定点数不支持符号数值传送。
将NaN显式或隐式转换为整型数或定点数时,其值将变为目标数据类型的最大值。
2)浮点数与数值单位
所有浮点数据类型的数值的控件均可以添加用于测量的物理单位,如米、千克等。表3-1-2列出了浮点数可用的单位。
表3-1-2 浮点数可用的单位
续表
续表
【练习3-2】
参看如图3-1-4所示步骤,以数值输入控件为例,理解数值单位及单位转换概念。
图3-1-4 设置数值单位
3)单位和严格类型检查
为对象(如控件、函数)添加单位时,需要确认单位是否相互兼容,只有兼容的对象才可以连线。若将两个单位不兼容的对象连接,LabVIEW将返回错误结果。例如,将以m为单位的对象与以L为单位的对象连接时,LabVIEW将返回错误结果,因为m为距离单位,而L为容量单位。
【练习3-3】
参看如图3-1-5所示步骤,编写程序并理解数值单位的严格类型检查概念。
图3-1-5 单位和严格类型检查
2.定点数
定点数表示用户指定范围和精度内的有理数,定点数的大小为1~64位。可配置定点数为带符号或不带符号。定点数据类型是一种用二进制数(又称“位”)表示一组有理数的数值数据类型。定点数仅有一种数据类型,定点数的数据类型接线端颜色为紫色。
与精度和范围都可变的浮点数不同,定点数的整数和小数部分都是定长不可变的。
以浮点数表示有理数时,由于二进制数的基数是2,因此有理数的分母必须为2的幂的约数。
不需要使用浮点表示法表示动态范围时,或在使用不支持浮点算术的终端时,可使用定点数。
定点数(FXP):存储空间最大为64位。
1)以定点数表示有理数
定点数具有固定个数的整数位和分数位,整数位和分数位分别在二进制点的左、右两侧。
由于定点数可指定其确切的位数,故二进制小数点的位置是固定的。例如,在LabVIEW中,有理数0.5可表示为一个总位数为8、整数位为4的定点数。在LabVIEW中,同一个有理数也可表示为一个总位数为16、整数位为8的定点数,如表3-1-3所示。
表3-1-3 定点数表示有理数
定点数与浮点数的差异在于,浮点数在运算时允许整数位和分数位的位数不同。也就是说,浮点数的二进制小数点可以移动或浮动。
以定点数表示有理数时,若未指定定点数确切的位数,LabVIEW将调整定点数的位数,以尽量避免数据丢失。但是,LabVIEW无法处理大于64位的数字。
2)配置定点数
若要将一个数使用定点数表示,可右击数据对象,打开快捷菜单,选择“表示法”→“更改对象的数据类型”命令。LabVIEW可以配置定点数的编码,还可指定定点数是否包括上溢状态,以及数值函数如何处理定点数的上溢和凑整。
若要配置一个定点数,可右击常量、控件或数值函数,选择快捷菜单中的“属性”命令,打开“数值属性”或“数值常量属性”对话框或“数值节点属性”对话框进行配置。
【练习3-4】
参看如图3-1-6所示步骤,编写程序并为数值输入控件配置定点数,理解定点数的概念,并尝试为数值常量、数值显示控件配置定点数。
图3-1-6 配置定点数
3)范围
LabVIEW根据用户为定点数指定的编码值计算定点数的范围和delta。
最小值:设置定点数范围的最小值。
最大值:设置定点数范围的最大值。
delta:指定范围内数字间的增量。
【练习3-5】
参看如图3-1-7所示步骤,练习使用“即时帮助”窗口查看定点数的配置情况。
图3-1-7 使用“即时帮助”窗口查看定点数配置
4)显示和隐藏定点数的溢出状态LED
将定点控件或常量配置为“包括溢出状态”后,可显示或隐藏控件或常量的溢出状态LED。LED用来显示定点数是否是溢出运算得到的结果。
【练习3-6】
参考图3-1-8,掌握设置溢出状态LED的方法。
图3-1-8 设置溢出状态LED
5)支持定点数据类型的VI和函数
并不是所有 VI 和函数都支持定点数据类型。若将一个定点数连接至不支持定点数据类型的VI或函数,VI将断线不能运行。表3-1-4列出了支持定点数据类型的VI和函数。
表3-1-4 支持定点数据类型的VI和函数
3.整型数
整型数可用于代表整个数字,可以表示正数,也可以表示负数,即包含复合的整型数。将浮点数转化为整型数时,VI将把数字舍入到最近的偶数。例如,3.3舍入后为2,3.3舍入为4。整型数有如下4种数据类型,整型数的数据类型接线端颜色为蓝色。
① 单字节整型数(I8):1字节长度的整型数,存储空间为8位。
② 双字节整型数(I16):2字节长度的整型数,存储空间为16位。
③ 长整型数(I32):存储空间为32位。在大多数情况下,建议使用长整型数。④ 64位整型数(I64):存储空间为64位。
4.无符号整型数
无符号整型数与有符号整型数的二进制位数相同,无符号整型数仅用于表示非负整型数,因此无符号整型数所能表示的正数范围大于有符号整型数。
无符号整型数有4种数据类型,无符号整型数的数据类型接线端颜色为蓝色。
① 无符号单字节整型数(U8):长度为1字节的无符号整型数,存储空间为8位。
② 无符号双字节整型数(U16):长度为2字节的无符号整型数,存储空间为16位。③ 无符号长整型数(U32):存储空间为32位。
④ 无符号64位整型数(U64):存储空间为64位。5.复数
复数是将实部与虚部相连接的浮点数,复数的数据类型接线端颜色为橙色,使用复数函数可创建复数。
复数有如下3种数据类型。
① 单精度浮点复数(CSG):与单精度浮点数相同,但有实部和虚部。
② 双精度浮点复数(CDB):与双精度浮点数相同,但有实部和虚部。
③ 扩展精度浮点复数(CXT):与扩展精度浮点数相同,但有实部和虚部。
3.1.3 布尔型数据
布尔型数据用于判断“真”“假”“有”“无”,也就是说它的值非“真”即“假”。布尔型数据由前面板的“布尔”选板提供,数据类型接线端颜色为绿色。“布尔”选板如图3-1-9所示。
图3-1-9 “布尔”选板
真实仪器的面板有部分会利用机械开关实现开启、关闭或触发功能。LabVIEW的布尔控件提供了一些开关,这些开关具备完全模拟机械开关、触发的能力。开关、触发两者的动作都可以改变布尔控件的值,区别在于如何恢复控件的原值。LabVIEW的布尔对象将机械动作细分为6种动作,如表3-1-5所示。
表3-1-5 布尔对象的机械动作
【练习3-7】
参考图3-1-10所示,掌握两种更改布尔对象的机械动作的方法。
图3-1-10 布尔对象的机械动作
3.1.4 字符串型数据
字符串型数据在 LabVIEW 的使用频度不亚于数值型数据。字符串可以表示字母和数字组合的文本信息,也可以表示一串由字符串表达的数据信息“3.1415926”。LabVIEW可以通过函数将文本转换为数值,由字符串组成文本的“3.1415926”可以转换为真正的数值型数据。由于字符串和数值可以通过函数相互转换,因此字符串还承载了“数字—字符”信息的表达含义。
前面板、程序框图中的字符串相关控件、函数及字符串常见的用途如图3-1-11所示。
图3-1-11 前面板、程序框图中的字符串相关控件、函数及字符串常见的用途
图3-1-11 前面板、程序框图中的字符串相关控件、函数及字符串常见的用途(续)
1.文本框、标签中的字符串
前面板的字符串输入控件和字符串显示控件是用于操作字符串数据的常用控件,LabVIEW提供了4种字符串的显示样式以用于不同场合对文本显示样式的需求。
【练习3-8】
参看图3-1-12,编写程序并掌握设置字符串的显示样式的方法。
图3-1-12 字符串的显示类型
● LabVIEW将反斜线(\)后紧接的字符视为不可显示字符的代码。反斜线模式适用于调试VI及把不可显示字符发送至仪器、串口及其他设备(串口通信应用)等情况。表3-1-6列出了LabVIEW对不同代码的解释。
● 大写字母用于十六进制字符,小写字母用于换行、回格等特殊字符。
● 不论是否选中“'\'代码显示”选项,都可通过键盘将表3-1-6中的不可显示字符输入一个字符串输入控件中。
表3-1-6 LabVIEW对不同代码的解释
2.表格中的字符串
除了字符串控件,表格控件中的单元格也支持字符串数据操作,表格的数据源是由字符串型数据组成的二维数组。
【练习3-9】
参看图3-1-13编写程序,掌握前面板中表格(输入)控件的组成部分,并对表格中的单元格进行字符串操作。
图3-1-13 表格控件及其组成部分
3.字符串的拆分、格式化、搜索、替换等操作
字符串在某些应用场合下并不能直接拿来使用。例如,串口通信的发送端按一定格式持续发送文本到接收端,接收端接收到按一定格式重复发送的字符串。对接收到的字符串进行一定的处理才能辨识出需要的数据样式。利用字符串相关函数进行拆分、格式化、搜索、替换等操作,能够满足前面应用对字符串格式预处理的需求,如图3-1-14所示。
图3-1-14 字符串的拆分、格式化、搜索、替换等操作
4.数值型数据与字符串型数据之间的转换
对字符串型数据进行格式在处理,得到的仍然是用字符串型数据表达的“数字含义”,为了让这些“数字含义”能够参与数学运算,需要对字符串型数据进行数值转换的操作,因为数学运算的函数不接受字符串型数据。图3-1-15列出了两种数值型数据转换为字符串型数据的基本思路。
图3-1-15 两种数值型数据转换为字符串型数据的基本思路
【练习3-10】
参照图3-1-16的思路,区别图3-1-15的字符串/数值转换函数的使用,使用“扫描字符串”函数实现字符串型数据与数值型数据的转换。
图3-1-16 字符串型数据与数值型数据的转换
【练习3-11】
参照图3-1-17的步骤,区别图3-1-16的“扫描字符串”函数的使用,使用“格式化写入字符串”函数实现数值型数据转换为字符串型数据。
图3-1-17 数值型数据转换为字符串型数据
5.在数值字符串中使用格式说明符
格式说明符,即百分号代码,用于设置如何显示数字。一般通过数值的“属性”对话框和“格式化字符串”属性指定数值控件的显示格式。格式说明符是以一个%开头,并以一个字母结尾的字符串,结尾字母区分大小写。格式说明符的%和字母间包含的元素如图3-1-18所示。
需要注意的是,不允许在一个格式说明符中同时使用精度和有效位数。
6.字符串型数据与路径型数据的转换操作
字符串型数据与数值型数据之间可以进行转换,同样,字符串型数据与路径型数据之间也可以转换。路径型数据呈现为墨绿色,字符串型数据呈现为粉红色。当利用字符串控件输入组合创建路径时,可以采用“字符串至路径转换”函数实现。
图3-1-18 格式说明符的%和字母间包含的元素
【练习3-12】
参看如表3-1-7所示的字符串型数据/路径型数据转换端口及范例,编写程序并掌握这些函数的用法。
表3-1-7 字符串型数据/路径型数据转换端口及范例
3.1.5 数据常量
常量是位于程序框图中的向程序框图提供固定数值的接线端。每种数据类型都可以创建常量,但不论何种数据类型的常量,都没有对应的前面板控件,只能在程序框图中设置常量。数据常量一般用于赋初始值,如表3-1-7中的路径常量和字符串常量。