csxcs_366 Blog
  • 网友问答
  • LabVIEW Nugget
  • LabVIEW 快捷键
  • LabVIEW快捷键的速查表(英文)
LV Nugget(66)——如何计算两个日期经过的天数(小时数、秒数) 10/17/2011
0 Comments
 
 我们经常会遇到给定两个日期,计算两个日期所经历过的天数、小时数、秒数等等,通常给定的日期的格式为字符串,比如某年、某月、某日等等。

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

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

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

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

Add Comment
 
LV Nugget(65)——妙用连接字符串函数 09/10/2011
0 Comments
 
连接字符串函数是最常用的字符串操作函数之一,其最常规的应用方法是把各个独立的字符串连接成一个字符串,如下图所示.

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

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

Picture
Add Comment
 
LV Nugget(64)——如何在LV2010中调用CIN 09/07/2011
0 Comments
 
最近刚刚试用LV2010。

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

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

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

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

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

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

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

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

Picture
Add Comment
 
LV Nugget(62)——实现前面板窗口全屏显示 05/13/2011
0 Comments
 
我们所说的前面板窗口实际上指的是窗口客户区,不包括标题栏,菜单条、工具条部分,参见下图,实际上是窗格部分。
Picture
要想实现全屏显示,首先要获取计算机当前的分辨率。然后根据分辨率调整前面板窗口边界的大小,参见下图:
Picture
Add Comment
 
LV Nugget(61)——如何获取数据类型的取值范围 04/25/2011
0 Comments
 
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
Add Comment
 
LV Nugget(60)——三段范围与条件结构 03/08/2011
0 Comments
 
几天前,我写了一篇文章“有无方法消除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

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

http://www.eefocus.com/bbs/article_10_24217.html
Picture
3、双精度数转换为整数后,利用CASE结构

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

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

Picture

Add Comment
 
LV Nugget(59)——获取当前时间毫秒数的几种方法 03/07/2011
0 Comments
 
对于使用系统时间的场合,只有在个别情况下要求精确到毫秒。因为适用的场合较少,所以解决起来比较困难。

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

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

一、利用时间簇

Picture
二、利用时间标识

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

Picture
三、直接用字符串表示

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

Picture
四、直接使用秒来处理

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

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

Add Comment
 
LV Nugget(58)——LABVIEW中的printf函数---格式化写入字符串函数 02/24/2011
1 Comment
 
我们经常会遇到格式化字符串输出的问题,参见下面的程序框图。
 
Picture
在C语言中,类似功能的函数是printf函数,该函数几乎是C语言经典课程的第一节内容,可见其用途之广泛。C语言中实现上面程序框图的功能非常简单。

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

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

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

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

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

    档案

    十月 2011
    九月 2011
    五月 2011
    四月 2011
    三月 2011
    二月 2011
    一月 2011
    十二月 2010
    五月 2010
    一月 2010
    十一月 2009
    九月 2009
    八月 2009
    六月 2009
    五月 2009
    四月 2009

    目录

    All
    关于LabVIEW Nugget
    LV Nugget(01)——巧用插入功能
    LV Nugget(02)——数值的文本显示
    LV Nugget(03)——交换连线端子
    LV Nugget(04)——嵌入背景图片
    LV Nugget(05)——巧用吸管工具
    LV Nugget(06)——使用Shift+Enter建立或插入新条目。
    LV Nugget(07)——快速浏览条件分支或事件结构分支
    LV Nugget(08)——选择和对齐
    LV Nugget(09)——巧用复合运算节点
    LV Nugget(10)——创建Tab公共控件与消除Tab公共控件的阴影
    LV Nugget(11)——利用即时帮助查看VI绝对路径
    LV Nugget(12)——使用滚动条浏览数据元素
    LV Nugget(13)——自动连接未连线分支
    LV Nugget(14)——判断鼠标双击事件
    LV Nugget(15)——精确调整控件大小
    LV Nugget(16)——同时调整多个控件属性
    LV Nugget(17)——ASCII与字符的相互转换之一
    LV Nugget(18)——ASCII与字符的相互转换之二
    LV Nugget(19)——ASCII与字符的相互转换之三
    LV Nugget(20)——巧用数值型常量
    LV Nugget(21)——拆分字之常规编程语言方法
    LV Nugget(22)——勾股定理的快捷计算方法
    LV Nugget(23)——如何查看已设置为“打开自动运行VI”
    LV Nugget(24)——拆分字的LV专用方法
    LV Nugget(25)——打开子VI前面板与程序框图
    LV Nugget(26)——工具选板之打开临时工具选板
    LV Nugget(27)—— 连线之添加提示
    LV Nugget(28)——解释错误
    LV Nugget(29)——连线之索引数组与构造数组
    LV Nugget(30)——连线之自动删除原来的连线
    LV Nugget(31)——连线之取消连线
    LV Nugget(32)——使用系统标签与控件选板中的装饰
    LV Nugget(33)——创建标签的简便方法
    LV Nugget(34)——子VI的不同显示形式
    LV Nugget(35)——重新链接子VI
    LV Nugget(36)——使用类浏览器
    LV Nugget(37)——使用浏览器浏览文件夹
    LV Nugget(38)——使用默认方式打开文件
    LV Nugget(39)——文件对话框取消后的错误处理
    LV Nugget(40)——限制字符串输入
    LV Nugget(41)——如何显示隐藏的控件
    LV Nugget(42)——如何高效在数组首端插入数据
    LV Nugget(43)——保持连线值
    LV Nugget(44)——局部框图整理
    LV Nugget(45)——用户标签(USER TAG)的运用
    LV Nugget(46)——修改菜单前景、背景颜色
    LV Nugget(47)——INI文件中设置前面板背景色
    LV Nugget(48)——在INI文件中设置程序框图背景色和函数节点背景色
    LV Nugget(49)——如何获取控件数据类型
    LV Nugget(50)——妙用数组索引
    LV Nugget(51)——通过拖动建立通用控件参考的简便方法
    LV Nugget(52)——如何创建通用属性节点和调用节点
    LV Nugget(53)——已链接控件的属性、方法与未链接控件的属性、方法的相互๗
    LV Nugget(54)——如何创建无边框单选控件
    LV Nugget(55)——巧妙修改数值型常量为双精度数
    LV Nugget(56)——如何拆分双精度数的整数部分和小数部分
    LV Nugget(57)——如何设置波形图的渐变背景
    LV Nugget(58)——LABVIEW中的printf函数 格式化写入字符串函数
    LV Nugget(59)——获取当前时间毫秒数的几种方法
    LV Nugget(60)——三段范围与条件结构
    LV Nugget(61)——如何获取数据类型的取值范围
    LV Nugget(62)——实现前面板窗口全屏显示
    LV Nugget(63)——在簇中以行列方式排列元素
    LV Nugget(64)——如何在LV2010中调用CIN
    LV Nugget(65)——妙用连接字符串函数
    LV Nugget(66)——如何计算两个日期经过的天数(小时数、秒数)