【LabVIEW】引⽤,属性节点,局部变量
VI内的数据传递⼀般是通过:
(1)移位寄存器
(2)局部变量
(3)引⽤与属性节点、调⽤节点
⼀、引⽤
引⽤常称为引⽤句柄,在Windows编程中,引⽤句柄指的是指向指针的指针。
换句话说,引⽤句柄保存的是其他⼀些数据类型的地址,例如窗⼝句柄。
1、控件引⽤
控件的引⽤句柄指的也是指向特定数据类型的指针,长度为四个字节。
控件的引⽤句柄不但能够表⽰控件的类型,还与空间⼀⼀对应,这是通过句柄的编号来实现的。
手机信号不好怎么办它⾃⾝未代表任何空间,但是通过引⽤句柄指向特定的实例后,就可以操作具体的控件了。
简单的理解就是通过对引⽤句柄的操作,可以改变控件的属性参数。
(1)创建
建⽴⼀个控件的引⽤句柄,然后拖动⼀个控件到控件引⽤句柄,这样就可以建⽴特定数据类型的控件引⽤句柄,上图分别建⽴了数字控件和布尔控件的引⽤句柄。
(2)如何通过引⽤句柄建⽴属性节点
(3)区分
是指向布尔控件的引⽤句柄,因此它的值属性节点是布尔值。
是指向布尔控件引⽤的引⽤句柄,因此它的值属性是引⽤。萧北辰
(4)严格类型控件引⽤句柄与⾮严格类型控件引⽤句柄
①严格类型控件引⽤句柄仅接收数据类型完全相同的控件引⽤句柄
例如,如果严格类型控件引⽤句柄的类型是32位的整数滑动条,那么只能把⼀个32位整数滑动条连接到该引⽤句柄接线端,⽽不能将8位整数滑动条、双精度标量滑动杆、32位整数滑动杆簇等数据类型与之连接。
在控件上创建的引⽤在默认情况下是严格类型的。
前⾯板上控件引⽤左下⾓的红⾊星形符号表明该控件引⽤是严格类型的;
在程序框图上,在连接到控件引⽤接线端的属性节点或调⽤节点显⽰(严格)表明该控件引⽤是严格类型的。
②⾮严格类型控件引⽤句柄接收的数据类型较灵活
例如,假设⼀个⾮严格类型控件引⽤的类型属于滑动杆,那么32位整数滑动杆、单精度滑动杆、32位整数滑动杆簇等都可连接到该控件引⽤接线端。
在⾮严格类型控件引⽤状态下,可把任何类型控件与控件引⽤接线端连接。
当某属性节点与⼀个⾮严格类型控件引⽤接线端连接时,在值属性中会产⽣变体数据。在使⽤该数据前可能需要进⾏数据转换。
第二梦好看吗
只有当图表引⽤是严格类型时,才能看到图表的历史数据属性。
2、VI引⽤
⼆、属性节点和调⽤节点
属性节点⽤于访问控件的属性。
例如需要改变控件在前⾯板的⼤⼩,运⾏时候的状态等都需要通过属性节点来进⾏操作,与引⽤结合起来讲就是属性节点可以设置引⽤的属性。
但由于属性节点与前⾯板绑定,⽆法利⽤到 LabVIEW 的执⾏系统多线程优势,并且读写使⽤ UI Thread,所以效率最低。
1、类别设置(⼀般⽤于严格类的属性)
对于不同类别的使⽤(App、VI或控件等),其引⽤是不同的。在⼀般的程序设计中,使⽤更多的是VI的属性和⽅法。获得VI的属性和⽅法需要⾸先确定类别。
⿏标右键——应⽤程序控制——属性节点——放置
在其上右键——选择类(可选择多个类别)——VI服务器——VI
再将控件的引⽤连接到其输⼊引⽤接⼝
2、创建控件的属性(⾮严格)
⽅法1:⿏标右键——应⽤程序控制——属性节点——放置后在其上右键——连接⾄——窗格——选择具体控件名
⽅法2:右键点击控件——创建——属性节点
3、优劣
(1)内存
买房子的注意事项属性节点实质上是对“输⼊控件、显⽰控件”中数据进⾏查询或置⼊,不会占⽤内存,因为在部件创建时已经为此参数分配好了内存。
(2)执⾏速度
相对于局部变量⽽⾔,属性节点的执⾏效率是很低的,或者说更占⽤CPU的资源。
(3)数据竞争公务员职业道德的内涵
属性节点可以通过“错误簇”来引导数据流,所以避免了发⽣数据竞争现象。
注意,当属性节点的错误簇没有使⽤(与其它VI相互连接),同样可能会导致数据竞争现象发⽣。
三、局部变量
通过局部变量可以在⼀个VI中访问或者存储数据。
通常这些数据都是存储在不同的显⽰或者输⼊控件当中,所以说局部变量不是单独存在的,每⼀个局部变量都是与特定的控件相对应的。
⼀个控件可以⽣成许多局部变量,就相当于在⼀个函数中定义了⼀个变量,在函数的任何地⽅都可以使⽤这个变量⼀样。
1、创建局部变量
⽅法1:控件上右击——创建——局部变量
⽅法2:应⽤程序框图空⽩处右键——局部变量
放置后左键点击该局部变量——选择控件
2、优劣
(1)内存
每⼀个局部变量都要复制对应控件中的数据,因此这将消耗更多的内存。
当为数组建⽴多个局部变量时,会占⽤⼤量的内存。
(2)执⾏速度
由于局部变量是对内存进⾏直接读、写操作,所以它的执⾏速度很快(约快1000倍以上)。
(3)数据竞争
局部变量容易导致数据竞争,原因是局部变量破坏了数据流的⼯作⽅式。这也正是LabVIEW 强调“慎⽤”局部变量的原因。
3、属性节点和局部变量、全局变量
中国父亲节的来历简介
切勿使⽤局部变量或全局变量来作为⼀种减少连线的⽅法。变量增加处理开销,内存使⽤和程序的复杂性。
此外,变量的使⽤破坏了LabVIEW数据流原则,遮盖了实际的数据来源。当变量从程序的多个位置读写,就难以确定哪个在实际影响数据值。
简单显⽰值更新⼀般⽤局部变量。
但是有些显⽰特性,⽐如变灰,⽆效,不可见之类操作还是要⽤属性节点,局部变量办不到。
局部变量和全局变量是内存数值操作,属性节点是对控件值的属性进⾏的操作。理论上,变量的效率⽐属性节点⾼。
但在实际写程序中,⼤量全局变量的应⽤和不必要的局部变量会拖慢程序的性能和可读性,并且⼀般使⽤变量的时候有很⼤的随意性,导致后期维护的难度增加,牵⼀发⽽动全⾝,改变了⼀次赋值后要挨个去这个变量的影响应⽤范围。
再者,根据实际经验,全局变量在多层VI嵌套之后再赋值,另个⼀VI或同VI中其他循环对数据进⾏轮询,会出现两者不同步的现象,原因可能有循环的时间间隔不同,内存相应时间不同等,尤其是在通讯数据处理过程中,隐藏了很⼤的BUG。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论