数值数据
- 更新时间2025-08-27
- 阅读时长12分钟
LabVIEW以浮点数、定点数、整数、无符号整数以及复数表示数值数据。
一些数据类型有更多配置选项。例如,建立物理单位与浮点数据以及复数之间的关联,或为定点数配置编码、字长、整数字长、范围和所需△。
浮点数与数值单位
任何浮点数据类型的数值输入控件或显示控件都可添加测量的物理单位,比如米或公里/秒。
控件单位出现在一个单独的称为单位标签的自带标签中。右键单击控件,从快捷菜单中选择显示项»单位标签可显示单位标签。右键单击单位标签并从快捷菜单中选择创建单位字符串则可编辑单位标签。
当LabVIEW显示单位标签时,可输入使用标准缩写的单位,如m表示米,ft表示英尺,s表示秒等等。
| 注:在公式节点中不可使用单位。 |
单位和严格类型检查
为对象添加单位时,仅能对单位相互兼容的对象进行连线。LabVIEW使用严格的类型检查来确定单位是否兼容。如将两个单位不兼容的对象连接,LabVIEW将返回错误。例如,将以米为单位的对象与以升为单位的对象连接时,LabVIEW将返回错误,因为米为距离单位而升为容量单位。
以下VI显示了单位兼容的对象间的连接。在该VI中,显示控件的单位为公里,LabVIEW将自动对路程显示控件进行度量转换,使距离的单位是公里而不是米。
以下VI中出现了一个错误,因为路程的单位为秒。要纠正这个错误,将秒改为路程的单位,例如公里,如上面的VI所示。
一些VI和函数的单位并不明确。不能将这些VI和函数与其他带有单位的接线端一起使用。例如,加1函数就具有意义不明确的单位。如使用路程单位,则“加1”函数无法确定是加一米、加一公里还是加一英尺。由于意义上的不明确,“加1”函数不能与其他将单位数值加1或减1的函数一起使用。
为了避免这种意义上的不明确,请以具有确切单位的数字常量和加函数来创建自定义的每单位加1函数。如下程序框图所示。
定点数据类型
定点数据类型是一种以二进制数(又称“位”)表示一组有理数的数值数据类型。与精度和范围都可变的浮点数据类型不同,定点数的整数和小数部分都是定长不可变的。
| 注:以浮点数据类型表示有理数时,由于二进制数的基数是2,有理数的分母必须为2的幂的约数。 |
不需要浮点表示法的动态范围时,或在使用不支持浮点算术的终端时,可使用定点数据类型。
| 注:(FPGA模块)关于在FPGA终端上使用定点数据类型的更多信息,见使用定点数据类型。评估数值数据类型的使用量,以确定最适合用户设计的数据类型。 |
以定点数据类型表示有理数
定点数具有固定个数的整数位和分数位。整数位和分数位分别在二进制点的左、右两侧。由于定点数可指定其确切的位数,故二进制小数点的位置是固定的。
例如,在LabVIEW中,有理数0.5可表示为一个总位数为8、整数位为4的定点数。
| 有理数 | 对应的定点数 |
|---|---|
| 0.5 | 0000.1000 |
在LabVIEW中,同一个有理数也可表示为一个总位数为16、整数位为8的定点数。
| 有理数 | 对应的定点数 |
|---|---|
| 0.5 | 00000000.10000000 |
定点数与浮点数的差异在于,浮点数在运算时允许整数位和分数位的位数不同。换言之,浮点数的二进制小数点可以移动或浮动。
| 注:以定点数表示有理数时,如未指定定点数确切的位数,LabVIEW将调整定点数的位数,尽量避免数据丢失。LabVIEW无法处理大于64位的数字。 |
配置定点数
要将一个数设置为定点表示法,右键单击数据对象,从快捷菜单中选择表示法,改变对象的数据类型。可配置定点数的编码。还可指定定点数是否包括上溢状态,以及数值函数如何处理定点数的上溢和凑整。如要配置一个定点数,右键单击常量、控件,或数值函数,从快捷菜单中选择属性,打开数值属性、数值常量属性或数值节点属性对话框进行配置。
编码
如要数值的比特数为特定值,需指定定点数的二进制编码方式。
- 有符号 - 指定定点数据是否带符号。如选择有符号,则符号位总在表示数据的位字符串的第一位。
- 无符号 - 指定定点数据是否有符号。
- 字长 - 位字符串的总位数,是LabVIEW表示定点数据时的位数。LabVIEW接受的最大字长为64位。某些终端可能仅支持字长较短的数据。如果在终端上打开VI,且VI包含的定点数据大于终端可接受的字长,则VI包含断线。参考终端的相关文档,确定终端接受的最大字长。
- 整数字长 - 指位字符串中LabVIEW用于表示定点数的整数位数,或从最高有效位左侧或右侧的初始位置开始,将二进制小数点移动到最高有效位所需的位数。整数字长的长度可以大于字长,可以为正也可以为负。
将光标移动到传递定点数据的连线上时,LabVIEW在即时帮助窗口中以下列格式表示该定点数据的配置情况:
<编码,字长,整数字长>
例如:
<s, 16, 8>是一个整数位为8的16位有符号数。下图表示一个字长为16、整数字长为8的有符号数。
| 1 | 字长(16位) |
| 2 | 整数字长(8位) |
| 3 | 符号位 |
| 4 | 二进制小数点 |
长整数或负整数字长
如整数字长大于字长,则LabVIEW不保存超过字长的那部分整数位。下图表示一个字长为8、整数字长为10的数。
| 1 | 字长(8位) |
| 2 | 整数字长(10位) |
| 3 | 整数位未保存 |
| 4 | 二进制小数点 |
如整数字长为负,LabVIEW将不保存任何整数位,并且也不保存从二进制小数点算起与负数相同的分数位。下图表示一个字长为8、整数字长为-2的数。
| 1 | 字长(8位) |
| 2 | 字长-整数字长(8位-2位) |
| 3 | 分数位未保存 |
| 4 | 二进制小数点 |
范围
LabVIEW根据用户为定点数指定的编码值计算定点数的范围和△。
- 最小值 - 设置定点数据范围的最小值。
- 最大值 - 设置定点数据范围的最大值。
- △ - 指定范围内数字间的增量。
将光标移动到传递定点数据的连线上时,LabVIEW在即时帮助窗口中以下列格式表示该定点数据的配置情况:
[最小值,最大值]:△
例如:
[–4, 4]:1的最小值为–4,最大值为4,△为1。
定点算术
对指定字长的定点数进行算术运算时,二进制小数点的位置与VI运行之前二进制小数点的位置相同,并无改变。这与浮点数恰好相反,进行浮点数算术运算时,浮点数的二进制小数点或十进制小数点的位置将改变。如算术运算所要求的字长大于定点数的字长,则运算后可能导致数据损失。
LabVIEW将调整数值函数的输出值的字长以尽量避免数据损失。然而,如表示输出值所要求的字长超出了指定的最大范围或LabViEW所允许的64位,则LabVIEW无法避免数据损失。如要配置数值函数的输出设置,右键单击函数,从快捷菜单中选择属性,打开数值节点属性对话框进行配置。
上溢和凑整
对定点数进行算术运算或使用转换为定点数函数将数值数据转换为定点数据时,都可能发生上溢和凑整。通过配置,LabVIEW可避免数值函数输出的定点数发生上溢或凑整。但在某些条件下LabVIEW无法避免上溢或凑整。
例如,将定点值连线数值函数(加、减、乘、平方),LabVIEW将默认为增加输出值的字长以使运算结果得以正常显示。此做法同样适用于浮点值。然而,如避免上溢或凑整所要求的字长超出了LabVIEW可接受的最大字长或用户指定的最大字长,则上溢或凑整可能无法避免。LabVIEW接受的最大字长为64位。
在二进制中无法确切表示的类型周期和值也可能导致上溢或凑整。
上溢
当运算结果在输出类型能表示的值的范围外时,将发生上溢。可为上溢选择下列上溢模式进行处理:
- 饱和 - 如输出值大于输出类型可接受范围的最大值,LabVIEW将强制,即对将该值四舍五入至指定的最大值。如值小于可接受范围的最小值,LabVIEW将值强制转换为指定的最小值。
- 绕回 - 如输出值在输出类型可接受范围之外,LabVIEW将舍弃输出值的有效位,直到输出值位于输出类型的可接受范围内。该选项要求输出值符合指定的编码方式。如选择该选项便无法指定可接受范围,因为LabVIEW将自动使范围符合编码方式。
| 注:通常情况下,饱和模式需要FPGA终端上额外的硬件资源。 |
将定点数配置为包括上溢状态,确定是否发生上溢。如定点值包括上溢状态,LabVIEW将分配额外的存储空间,用于追踪作为计算结果的定点值是否上溢。将定点数配置为包括上溢状态后,可在定点数控件和常量上显示上溢状态LED。定点值的上溢状态为TRUE时,LED灯亮。也可使用定点上溢?函数确定定点数的上溢状态。定点函数可对定点数字的上溢状态进行操作。
| 注:LabVIEW不检查定点数的下溢情况。 |
使用比较函数比较定点数时,LabVIEW将忽略上溢状态,只比较数值。例如,如使用等于?函数比较上溢状态为TRUE的定点数和数值为1.5,无上溢状态的定点数,LabVIEW将返回TRUE。
如要配置数值函数的输出设置,右键单击函数,从快捷菜单中选择属性,打开数值节点属性对话框进行配置。该对话框用于配置LabVIEW处理上溢和凑整。
凑整
当输入值或运算结果的精度大于输出类型的精度时,将发生凑整。LabVIEW将输入值强制为一个与输出类型精度相同的值。例如,假设输出类型可表示连续值s和t。如运算结果为x,且x在s和t之间,即s < x < t,由于输出类型无法精确表示x,需要进行凑整。
可为凑整选择下列凑整模式进行处理:
- 截断舍入 - 向下取整到输出类型能表示的最近值。LabVIEW将舍弃值的最低有效位。取整模式的性能最佳,但得到的输出值精度最低。例如,输出值x位于连续值s和t之间(s < x < t),LabVIEW将设置x等于s。
- 半值向上 - 取整到输出类型能表示的最近值。如值正位于两个有效值之间,该模式将值取整为两个有效值中较大的一个。LabVIEW在输出值上加上最低有效位的一半,然后截断该值。这种取整模式比阶段模式的输出值更准确,但对性能影响较大。例如,如输出值x在连续值s和t之间,即s < x < t,LabVIEW将x设为等于s或t二者之中较近的那个值。如x正位于s和t之间,则LabVIEW将选择使x等于t。
- 奇偶舍入 - 取整到输出类型能表示的最近值。如取整的值刚好在两个有效值之间,LabVIEW将检查该值中取整后将成为最低有效位的位。如该位为0,该模式将把值取整到两个值中输出类型能表示的较小的值。如该位不为0,该模式将值取整到两个值中较大的值。取整模式对性能的影响最大,但其输出值比截断模式更准确。该模式也将并且中和了进行多次半值向上的取整时可能出现的趋向较大值的倾向。该模式为默认取整模式。例如,如输出值x在连续值s和t之间,即s < x < t,LabVIEW将x设为等于s或t二者之中较近的那个值。如x正位于s和t之间,如取整后最小有效位为0时,选择s;如取整后最小有效位不为0时,选择t。
| 注:取整模式对性能的影响都微乎其微。但是,如在FPGA的终端运行处理上溢的VI,则取整可能会对性能有较大的影响。 |
关于定点数对于FPGA的性能影响,见使用定点数据类型。