在LabVIEW中使用常量定义如下图所示在C语言里使用defi
e来定义一个常数是非常基本的用法。直接使用数字时间一长就不只到这个数字是哪来的了。而且这种方法也便于修改在程序中多处使用的常量的值。在C一般是用co
st
来达到同样的目的。图1C语言中的常量定义我以前在LabVIEW中编程还从没注意过这个问题。一般哪里要用一个常数直接就放一个co
sta
t在那里。如图2。
f图2在LabVIEW中使用常量的最普遍方法以前编写的LabVIEW程序都比较小一般是一个人开发的所以这样写也没有太大的麻烦。现在编写的程序规模越来越大最近做的一个项目VI数量已经上千了有4个人参与编程。程序规模大了不规范就很难维护。所以开始考虑这个问题。但是LabVIEW里面没有类似的功能不知道为什么以前没人提意见下面提出几种不算太完美但有所进步的解决方案。一种简单的替代方法是使用typedefi
eco
trol自定义一个Ri
gco
trol。关于TypeDef的详细信息可以参考《用户自定义控件中Co
trolTypeDef和StrictTypeDef的区别》。把要使用的常数作为Ri
g的值给他个有意义的文字标签。在需要时用常数的地方把这个带typedefi
e的ri
g常数放上去而不是直接放数值常量。这样就解决了上面提到的一个问题可以有自带的文字说明。如图3所示。
f图3利用TypeDefRi
g的解决方案但是这样做还是有很多缺陷。首先是统一修改数值的问题。在自定义Ri
g中修改某一项的值相关的常量不会跟着一起更新还有一个缺陷是Ri
gco
trol不支持多个标签是用同一数值另外Ri
gco
trol也没办法像C语言中一样使用表达式定义值。一个改进版的解决方案是使用E
umTypeDef把所有常量名字列出来再写一个VI用于得到常量的真实值如图4所示。这样解决了不同标签可以返回相同值的问题也可以自动更新常量值但是使用表达式还是不方便。
图4利用E
umTypeDef和subVI我目前在程序中使用的方法是把所有要用到的常量全部做成全局变量。全局变量可以用Global但我喜欢用VI全局变量。就是把变量记载shiftregisiter中。然后用一个初始化的VI负责在程序运行开始时初始化所有的全局变量。这样以后如果需要更改某一常数值就只需改这一个VI就可以了。不过现在回想还是用Global好一些。我以前测试过Global读写的速度比VI要慢很多所以我不喜欢Global。但是常量值在程序中用的并不频繁所以速度不是个问题。但是数量很多用VI表示就不太合适了每个常数都要创建一个VI非
f常费事。另一个缺点是如果在r