APP下载

Labview应用程序开发中使用支持文件相对路径的有关问题

2015-12-24金阳

湖北汽车工业学院学报 2015年1期
关键词:主程序前面板磁盘

金阳

(湖北汽车工业学院汽车工程学院,十堰湖北442002)

Labview应用程序开发中使用支持文件相对路径的有关问题

金阳

(湖北汽车工业学院汽车工程学院,十堰湖北442002)

用Labview开发涉及支持文件读写的应用程序时,常会出现调试正常而可执行文件运行时找不到支持文件路径的错误。基于一简单示例,分析了产生此问题的原因并提供了解决问题的思路。

Labview;相对路径;支持文件;应用程序开发

Labview是一种图形化编程语言,常用于测量测试领域应用程序的开发。一个完整的应用程序不仅涉及Labview编写的源程序,还会读写很多格式的支持文件,如txt、word、excel、mdb等格式文件。为了程序的可移植性,在读写支持文件时,常使用支持文件相对于读写该文件的Labview源程序文件的相对路径。可是开发者会发现:Labview调试环境中运行正常的程序在生成应用程序后,会出现找不到支持文件路径的错误。本文中以一个简单的应用程序开发为例,分析了产生此问题的原因并提供了解决此问题的方法。本文中的示例用Labview 2013中文版开发,并且假定读者已具有Labveiw编程的基本技能。

1 应用程序开发项目的原始文件构成

开发一个Labview应用可能需要:Labview源程序,其后缀名为“vi”,因而一个源程序也被称为一个VI;各种数据文件,如txt、word、excel、html、mdb等格式文件。这些不能由Labview开发环境直接打开编辑,但能通过Labview程序代码对之进行读写的文件被称为支持文件。支持文件中可以存储参数缺省值、采集到的数据、测试报告等。图1是开发某个应用程序所需的全部相关文件在磁盘上的存储路径示意图,包括2个VI和1个txt文件。“主程序.vi”和“to be read.txt”位于磁盘目录“D:示例文件夹”下;“读txt文件.vi”位于磁盘目录“D:标例文件夹子VIs”下。

图1 原始文件存储路径树示例

“to be read.txt”文件中的内容如图2所示。

图2 “to be read.txt”文件中的内容

图1中的“主程序.vi”是启动VI(Starup VI),类似于其它文本编程语言中的主程序。在LabVIEW中,任何一个VI都可以被其它VI调用而成为一个子VI,即子程序。此子VI又可调用其它VI,使后者成为更下一层的子VI。处于调用层级最顶层的那个VI就是启动VI,程序的运行是从它开始的。

本开发示例中,完成源程序编写后,Labview生成的调用层级如图3所示。

图3 启动VI的调用层级示例

图3表示“主程序.vi”是启动VI,它调用了“读txt文件.vi”,即后者是前者的子VI。预期的程序运行过程如下:1)出现“主程序.vi”的前面板窗口(图4 a);2)当用户点图4 a上的“退出”按钮时,程序运行完毕;3)当用户点击图4 a上的“读txt文件”按钮时,弹出“读txt文件.vi”的前面板(图4 b),文本框“txt文件中的内容:”中立即显示出“to be read.txt”文件中的全部文本。窗口1会一直保持,直至用户点击“返回”按钮后,此窗口关闭并回到窗口2,等待用户操作。

图4 应用程序运行时的窗口

“读txt文件.vi”的功能是:从“to be read.txt”读出文件内容,并显示在其前面板窗口中的文本框“txt文件中的内容:”中。可见从图3的调用层级图中是不能看出VI是否有读写支持文件的操作的。“读txt文件.vi”的前面板及与读写文件相关的框图程序(源代码)分别如图5~6所示,图6中包含了帮助理解代码意义的注释,位于黑色方框内。

为了保证源代码的可移值性,图6在获取txt文件的路径时不是用其绝对路径,而是用其相对于“读txt文件.vi”的相对路径。在此示例中,“当前VI路径”函数的输出将是“D:示例文件夹子VIs读txt文件.vi”,那么经过“..”运算后,路径成为“D:示例文件夹子VIs”;此路径再经“..”运算,成为“D:示例文件夹”;“D:示例文件夹”再经与“ o be read.txt”运算,就是“D:示例文件夹 o be read.txt”,这刚好是“to be read.txt”文件的绝对路径。

在Labview环境中运行“读txt文件.vi”,得到的结果如图4 b所示,没有错误。

图5 “读txt文件.vi”的前面板

图6 “读txt文件.vi”的部分框图程序

为了调试程序及方便理解下述问题,在“读txt文件.vi”的前面板上将程序运行的3个中间结果(图7)显示出来,其值与上述分析一致。

如果将整个“示例文件夹”目录移动或拷贝到当前电脑或其它电脑任意目录下,“读txt文件.vi”与“to be read.txt”的绝对路径发生了变化,但由于两者间的相对路径没有变,所以程序代码无需修改,这就是源代码的可移植性。

图7 显示中间结果的“读txt文件.vi”前面板

2 生成应用程序后带来的问题及原因

2.1 应用程序属性设置与生成

此处略去生成应用程序的一般步骤[1],着重提及与支持文件路径有关的方面。

下面将生成一个以“主程序.vi”为启动VI的名为“路径示例.exe”的可执行文件,拟将该可执行文件放在“D:uilds应用程序“目录下。这需要在应用程序属性设置窗口中进行相应设置,见图8。还需要将“主程序.vi”从图9所示窗口中的“项目文件”窗格中选中,送入图中的“启动VI”窗格;并将这个主程序及其子VI需要的全部支持文件从“项目文件”窗格中选中,送入图9中的“始终包括”窗格。完成以上操作后的窗口如图9所示。

