一个项目中,我需要访问相机控制器(win7系统)中的一张照片(共享文件方式),在我这台电脑上使用LabVIEW显示。
为了降低系统开销,我使用以下逻辑:
相机存储逻辑:
每次拍照图片均覆盖性存储在一个固定文件夹内,文件名均一样,如test.jpg。并将此文件夹共享给LabVIEW这台电脑。
LabVIEW读取逻辑:
Step1:删除这个共享文件夹内的test.jpg。
Step2:使用LabVIEW “文件或文件夹是否存在”指令,不断查询test.jpg是否存在。
Step3:如果test.jpg存在,则认为新照片已经来了,则读取图片并显示。
Step4:删除test.jpg。
实际运行时发现,相机控制器内的test.jpg图片生成后,LabVIEW显示的延时并不稳定。有时候很快,有时候长达7-8秒才会显示。
经过分析,原因是这样的:
对于共享文件夹状态的刷新,windows有一套优化机制。如果文件夹处在“非活跃状态”,windows会降低其当前状态的刷新频率。(10s刷新一次)
这些状态就包括这些文件夹内有多少文件等等信息。而LabVIEW中的“文件或文件夹是否存在”函数并不能使windows认为这个共享文件夹处于活跃状态。
我做了一下试验,我使用windows的资源管理器打开这个共享文件夹,并最小化。则图片显示几乎没有延时,从而验证了我的猜想。
处理方法:
在LabVIEW中使用cmd命令,自动调用资源管理器打开这个远程共享文件夹,并最小化。