属性节点和调用节点的使用教程
在获得对象的reference之后,就可以使用属性节点(Property Node)和调用节点(Invoke Node)来设定对象属性和调用对象提供的固有方法(Method)。
属性节点的一般形式如图1所示:
图1 属性节点
属性节点的最上面有两个输入参数和两个输出参数,输入参数reference用于接入对象的reference,输入的reference参数在被复制之后从reference out输出,可以再接入下一个使用reference作为输入参数的节点或函数。其他两个输入、输出参数用于错误处理。当接入某一个reference后,在class的位置会出现与该reference对应对象类别名称,比如App(Application)表示接入的是应用程序的reference,VI表示接入的是VI的reference等。reference输入参数一般有默认值,例如当类别(class)为Application时,其默认值为当前运行的应用程序的reference;当类别为VI时,其默认值为节点所在VI的reference。name1,name2等端子为属性端子,name1和name2代表属性名。
在属性端子上单击鼠标右键会弹出快捷菜单,在这个菜单里含有名为Properties的属性列表子菜单,在同样的快捷菜单里Change to Read和Change to Write选项将把端口在写端口和读端口之间转换,各个端子之间的读写状态互不影响。某些属性只能读不能写。在默认情况下类型名class和属性名name 1等采用的是“短名称”的表示方法,在属性节点上弹出右键快捷菜单,选择Name Format->Long Names将打开“长名称”的显示方式。如图2所示:
图2 新放置的属性节点
作为一个例子,为第一个端子选择Operation System.Name属性,该属性表示运行程序的操作系统名称。运行程序后,在字符串指示器里返回所选择属性的值Windows NT,如图3所示。Operation System.Name为只读属性。reference参数使用了默认值,即当前运行的应用程序的reference,这同使用空的machine name参数调用Open Application Reference参数返回的结果完全相同。
图3 使用当前程序的属性节点查询操作系统名称
调用节点的一般形式如图4所示,其组织方式同属性节点相似。class为reference所关联对象的类型名,method为方法名,param 1等为参数名。如果方法调用没有返回值,则method的位置仅仅显示方法名;如果方法调用有返回值,则method变为输出端子,在return value中输出方法调用的返回值。
图4 调用节点
在调用节点上单击鼠标右键会弹出快捷菜单,在这个菜单里含有名为Methods的方法列表子菜单。一个对象可以有很多方法供调用,但是一个调用节点只能为对象调用一个方法,这一点与属性节点不同,属性节点对在其中访问的属性个数没有限制。方法调用的某些参数有默认值,可以不连接,这些可选参数的调用节点端子底色为灰色,可以根据需要决定是否接入这些参数。
图5给出了调用节点的使用示例
图5 使用调用节点打开并最大化当前VI的前面板窗口
图中调用节点所关联的的对象的类别是VI,其输入参数reference为使用路径常量InvokeNode.vi作为vi path输入参数调用Open VI Reference函数的返回值,实际上该路径指向的VI就是调用节点所在的VI本身。因为该VI已经在LabVIEW系统中被打开,所以直接使用VI文件名即可,而不需要完整的磁盘路径。由于VI类别的调用节点的reference输入参数有默认值,即为节点所在VI本身,所以调用Open VI Reference函数实际上没有必要,可以删去。所选择的对当前VI进行调用的方法是Open FP的方法,该方法的功能是打开VI的前面板窗口(同时把前面板窗口设为当前窗口)。前面板窗口打开后,调用节点会根据接入可选参数Activate和State的值设置前面板窗口状态。图中State端口上选择Maximized值,运行程序时会看到程序自动切换到前面板窗口,而且前面板窗口被最大化。
下面对图5中的例子稍作修改,以实现远程的方法调用。首先,在ip为192.168.1.11的计算机A上运行的LabVIEW系统中选择“工具->选项...”菜单项,打开选项对话框,在上面的类别列表中选中“VI服务器:配置”项,选中协议下的TCP/IP复选框,以允许基于TCP/IP协议的网络访问。然后在类别列表中选中“VI服务器:机器访问”,在右边的文本框中输入计算机B的ip地址192.168.1.111,确认下面的单选列表选中了允许访问,单击添加按纽,把ip地址添加到机器访问列表中,如图6所示。这样就将允许计算机B上的LabVIEW实例通过计算机A上的LabVIEW实例的VI Server,实现A上运行着的LabVIEW资源的远程访问。
图6 添加TCP/IP访问许可
在计算机B上,把InvokeNode.vi修改为如图7所示。字符串192.168.1.11作为machine name参数输入给Open Application Reference函数,以获得计算机A上运行的LabVIEW实例的reference,把这个reference传给Open VI Reference函数,这样就可以从计算机B打开计算机A上的VI的reference。根据LabVIEW的习惯,打开LabVIEW系统后新建的第一个文件名为Untitled 1(未经保存的默认文件名),假设在计算机A的LabVIEW系统中建立了这样一个新文件,则在计算机B上运行图7代码的结果是,在计算机A上打开并最大化Untitled 1的前面板窗口。由于文件Untitled 1一定会处理打开状态(存在于内存中),所以直接指定文件名Untitled 1即可。
图7 使用调用节点远程访问方法
如前所述,控制器和指示器的属性节点和调用节点的建立方式有两种:一种是在控件或其框图端子上弹出快捷菜单,并选择Create->Property Node或Create->Invoke Node,直接建立与之关联的隐式连接的属性节点或调用节点;另一种是在快捷菜单里选择Create->Reference以建立其reference,然后接入从Application Control模板添加的属性节点或调用节点的reference输入端口。在图8中Numeric数值控制器采用两种方式建立属性节点,可以看到,隐式连接的属性节点具有与控制器相同的标签,而且没有reference输入端子。两段代码的运行结果完全相同。
图8 为控制器建立属性节点的两种方法
VI和应用程序本身的属性和方法必须通过reference接入相应节点的方式来访问,控件的属性和方法可以使用reference来访问,也可以使用隐式连接的方法直接访问。
图9给出了一段代码示例,示例完成的功能是在字符串数组Application:All VIs In Memory内显示内存中所有已经打开的VI的文件名,并且在路径数组Array中返回这些文件在磁盘上的路径。
图9 显示内存中的VI文件名及其磁盘路径
图9中,当前LabVIEW实例的App.AllVIs属性为字符串数组,每个元素都是内存中的一个VI文件名。VI文件名字符串数组通过自动索引逐个进入For循环,传给Open VI Reference函数的VI Path参数,打开文件名代表的VI的reference后,使用属性节点读取VI的Path属性,这个属性表示VI在磁盘上的存放路径。 对内存中每个VI读取一次Path属性后,通过自动索引在输出隧道上形成路径类型的数组,输入到Array中。
cuo bucuo
挺好,学习下~
学习下
谢小编分享
谢谢小编
下来看看
小编辛苦,顶起
感觉很难懂啊!
谢谢分享
小编,我要加你qq。
好啊
略懂了。谢谢。
好好消化。
看看
好好好
厉害
真在学习,很不错
这个真的不错,学习了。
很好
看看,希望有大的收获
GOD,好难懂哦
小编辛苦啦,ganxie
小编辛苦,有劳小编了,谢谢啊。
不错,感谢小编的分享。不过希望小编能够更详细地解说一下,每个属性的含义和用途
属性节点如何调用
顶小编一个,
厉害 lz真的很棒额
这两个对初学者感觉很难,需要时间来慢慢理解!功能确实强大!
正在学习中,谢谢小编分享
还不是很懂,需要多研究几遍才!
正想找这个,谢谢小编!
看看 ,不错!
写的很好!
谢谢分享!
还不是很懂,需要多研究几遍才
不错不错 受教了!谢谢
太好了,特别对这两个纠结,感谢释疑!
很想知道小编是干什么的,开发工程师吗?还是教授?
学习下。
小编,你真好啊,学习了,呵呵
小编给力啊,赞一个!
不错的知识 谢谢分享
发发发发发发发发发发发发发发发
学习了.!
很重要的知识!
没有英文的多好
学习了 ~感谢了小编分享!
简直实在是太棒了,终于在这里找到了我的问题的答案!赞小编
不错,
很好,学习一下
好东西 谢谢分享!
感谢分享
通过自动索引在输出隧道上形成路径类型的数组
thanks for your teaching
挺好,学习下~挺好,学习下~
学习了,讲的非常棒
小编好人 学习中