- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
Labview基本常见问题解答(连载三)
1、 如何用LV与可编程仪器通信,该仪器没有GPIB接口,但有COM口,能否用LV操作?A:可以通过LV的串口通信来解决仪器控制问题,参看FIND EXAMPLE的BASIC 2 PORT SERIAL WRITE AND READ.VI
2、 如何将EVENTSTRUCT中捕获的时间传递到STATE DIAGRAM?A:使用VENTSTRUCT捕获面板事件后,将不同的事件对应于不同的字符串和其他,再通过QUEUE将VENTSTRUCT中的字符串传递到STATEDIAGRAM中,再根据得到的字符串进行相应的处理。
3、 使用WRITE TO BINARY FILE函数向二进制文件中写入一个1D数组,为什么在READ FROM BIANRY FILE读取时,会多出4个字节数据呢?A:写入时加入了头信息,多出的4个字节就是头信息,代表了数组或字符串的长度。在WRITE TO BINARY FILE 中的APPEND ARRAY OR STING SIZE这个输入端口中设置,其默认值为T,代表加入头信息;如果将其改为F,就不会多出4个字节了。
4、 卸载7.1时出现错误1603,接着出现错误1722和1721,程序询问是否继续卸载操作,怎样消除该错误并正确卸载7.1?A:该错误通常出现在试图卸载某些共享组件的时候。按照以下步骤可以解决该问题。1) 注意当错误发生时是在卸载哪一部分组件。一般讲在卸载LV核心部分或LV RUNTIME ENGINE的时候容易出现。2) 当出现错误代码1603,弹出对话框提示继续卸载操作时候,点击YES3) 如果卸载完成之后提示需要重新启动计算机,点击NO。4) 对于卸载过程中产生的错误,从CD相应的文件夹中手动运行相应的组件,路经如下:componentslvcorefulllvcorefull.msi或componentslvruntimeenglvruntimeeng.msi点击修复按钮。5) 修复之后再次运行这些MSI,选择卸载按钮。这样就可以完全卸载。
5、7.1在编写大型程序时希望优化计算机的内存使用,那么需要考虑哪些内容?A:1)、将VI分解为SUBVI,当SUBVI不再被执行的时候,LV能够释放它的内存。 2)、尽可能少使用全局变量或局部变量,这两者会造成LV为数据备份。 3)、在需要时才在打开的前面板上显示大型数组和字符串,因为前面板的显示控件需要复制他们显示的数据。 4)、属性节点会造成SUBVI的前面板滞留在内存中,这样会增加内存的使用。因此,如果SUBVI的前面板不被显示,不要在SUBVI中使用属性节点。 5)、尽量在数组中使用相同的数据类型,并在传输数据进入子VI使用强制小数点位置。当LV改变数据类型,输出需要一个新的缓存。 6)、当设计流程图,要注意任何输入大小与输出的大小不同的地方。EG:频繁的增加数组或者字符串的大小将造成数据的多次复制。造成内存增加,并造成内存碎片。
6、 在LV7.1中生成可执行文件后运行出现如下错误:“Executable version(7.1.1) doesn’t match resource file(7.1)”怎样消除错误?A:这种情况是由于LV7.1.1Run-time Engine安装损坏或者版本不兼容造成的。解决如下:1) 到控制面板---添加或者删除程序2) 选择National Instruments Software点击更改3) 在National Instruments Software对话框选择LV7.1.1Run-time Engine点击修复附注:安装了LV Run-time Engine7.1.1后,在MAX的software里一般看不到LV7.1.1Run-time Engine7.1.1,只能在控制面板里看到。
7、 VISA Set I/O Buffer SizeA:可以完成对缓存的设置,放的位置一定要跟在串口配置VI的后面,MASK的设置要对,如果不设置,默认值为4096Bytes,如果需要用串口读取的数据比这个大,就会造成数据丢失。
8、 如何将CVI驱动程序(fp文件)转换成LV的驱动程序?A:LV自带这个功能。在TOOLS的Instrumentation 中的Import Instrument from CVI Fp菜单里。
9、 LV7.1如何创建控件以自定义图片方式显示?A:在前面板放上要创建的控件类型,选中它后点击EDIT---CUSOMIZE CONTROL进入编辑面板,用工具栏的控件变成CUSTOMIZE MODE,EDIT—Import Picture From File选择要显示的图片,右击前面板的控件点Import Picture。切回Edit Mode。右击控件选择Import Picture然后选择方式。同样操作其他图片。
10、 如何把LV前面板控件当前值通过程序设为下次打开时的默认值?A:方法如下1) 手动操作:对控件点击鼠标右键----Data Operations---Make Current Value Default。2) 通过文件或注册表方式先把控件当前值存下来,再下次打开时再从文件或注册表把值读回来。3) 使用VI Server技术在保存控件当前值为默认值,但这种方法只能处于编辑状态使用,在生成exe文件后不能使用。操作如下(1) 调用Invoke Node设VI的Edit Mode值为TRUE(2) 调用Invoke Node设Make Current Value Default(3) 调用Invoke Node设Save Instrumentt的Path to saved file为需要设置默认值的VI路径 10、 使用串口过程中发生错误: 如下错误:1) Unable to open session to “ASRL1::INSTR”2) Return Value :0XBFFF00723) Status Name :VI_ERROR_RSRC_BUSY4) The resource is valid, but VISA can not currently access it.A:这是由于访问COM口的软件引起的,有可能是运行LV程序打开了VISA的对话而没有关闭它;或者打开了一个永远不能关闭的超级终端连接。或者是其他的软件正在使用该串口或者串口挂起了,这是需要关闭所有的程序。若果还是没有解决,最后方法:禁止COM口以释放资源;步骤如下:打开控制面板,点击系统图标,选择设备管理器,展开端口,选中要操作的串口,右击选择属性,在常规选项里选择不再使用该设备。或者直接右击选择停用。设定完毕重新启动,然后选择再启用该串口。
11、在使用Open/Create/Replace File.vi选择create or replace 方式时,如果文件已经存在,需要Replace,怎样才能不弹出对话框直接Replace?A:两种方式:1)双击打开Open/Create/Replace File.vi的程序框图,把里面的If function is 2(create or replace with protection) ask user’s permission to 的CASE结构删除。2)在Open/Creat/Replace File.vi前加一个判断文件存在的结构,判断存在时运行Delete.vi
12、LV在做网络发布的时候,能否在由LabVIEWWEBServe生成的HTML中嵌入其他语言写的脚本文件?或者在其他网络服务器上使用由LV生成的HTMLA:这两种情况都是不允许的,原因在于NI的Web Server不允许这样的操作。LV的Web Server无法将非LV环境下生成的脚本信息传送到客户端浏览器,也无法访问客户端浏览器中非LV环境下生成的脚本信息;同样是处于NI Web Server的问题,其他的Web Server(Apache,IIS等)也无法使用由LV的Web Server生成的HTML文件实行对VI控制。
13、 如何较精确的判断延时时间?A:需要使用迅捷VI(Elapsed Time.vi)而不能使用Wait。因为Wait是会受到系统运行的影响,而且重复延时后会产生积累误差。而Elapsed Time使用的系统时间(精确到Ms),不会产生累积误差。
14、 如何动态添加Tree控件内条目?A:查找Directory hierarchy in tree control.vi例程,打开init-open-close子vi内的Directory to tree子vi内add Item.vi。使用该属性节点进行添加删除操作。重点在于parent tag端口的使用。如果添加的为最上层的条目,则parent tag为空字符串。如果是子层条目,则parent必须为上一层条目的tag。
15、 在LV7.1中如何使用Database Connectivity更新ACCESS数据库中数据类型为OLE的字段? A:使用带参数更新数据库的方式更新OLE数据类型的数据。具体方法如下:1)使用DB Tools Open Connection.vi打开数据库;2)使用DB Tools Create Parameterized Query.vi建立一个带参数更新数据库的Refnum,在SQL query输入“update表名称set列名称=(?)”,由于OLE数据无法用文本方式直接体现,“(?)”在这里就代表OLE的数据类型;3)使用DB Tools set Parameter.vi,在Value处输入OLE数据就可以,比如数组;4)使用两次DB Tools Free Object.vi释放Refnum,才可以得到Connection Reference,才可以再使用其他DB Tools VI;5)断开连接。
16、 LV7.1,Time Loop结构主程序内调用了两个不同功能的子程序,当子程序被调用时弹出子VI前面板。子程序内均使用了Time Loop,设置均一样,但是调用任一子VI后另一个再也调用不了了。 A:两个子VI均使用了同一个设置的Time Loop结构,这是由于两个子VI的Time Loop的Loop name名称相同造成的。
17、 在LV7.1中如何设定和显示Cursor A:举例对于waveform graph,我们可以调出它的属性节点,然后在属性节点中选择Cursor list,程序就会以簇数组的形式列出所有的游标,先索引出来某个游标,然后再利用簇函数就可以修改了,如果要改变游标的坐标,可以Index Array 索引出某个游标,然后Bundle by name就可以修改,再replace array或者其他数组函数,将改变后的簇数组写入另一个cursor list的属性节点即可。