几天前,我写了一篇文章“有无方法消除CASE结构”。

http://www.eefocus.com/csxcs366/blog/11-02/204823_17fb2.html

在这篇文章中,对于多段范围内的数的判定问题,提出了统一的处理方法,但是这并不是说对于判定数的范围问题,不宜使用条件结构。

三段范围的判定是最为常见的,比如给定一个X值,判定X<10.5, 10.5<=x<=30.6,x>30.6.。对于两段或者三段范围的问题,使用条件结构是很适合的。

判断2段范围需要一个条件结构,判断三段范围需要两个条件结构,三段范围条件结构如下图所示:

Picture
从上图可以看出,2层条件结构已经非常复杂了,所以实际应用中,很少看到三层以上的嵌套条件结构。对于需要多层嵌套条件结构,需要尽量转换到一个条件结构的多个分支中。

下面我将讨论对于三段范围,替代上述2层嵌套CASE结构的方法:

1、利用“选择”函数

选择函数类似于C语言中的三元操作符,替代2层条件的程序框图如下图所示:

Picture
使用选择结构与IF ELSE结构非常类似,结构非常清晰,但是由于三元操作符条件所限,无法处理更多的信息,从功能上看,不如条件结构。

2、利用布尔数组替代嵌套CASE

这篇文章详细介绍了这种方法。

Picture
3、双精度数转换为整数后,利用CASE结构

我们知道,LABVIEW中的case结构是非常强大的,其条件选择可以接受多种数据类型,比如布尔、整数、枚举、下拉列表、单选按钮、TAB、字符串等等,但是无法直接使用双精度数。

下面就是我今天要谈及的Nugget,记得我过去写过比较双精度数是否相等的问题,使用的方法就是放大双精度数,然后圆整,下面的例子对双精度数放大100倍后,然后利用CASE结构。

Picture

 
对于使用系统时间的场合,只有在个别情况下要求精确到毫秒。因为适用的场合较少,所以解决起来比较困难。

LABVIEW中有几种表示时间的方式:
1、时间簇-----这是LABVIEW最早使用的表示时间的方法。
2、时间标识--这是LABVIEW8.X之后采用的。
3、秒----直接用双精度数表示,以秒为单位

这三种时间表示方式是可以相互转换的,因此也可以找到多种当前时间的毫秒数方法。

一、利用时间簇

Picture
二、利用时间标识

对时间标识显示控件采用不同的格式符,可以显示时间的不同部分,其中%u表示秒的小数部分(毫秒),%4u表示显示4位数,也可以添加任何说明文字,如下图所示,文字说明添加了mS:

Picture
三、直接用字符串表示

利用格式化日期/时间字符串函数可以把当前时间直接转换为字符串,利用字符串格式符,可以直接显示小数部分(毫秒),格式符与二中的类似:

Picture
四、直接使用秒来处理

前面几种方法是我经常使用的,我之所以想起写这个Nugget,正是看到了LABVIEW的例程内部使用了下面的方法,非常简单且灵活,下面介绍给大家。

Picture
LABVIEW的时间与双精度表示的秒数是等价的,双精度秒数中的小数部分就是我们要求取的毫秒数,因此上面的例子使用了先向下圆整,然后求差值的方法,非常简便。