labview库函数调用节点(Call Library Node)

 以传递整型参数为例:在参数配置面板,我们可以选择值传递(Pass Value)或选择指针传递(Pass Pointer to Value)。
       当选择了值传递时,库函数调用节点是不会改变该参数的内容的。如果我们在该库函数调用节点参数的左侧接线端引入输入数据,在输出端引出输出参数,那么输出数据其实是直接由输入数据引出的,LabVIEW不会在这个节点处开辟缓存。
       在指针传递方式时,LabVIEW则认为传入的数据会被改变。如果输入数据同时还要发往其它节点,LabVIEW会在此处开辟缓存,为输入数据作一个副本。选用指针传递方式,库函数调用节点的每一对接线端也同样是缓存重用的。就是说,库函数调用节点的输出值是直接存放在输入值的缓存空间的。
如果一个参数只用作输出,我们通常会在库函数调用节点的输入接线端为它建立一个输入常数,这个常数的地址空间并不能直接被利用,它只是为库函数调用节点开辟的缓存而设置的初始值。不接输入常数,LabVIEW也会为此参数开辟一块缓存。但是,这样每次传入的参数值都会有变化。例如图5,库函数调用节点调用的函数功能是为把输入的值加1,然后输出。图5-a中的输出值永远都是1,而图5-b,每次运行输出结果都会比前次增加1。这是因为库函数调用节点每个指针传递的参数的输入输出用的是同一块缓存,即每次运行输入值是上回的输出值。

图5: 库函数调用节点


       我们可以利用图5-c的例子证明LabVIEW某些节点是缓存重用的。每次运行5-c的例子,输出结果都会比前次增加2。这是因为示例中的参数接线端以及“+1”节点的输入输出端所使用的都是同一缓存。
     如果,库函数调用节点中某个参数只有输入链进去,没有输出。那么,LabVIEW 是假设你调用的函数不会修改这个参数的。LabVIEW 不会为这个数据做拷贝,它会重用这个数据的缓存。但如果你调用的函数修改的这个数据,你的程序就会面临这样一个潜在的危险:这个数据可能被程序其它部分的代码使用了,在那里,你看不出这个数据有任何被改动的地方,但它在运行时却不是你期望的数值。因为这个数据所在的缓存,被程序其它一个地方的一个库函数调用节点给重用了,而这个节点又偷偷摸摸的修改了它。

    
在图5中的示例中,如果库函数调用节点输出的参数是个数组或者字符串,那么就必须为它相对应的输入端联入一个与输出数据大小一致的数组或字符串。否则,LabVIEW无法知道输出数据的大小,而使用默认分配的缓存空间很容易出现数组越界错误。

你可能感兴趣的:(labview库函数调用节点(Call Library Node))