Labview打包程序运行时调用外部VI
一、外部被调用的VI
按照设定的要求,建立两个用于被调用vi程序;
目录规则是:[主程序项目目录] -> Plugs -> [被加载的vi目录名] -> [被加载的vi名称];
约定:
(1)被加载的vi名称与所在的目录名称一致;
(2)所有被调用的VI接口参数相同
重要说明:
(1)被调用Vi与运行时程序的通信数据结构为严格自定义簇,在簇中根据需要存放数据,如下,测试程序中只定义主队列名称和从队列名称,用于两者交换数据
(2)外部VI回传的数据为严格自定义簇,测试结构定义如下,可根据实际添加修改
(3)外部VI的程序框图
VI启动时,先根据传递过来的参数获取主队列引用和从队列引用(两个队列已在运行时程序中创建),如果已存在则得到队列引用,否则创建队列;在VI关闭时,根据是否为创建队列,决定是否释放队列引用。
问题:测试时发现,在开发环境中调用外部VI正常;但在主程序打包后调用外部VI时弹出窗口一闪而过,开始怎么也找不到原因,后来让外部VI的窗口显示出来才发现VI出错了;根据错误发现外部VI的依赖项没有加载,不清楚为什么没有自动加载依赖项。想了两个办法,一个是让外部VI依赖的程序放到同一个项目中;另一个是,在主程序中加入相同的依赖项。
二、主程序
1. 主程序VI框图,启动时创建主队列和从队列,上侧循环处理从站发过来的数据,下侧循环处理UI事件
2. 动态加载VI程序,先按照约定规则枚举所有要启动外部VI,程序中使用调用节点方式调用外部VI,也可以使用引用调用方式,程序中处理了外部vi存在错误的这种情况。
三、总结
1. 打包后的程序,调用外部的VI,可以使用队列的方式进行数据交互,同理对于其他的通信方式如事件和通知器应该也是可以的;
2. 打包后的程序,调用外部的VI,对于被调用的VI的依赖项若不在项目目录下,可能会调用失败,至于为什么不能自动加载,原因不清楚;
