27.在LabVIEW中使用常量定义(精)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在 LabVIEW 中使用常量定义
如下图所示,在 C 语言里,使用 #define来定义一个常数是非常基本的用法。直接使用数字, 时间一长,就不只到这个数字是哪来的了。而且, 这种方法也便于修改在程序中多处使用的常量的值。在 C++一般是用 const
来达到同样的目的。
图 1:C 语言中的常量定义
我以前在 LabVIEW 中编程,还从没注意过这个问题。一般哪里要用一个常数,直接就放一个 constant 在那里。如图 2。
图 2:在 LabVIEW 中使用常量的最普遍方法
以前编写的 LabVIEW 程序都比较小,一般是一个人开发的,所以这样写,也没有太大的麻烦。现在编写的程序规模越来越大,最近做的一个项目, VI 数量已经上千了,有 4个人参与编程。程序规模大了,不规范就很难维护。所以开始考虑这个问题。
但是 LabVIEW 里面没有类似的功能,不知道为什么以前没人提意见?
下面提出几种不算太完美,但有所进步的解决方案。
一种简单的替代方法是使用 type define control, 自定义一个 Ring control。关于Type Def 的详细信息, 可以参考《用户自定义控件中 Control, Type Def. 和 Strict Type Def. 的区别》。把要使用的常数作为 Ring 的值,给他个有意义的文字标签。在需要时用常数的地方,把这个带 type define 的 ring 常数放上去,而不是直接放数值常量。这样就解决了上面提到的一个问题:可以有自带的文字说明。如图 3所示。
图 3:利用 Type Def Ring 的解决方案
但是这样做还是有很多缺陷。首先是统一修改数值的问题。在自定义 Ring 中修改某一项的值, 相关的常量不会跟着一起更新; 还有一个缺陷是 Ring control 不支持多个标签是用同一数值;另外 Ring control 也没办法像 C 语言中一样使用表达式定义值。
一个改进版的解决方案是使用 Enum Type Def 把所有常量名字列出来,再写一个 VI 用于得到常量的真实值,如图 4所示。这样解决了不同标签可以返回相同值的问题,也可以自动更新常量值,但是使用表达式还是不方便。
图 4:利用 Enum Type Def 和 subVI
我目前在程序中使用的方法是, 把所有要用到的常量, 全部做成全局变量。全局变量可以用 Global ,但我喜欢用 VI 全局变量。就是把变量记载 shift regisiter 中。然后,用一个初始化的 VI 负责在程序运行开始时初始化所有的全局变量。这样,以后如果需要更改某一常数值,就只需改这一个 VI 就可以了。
不过, 现在回想, 还是用 Global 好一些。我以前测试过, Global 读写的速度比VI 要慢很多,所以我不喜欢 Global 。但是,常量值在程序中用的并不频繁,所以速度不是个问题。但是数量很多,用 VI 表示就不太合适了,每个常数都要创建一个 VI 非
常费事。另一个缺点是如果在后面板换用一个常量,还要再拖另一个 VI 上来,很麻烦。用 Global 会好一些,但还不是让我太满意。
要想有一个完美的解决办法,只能再造一个新东西了。 @#$%^&* (此处属公司机密, 删去 256字