NI LabVIEW,CVI,数据采集等产品讨论区

取消
显示结果 
搜索替代 
您的意思是: 

可重入vi的引用

一个可重入的vi,它本身被多次调用, 如果该vi的副本再调用一个子vi,那么该子vi怎么和vi副本传递数据?

 

附件是一个例子,大概说明如下:

Main 调用 Sub_A ,其中 Sub_A 是可重入的,需要同时运行多个;
Sub_A调用 Sub_B , 在打开Sub_B的时候,Sub_A的前面板要求变透明, Sub_B退出后,Sub_A 的前面板要求恢复。


如果Main不运行,直接运行Sub_A ,打开Sub_B,没发现问题;
但是如果依次运行 Main ,Sub_A 、Sub_B,遇到下面两个问题:
1、Sub_B关闭后,Sub_A前面板无法恢复;应该是由于没有正确打开vi副本的引用,请问怎么能和重入的vi副本传递数据?
2、Sub_B关闭后,Sub_A保持透明,此时按Sub_A的停止按钮时,Sub_A无法关闭,还会导致LV死机;请问这是什么原因?

 

弄了一晚上,没弄好,请各位大侠指教,不胜感激!

下载全部
0 项奖励
1 条消息(共 2 条)
5,101 次查看

你的VI主要有以下几个问题:

1、在Sub_A里面传送给Sub_B的是本VI的名称,属性节点应该选择“VI副本名”。因为你Sub_A选择了预分配副本重入,所以当Main调用Sub_A时打开的VI不是原名字(我这边打开后名字是Sub_A:1070001),所以Sub_B根本没有接受到正确的VI名字;

2、在Sub_B里打开VI引用使用了绝对路径。预分配副本重入的VI打开后不存在于磁盘中,只存在于内存中,所以使用文件路径名来打开是找不到这个VI副本的。所以Sub_B打开VI引用直接把VI名字连进去就行了,LabVIEW会直接在内存里寻找这个副本。

两个VI的修改如图所示。

 

SubA:

SubA.PNG

 

 

 

SubB:

 

SubB.PNG

0 项奖励
2 条消息(共 2 条)
5,024 次查看