【LabVIEW花样翻新】使用子面板技术进行动态的界面加载

  在进行公司LabVIEW项目的时候老大提的第一点要求便是要能够开发一个兼容的、方便升级和修改的上位机平台。这里面他主要要求一个界面可替换的特性,也就是说在程序完成发布以后想要修改程序的面板、功能或者添加新的界面不需要进行重复地发布,可以通过打补丁的方式来实现。
  由于LabVIEW拥有很强大的平台接口支持,对Matlab、C++甚至.Net都可以做到无缝衔接,所以后台的算法、程序很容易就可以做成兼容的。比如我做的第一个上位机,利用飞思卡尔智能车平台发回来的实时图像进行算法分析并且将结果显示出来,这里面的算法部分就是通过一个VC封装的DLL来实现的,在程序编译后只需替换DLL文件即可实现算法的改动。
  但是对于前面板的这种实现方式,以前并没有经过测试,所以心里还是没有底的。在这里要感谢阮奇祯先生的那本《我和LabVIEW》,其中有一个部分是讲LabVIEW的编译原理的,记得他说LabVIEW是将源码数据和编译信息同时封装到.vi文件中的。这意味着什么,打个比方,就像是C语言中有一个文件可以同时装下.c和.o文件。正是因为这种特性,使得LabVIEW可以实现这种前面板替换的功能。
  可能有些同学到这里还是一头雾水,那么没关系,我将用一个小例子来实现一下这个功能。
  首先设计前面板如下图所示:
主界面前面板
  功能很简单,中间的子面板用来实现动态的面板加载,左侧的布尔杆转换为True时加载路径控件选择的vi文件并打开显示至子面板区域,转换为False时将子面板区域打开的vi移除并关闭。
  下面编写后面板:
主vi后面板
  实现起来用一个简单的while-事件结构就可以了,外圈的while循环在stop按钮按下前一直保持运行,内层的事件结构用来判断按键按下。添加超时时间50ms,作为系统空闲时间。紧接着添加一个事件,对应前面板“载入”开关值改变。
”载入按钮值改变事件“
  这里主要需要三个步骤,第一步是打开我们所需的vi文件,这个函数在”应用程序控制“里面,输入的是vi文件的绝对路径,输出的是打开文件后的引用。由于我们现在只是打开了vi文件,一般来说,vi文件的执行属性是不会设置成打开后自动运行的,所以还需要进行第二步,即运行vi文件。这里需要用到一个调用节点,大家可以在后面板随便搜索一个调用节点,然后右键点击,选择类里面选择VI服务器->VI->VI,如图:
选择调用节点连接类
  之后选择对应的方法为运行VI,即可得到我们需要的调用节点,之后连接输入的引用为第一步的输出即可,注意这里有两个调用参数,全部设成False即可。
  到这一步为止我们已经成功地将一个VI文件打开并且运行了,下面只需要将它加载到子面板即可,使用子面板对应的方法,这个调用节点的选择方式和上面的差不多,或者可以直接右键点击前面板的子面板空间选择调用节点,如下图:
选择子面板的调用节点
  由于使用这种方法创建出来的调用节点已经链接到了前面板控件,所以在左上角没有对应的控件引用输入端,只需将第二部运行后得到的VI引用链接到调用参数即可。
  到这里我们已经完成了加载一个子VI并且嵌入到子面板的过程。那么既然有了打开,就要设计对应的关闭,这里同样利用”加载“按钮,在值改变为False时将对应的VI关闭并移出子面板。
关闭并移出

  主要用到了三步:第一步将对应的VI关闭(停止运行),用到了VI类的About调用方法;第二步是移出子面板,使用了子面板的移除VI调用方法,这里由于没有引用输入和输出,所以用错误数据流来保证执行的顺序;最后通过关闭引用来将之前的VI引用销毁。
  这里有一个需要注意的地方,就是已经打开的这个VI引用的获得方式问题,由于我编写的这个例子用的是2011版本的LabVIEW,子面板没有”已插入VI“这一属性,在2013及以后版本中有这一属性:
2011版本2013版本,有了已插入VI属性
  那么也好解决,既然引用是咱自己打开的,那么只需要传到关闭时使用的调用节点就好,于是在while循环添加移位寄存器,在打开VI引用后传到移位寄存器,需要关闭时再传到对应的调用节点即可。
  下面再编写一个简单的子面板VI
子VI前后台
  完成的功能是1秒钟前面板的数值控件增加一次,在一个死循环里面跑。
  下面打开主面板并运行,在路径里面选择刚才写好的子VI并且按下开关运行它:
运行效果
  可以看到程序能够正常工作,那么实际上在主面板生成exe发布后,用这种方法调用一个工程外的vi也是一样可以的,所以这就是这个方法强大的原因。由于发布太麻烦,这里就不做演示了,同学们可以自行测试。
  最后说一点注意事项,就是在选择其他的子VI时,由于程序在发布时会把用到的函数和其他后台文件都打包好,如果单纯地将一个VI文件加进安装好的目录里面去有可能会因为其中用到了原本工程中没有的文件而造成子VI无法打开,所以在进行升级和修改时应该制作一个源代码发布,并且在这里面
去掉三个选项
将这三个选项去掉,具体原因不细讲了。
  这个机制可以很灵活地配合其他一些交互方式来使用,大家可以自行发动创造力。由于目前的项目涉及一些商业机密,在此就不做开源和展示了。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值