我们经常会遇到给定两个日期,计算两个日期所经历过的天数、小时数、秒数等等,通常给定的日期的格式为字符串,比如某年、某月、某日等等。

如果按照通常的思维方式考虑这个问题,将会非常复杂,因为年份涉及到闰年的问题,月份涉及到闰月的问题。

如 果我们非常了解LABVIEW的时间概念,这个问题非常容易解决了。在LABVIEW中所有的时间日期都可以转换为秒数,这个秒数相对于某个标准的0点 (即0秒所代表的时间)。对于两个具体日期时间的差值,实际上就是相对于这个0点的秒数的差值,因此计算日期差值时根本不需要考虑闰年、闰月的问题。参见 下面的程序框图。

因为LABVIEW的TIMESTAP是LABVIEW专门用于表示时间的控件,因此不需要使用字符串等其它数据格式。

86400=60*60*24(1天=86400秒)

 
连接字符串函数是最常用的字符串操作函数之一,其最常规的应用方法是把各个独立的字符串连接成一个字符串,如下图所示.

Picture
实际上连接字符串函数支持数组操作,它可以连接多个字符串数组或者字符串数组和字符串混合连接,如下图所示。

Picture
连接字符串函数默认是两个输入端子,向下拖动可以增加输入端子。可能很多朋友没注意到,连接字符串函数可以只有一个输入端子,并且这个输入端子支持字符串数组,这就是我这次介绍给大家的NUGGET,见下图:

Picture
 
最近刚刚试用LV2010。

在LV2010的函数选板中,已经找不到CIN函数了,对于习惯用C语言编程的朋友们可能会感觉不方便,当然CLN基本可以解决我们日常需要。
最近在GSD论坛上看到一个帖子,才知道LABVIEW2010只是没有在函数选板显示CIN函数,实际上仍然可以可以使用。

下面详细介绍一下实现的方法:

从帖子中得知,CIN函数位于下面的MNU文件中:
Picture
通过工具菜单--》高级--》编辑选板,导入这个菜单文件,我们就可以看到CIN函数了。

Picture
 
通常情况下,一个簇中包含多个元素,在簇的快捷菜单中,提供了自动按行排列元素或者按列排列元素 的方法,但是没有提供多行、多列元素排列的方法,下面的Nugget说明如何按照行列自动排列簇元素的方法。
 
上图中,簇包含六个元素,我们需要排列成2行3列。参考下面的步骤。

STEP1: 利用快捷菜单,自动按行(列)排列所有元素。

Picture
自动按行排列后的效果如下图所示:

Picture
STEP 2: 利用分组工具把6个元素分成两个组。

Picture
STEP 3:参考步骤1,按列方式排列,则形成2行3列分布。

Picture
 
我们所说的前面板窗口实际上指的是窗口客户区,不包括标题栏,菜单条、工具条部分,参见下图,实际上是窗格部分。
Picture
要想实现全屏显示,首先要获取计算机当前的分辨率。然后根据分辨率调整前面板窗口边界的大小,参见下图:
Picture
 
LV支持的数据类型种类繁多,其中整型数是种类最多的,包括U8、I8、U16、I32等等。

Picture
对于每一种特定的整型数,都对应这特定的取值范围,比如U8的最大值为255,最小值为0,所以U8的取值范围是0-255。

今天我们要讨论的是如何获取整数数据类型的取值范围的方法:

一、计算法
我们知道U8是由一个字节(8位)构成的,U16是由2个字节(16位)构成的,以此类推,U64由8个字节构成(64位)。因此对于整型无符号数的取值范围很容易计算出来,无符号整数的最小值均为0,最大值可以通过计算得到。

Picture
对于有符号数,因为有符号数的最高位表示数值的符号,所以对于N位整型数,它能表示的最大正数为2的N-1次方,比如I8能表示的最大正数为2的7次方减1,即127,它能表示的最小负数为--127-1=-128,所以I8的取值范围是-128到+127.由此可以得出有符号整型数的取值范围的计算方法。

Picture
二、16进制表示法
在整数的16进制表示方式下,无符号整数的最大值一目了然,非常清晰。对于U8整数,最大值为FF,对于U16整数,最大值为FFFF.

Picture
对于有符号数,取值范围见下图

Picture
三、利用正无穷和负无穷进行类型转换
利用计算法非常繁琐,利用HEX方式必须理解整数的结构,下面的方法是我要介绍的Nugget.我们知道LV提供了正无穷大和负无穷大两个常数,利用这两个常数,通过类型转化函数,就可以获取整数的取值范围。

Picture
 
几天前,我写了一篇文章“有无方法消除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的时间与双精度表示的秒数是等价的,双精度秒数中的小数部分就是我们要求取的毫秒数,因此上面的例子使用了先向下圆整,然后求差值的方法,非常简便。
 

 
我们经常会遇到格式化字符串输出的问题,参见下面的程序框图。
 
Picture
在C语言中,类似功能的函数是printf函数,该函数几乎是C语言经典课程的第一节内容,可见其用途之广泛。C语言中实现上面程序框图的功能非常简单。

printf("鼠标位置X=%d 鼠标位置Y=%d“, x ,y );

上面的程序框图我们使用了连接字符串函数,其中包括了三个固定的字符串和两个变化的字符串,其程序框图虽然不复杂,但是非常繁琐。与同样功能的C语言函数相比,明显不如C语言方便。

其实LABVIEW中也提供了类似于printf的格式化写入字符串函数,该函数功能非常强大,使用也非常灵活,它的格式化代码与C语言非常类似。上面的程序框图利用格式化写入字符串函数可以简化如下:
 
Picture
当我们涉及到复杂的字符串操作时,首先要考虑格式化写入字符串函数。
 
 
Waveform Graph是不是只能设置成一种颜色,比如单一的红/单一的绿。想把它设置成一个渐变的颜色,比如从浅蓝-蓝-深蓝等。这个有办法实现吗?希望大家指教。
谢谢

这是论坛上的网友提问,答案当然是肯定的,但是实现需要一定的技巧。
可能是8.0之后,波形图提供了背景、中景和前景图片功能。简单地理解,在波形图中,出现了三个图片控件作为背景。
背景: 设置网格线后绘图区域的背景图像。可用于在图形绘图区域背景中插入图像。
中景:设置网格线和曲线数据间的绘图区域中间曲线图像。
前景:
设置曲线数据前的绘图区域前景图像。
该属性可用于在图形绘图区域的前景中插入图像(例如,自定义的数据点注释)。
图片控件给我们提供了基于像素的绘图能力,因此可以绘制成我们所需的任意图片,简便背景也是如此。除了绘制背景图片,如果背景图片是固定的,那么更好的方法是导入背景图片。但是波形图没有直接提供导入背景图片的方法,因此需要一定的技巧,详述如下:

1、读取JPG(或其它格式图片文件),利用属性节点写入波形图表。
Picture
2、运行
运行后,将弹出文件对话框,选择一幅渐变背景图片,效果如下图所示:
 
Picture
3、存储VI
把程序框图中读取文件部分去掉,存储VI,则背景图片随同波形图片一起存储了,为减小VI大小,最好先用图片处理软件剪裁背景图片至合适大小。
 
Picture