目录
多次拷贝子 vi 同时开多面板
在实际使用时,需要同时开很多 chart 显示多个信号的实时变化,如果全部放在一个面板需要很大的窗口空间,因此考虑了以下套娃式拷贝设计:
-
给子 vi 设计一个按键 new ,对这种子vi进行拷贝(包括新建文件名)、打开新拷贝的 vi 前面板并运行;
-
在子 vi 增加一个按键 delete,按键触发会自动删除该拷贝文件,并关闭前面板;
试着编了一下,子 vi 是个空文件没有任何功能,可以实现目标:
在主 vi 里点击套娃调用按钮,能够完成第一次拷贝,把目标子 vi 的文件的 reference 存到一个全局变量 Global Variable 中(也可以用dialog进行文件选取),得到的 Path 包含了原始文件名,后缀是.vi,利用 Search and Replace String 控件给其加入了_copy1的名字后缀,copy为新文件,并将新路径也存到一个全局变量中。同时利用vi Invoke Node 打开并运行新拷贝的文件;
目标子vi文件的 reference用 File Dialog 控件选取得到:
而子vi利用循环,从全局变量中访问到目前最新拷贝出的vi文件路径,进行套娃式的自动名称迭代、拷贝、打开和运行:
也可以通过delete按键关闭和删除不需要的子vi面板和文件:
按键调用子vi
如果不需要重复打开很多个相同子vi面板,只需要把所要打开的子vi文件的 reference 存为全局变量 Global Variable ,在主vi中利用按键打开前面板,并运行目标子vi程序:
注意在子vi 中需要设计一个按键 close,用于停止子vi的运行 (不对初始文件进行删除),否则子vi运行过程中主vi的其他按键不再起作用,跳出子 vi 后,在主 vi 中继续进行关闭子 vi 前面板的逻辑,在子 vi 的close所进入的Event Structure是空白的,但必须要有这个:
点击子vi中的close按键就能够停止运行、关闭子vi前面板,程序跳回主vi;
应用
利用上述逻辑,把 Chart 和选择 List 作为全局变量放在子vi中,可以打开多个图窗,选择所需要观测的信号绘制:
如果出现问题,大多是没有事先设置好vi的property;在实际使用中发现仍然存在问题,每次打开新拷贝之后,之前的图像会停掉;针对这个问题进行检查:
实际需要在打开拷贝文件之后,保持原vi的正常运行,因此在 Run VI 的设置中 inactive Wait Until Done,即该vi程序中打开拷贝子vi文件并运行时,不会等待子文件结束运行,而是同步运行;同时注意通过 File --> VI property --> Execution 选择 Rentrancy 为可重复进入执行;在子vi的 delete 按钮删除机制中添加对前面板的关闭,就可以实现想要的功能。
几种调用的 demo 文件放在最前面,运行时需要选择 subVI 作为被调用的子vi;