图8 应用程序目标目录设置

图9 选择启动VI与支持文件

接下来,需要设定支持文件的存放目录,这里尝试将它放到与exe文件相同的目录下(图10)。

图10 支持文件的保存目录设定界面

以上设置完成后,点击应用程序属性设置窗口中的“生成”按钮让Labview创建可执行文件。生成过程结束后,目标文件夹下的内容如图11所示。可见,Labview遵从设置,将exe文件存放到了指定的目录下,并将支持文件复制到了指定目录下。

图11 应用程序目标目录下的内容

2.2 生成exe文件后的运行情形

运行“路径示例.exe”,弹出如图4 a所示窗口,点击窗口中的“读txt文件”按钮,会弹出“读txt文件.vi”的界面(图12),但与在LabVIEW开发环境下运行VI的结果(图7)不同,此时文本框“txt文件中的内容”中没有数据显示,且“读文件错误信息”报错,说明读文件没有成功。

图12 “路径示例.exe”文件运行界面

从图12所示窗口的“此VI的路径”控件的值可知,exe调用的“读txt文件.vi”的绝对路径是“D:uilds应用程序路径示例.exe子VIs读txt文件.vi”,这表明exe文件是个文件目录。[2]在如图6所示的代码下,“读文本文件”函数指向的文件路径就是图12中控件所显示的“D:uilds应用程序路径示例.exe be read.txt”,而这个文件是不存在的,所以读文本文件函数会报错。

生成应用程序的过程中,Labview会将支持文件复制到指定目录下,而磁盘上的全部相关VI会被复制封装到exe文件中,这个文件内甚至会包含子目录以使复制后各VI之间的相对路径与原VI间的相对路径保持一致。这就是图8中Labview内置的“保留磁盘层次结构”打勾项的含义。

生成exe后,复制的支持文件与exe文件内部读写支持文件VI之间的相对路径关系如果与原始文件间的相对路径不同,运行exe时读写文件处的文件路径就不存在,从而出现问题。

此外,在所有可以保持VI的磁盘层次结构(相对路径树结构)的目录中,exe文件中的路径树是其中路径深度最浅的。以上述项目为例,图13均满足保留磁盘层次结构的条件,但Labveiw会按照图13 a生成exe文件中的路径树。

图13 保留磁盘层次结构的可执行文件内的路径树

3 解决方法

理解了Labview生成应用程序的特点,就可明白:在开发涉及读写支持文件的程序时,如果希望生成exe后运行无误,关键是要使支持文件与读写该支持文件的VI间的相对磁盘路径在生成exe前后保持不变。

举例如下:1)在源程序开发阶段,修改文件路径(图14),即将支持文件“to be read.txt”移到与“子VIs”目录并列,见图1;2)“读txt文件.vi”的代码仅需要改动相对路径字符串,如图15所示。

图14 修改原始文件的路径

图15 修改相对路径字符串

图16 无误的exe运行结果

应用程序属性设置窗口的内容保持不变(图8~10),重新生成exe。这样得到的应用程序目标目录下的内容从表面上看与图11一致。但在运行“路径示例.exe”,并点击界面上的“读txt文件”按钮后,弹出窗口如图16所示,得到预期结果。

4 总结

Labview生成的exe文件不仅是应用程序执行的入口,还是一个目录,启动VI及其调用的所有Labview中源文件(子VI、菜单文件、控件文件等)都封装在此目录中,但支持文件不在其中而是被复制到用户指定的目录下。exe目录中各文件之间的相对路径关系与对应的源文件在磁盘上的相对路径关系保持一致,使exe目录下的路径树深度最浅。

支持文件与读写这些支持文件的VI间的相对路径关系在生成exe后如果发生变化,生成应用程序后会由于找不相应的文件路径而出错。

在源代码开发阶段,合理安排文件的磁盘存储路径,并在应用程序属性设置时相应设置exe文件与支持文件的存放目录,可做到在Labview环境中运行源代码的效果与运行exe的效果一致。

[1]佚名.开发和发布应用程序[CP/OL].[2013-06].http://zone.ni.com/reference/zhs-XX/help/371361K-0118/lvhowto/develop_distribute_applications/.

[2]阮奇桢.我和LabVIEW[M].北京:北京航空航天大学出版社,2009:263.

Problems about Support Files’Relative Path in Application Development with Labview

Jin Yang
(School of Automotive Engineering,Hubei University of Automotive Technology,Shiyan 442002,China)

When developing applications that involve reading from,or writing to,support files like txt, excel,word,mdb etc.format with Labview,developers often encounter a problem where the executive file can’t find the path for the support file while it works well in Labview debugging environment.Taking a simple example,the cause for the phenomena was analyzed and measure to it was provided.

Labview;relative path;support files;application development

TP311.52

A

1008-5483(2015)01-0064-04

10.3969/j.issn.1008-5483.2015.01.014

2014-01-24

金阳(1975-),女,湖北麻城人,副教授,博士,从事汽车NVH信号处理、整车性能仿真研究。E-mail:jin_yang@163.com

猜你喜欢

主程序前面板磁盘
自动升级程序在船舶监测系统中的应用
颜值高和散热强可以并存3款高品质机箱推荐
浅谈数控铣削技术代码程序的嵌套方式研究
解决Windows磁盘签名冲突
电竞潮牌范航嘉GX520S机箱评测
电竞潮牌范 航嘉GX520S机箱评测
电控冰箱软件模块化设计
修改磁盘属性
时光倒流 换回PotPlayer老图标
磁盘组群组及iSCSI Target设置