基于VI服务器和队列程序架构.ppt

上传人:wj 文档编号:13281359 上传时间:2023-06-12 格式:PPT 页数:48 大小:1.26MB
下载 相关 举报
基于VI服务器和队列程序架构.ppt_第1页
第1页 / 共48页
基于VI服务器和队列程序架构.ppt_第2页
第2页 / 共48页
基于VI服务器和队列程序架构.ppt_第3页
第3页 / 共48页
基于VI服务器和队列程序架构.ppt_第4页
第4页 / 共48页
基于VI服务器和队列程序架构.ppt_第5页
第5页 / 共48页
基于VI服务器和队列程序架构.ppt_第6页
第6页 / 共48页
基于VI服务器和队列程序架构.ppt_第7页
第7页 / 共48页
基于VI服务器和队列程序架构.ppt_第8页
第8页 / 共48页
基于VI服务器和队列程序架构.ppt_第9页
第9页 / 共48页
基于VI服务器和队列程序架构.ppt_第10页
第10页 / 共48页
基于VI服务器和队列程序架构.ppt_第11页
第11页 / 共48页
基于VI服务器和队列程序架构.ppt_第12页
第12页 / 共48页
基于VI服务器和队列程序架构.ppt_第13页
第13页 / 共48页
基于VI服务器和队列程序架构.ppt_第14页
第14页 / 共48页
基于VI服务器和队列程序架构.ppt_第15页
第15页 / 共48页
基于VI服务器和队列程序架构.ppt_第16页
第16页 / 共48页
基于VI服务器和队列程序架构.ppt_第17页
第17页 / 共48页
基于VI服务器和队列程序架构.ppt_第18页
第18页 / 共48页
基于VI服务器和队列程序架构.ppt_第19页
第19页 / 共48页
基于VI服务器和队列程序架构.ppt_第20页
第20页 / 共48页
亲,该文档总共48页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于VI服务器和队列程序架构.ppt

《基于VI服务器和队列程序架构.ppt》由会员分享,可在线阅读,更多相关《基于VI服务器和队列程序架构.ppt(48页珍藏版)》请在冰点文库上搜索。

基于VI服务器和队列程序架构.ppt

基于VI服务器与队列的程序架构,Cedar2009-09-03,应用领域,自动化测试系统(ATE),挑战,以往的教材中着重强调了某一个功能的实现,但是在实际应用中一个完整的自动测试系统(ATE)往往有很多功能要求实现。

由于ATE(autotestsystem)使用的设备非常昂贵,所以要尽量减少单位产品所消耗的ATE工时。

针对以上要求,笔者利用队列和VI-server创建测试软件。

使用产品,Labview8.6,关键词,LabviewVI-server并行测试队列错误处理,介绍,本文基于labview中的VI-server和queue的组合,开发出可并行测试多个功能的测试软件。

由于可根据测试软件本身特点可以修改config文件,形成可测试不同产品的程序,从而大幅度缩短项目开发周期。

正文,Labview是一种图形化编程语言,比文本编程语言开发时间短。

在当今降低成本要求越来越高的时代,尽量将测试项目集成到一个程序已是大势所趋。

为了缩短项目开发时间,尽量利用以前的代码也不为是一个节约成本的好办法。

测试结构,一般的测试程序可以被分为:

初始化等待运行指令进入测试保存测试数据退出测试,测试流程,初始化,等待运行指令,进入测试,保存数据,退出测试,测试流程,初始化设备:

测试之前往往要首先刷新整个ATE,使得所有的测试设备能够符合被测品(DUT)的要求。

等待运行指令:

当外围准备好了方能进入测试,比如被测品有没有安装到位?

保护措施有没有打开?

等等,而程序必须在此步等待操作者确认完毕后方能进入下步操作。

测试流程,进入测试:

此时PC将按照测试计划(testplan)规定流程,逐步对被测品进行各项测试,要求的测试项往往很多,如按照串行顺序测试将消耗很多工时,这时如将互不影响的测试项并行测试将大大减少工时。

保存数据:

为了方便统计分析,往往要求对测试数据进行保存,一般的情况是本机(local)要求一份,服务器要求一份。

退出测试:

所有测试项完成且保存完数据后将ATE进入保护状态以防止更换被测品带来损伤。

基本测试程序架构,测试程序架构比较,根据以上的要求我们可以编写相应的代码第一种:

使用error-handle串行,这张图想必看过清华出版软件工程在labview中的应用的人都不会陌生,这个顺序看起来很好,简单而又准确,但是如果想添加一个新状态或者改变一下这些状态的顺序,该怎么办?

这些恐怕要涉及到删除源代码以及移动VI。

所以这种结构不适合开发一些大型的测试项目。

测试程序架构比较,第二种:

状态机定义:

状态机是一种具有指定数目的状态的概念机,在某个时刻仅处于一个状态。

状态的转变是由输入事件引起的状态变化的,作为输入事件的相应,系统可能转变到相同或不同的状态,而输出事件可能是任意产生的。

就以软件工程在labview中的应用书中的洗衣机为例。

流程图见下图,测试程序架构比较,测试程序架构比较,上图是洗衣机的分层结构图,可选择每个状态和输出条件。

测试程序架构比较,上图显示的就是状态机基本结构,开始条件输入进移位寄存器,然后将之传送给case语句。

测试程序架构比较,测试程序架构比较,另一种状态机,在实际使用中测试流程在测试前就已经规定好了,一般使用数组这就不需要用到enum控件,使用deletefromarray.vi让测试项逐次运行,如测试项出现异常,则选择下面的测试项,上图如出现异常则进入“end”测试项。

测试流程,Deletefromarray,选择,测试程序架构比较,上图所示的结构是很多ATS使用的结构,此结构比error-handle结构优秀,特别是其中的错误处理功能。

但笔者在实际使用中,发现此结构还是有一定的缺陷:

第一,如果要新增test3测试项,只有打开mainvi增加代码,虽然只是简单的增加一个case结构但是也需要重新debug整个程序,其中就隐含了不确定因素增加了风险;第二,如果test1和test2两个测试项互不影响可以并行测试,但这种结构只能串行测试浪费了宝贵的测试时间。

测试程序架构比较,针对以上两个问题笔者使用两种方法解决第一,使用vi-server避免修改mainvi,vi-server是labview独有的技术,将代码调入内存执行,执行完成后释放内存,(具体可参考清华出版Labview高级程序设计)笔者将所有的testvi做成标准格式,每个测试项功能相当于状态机中的一个case结构,这样可以将testvi和mainvi分离,两者之间使用vi-server衔接,如果测试项修改,增加,删除。

只需要更改config文件,不需要更改mainvi,避免了风险的产生。

代码见下图,测试程序架构比较,其中的LOG,FMT,result,errorout各有用处,下一部分将对此详细讲解。

测试程序架构比较,上面是vi-server的前后面板,由此得知所有的testvi必须要有LOG,FMT,result,errorout这几个控件。

测试程序架构比较,下图为一个标准的testvi样板,必须要有FMT,LOG,result,errorout几个输入项。

把testvi统一成一个样式,这样可以方便mainvi的调用。

测试程序架构比较,第二;针对并行测试,我们可以创立两个线程:

masterthread;slavethread.,masterthread,slavethread,测试程序架构比较,上图创建了两个队列masterthread;slavethread把可以并行测试的测试项组成两个字符串数组,写入两个队列,由于labview是自动实现多线程的,所以可以达到并行测试目的。

必须将vi-server这个vi设置为“preallocatedoneforeachinstance”模式,具体方法为:

filevipropertiesexecutionexecutionreentrant.设置这个模式方能在两个线程中同时调用此vi。

否则只能一个线程释放后另一线程才能使用此vi,丧失了并行测试的意义。

例程讲解,笔者针对以上所述的内容,创建了一套demo程序。

例程讲解,例程讲解,1,2,3,4,例程讲解,上面两幅是程序的前面板。

在ATS中,操作者只需要知道有没有通过测试,所以前面板尽量少安排控件。

控件作用讲解:

1.这是一个eunm控件,用来显示有几种testplan,并选择相对应的testplan.2.这是一个布尔控件,点击后进入测试状态,注意此控件要选择“latchwhenrelease”机械状态。

例程讲解,3.3和4都是TAB结构里面的一页,3里面是一个string控件,用来显示被测品当前状态;4是一个table控件,用来显示被测品的测试状态。

例程讲解,1,2,3,例程讲解,上图为例程的代码部分1.这是程序的主体部分,使用的顺序结构,其中包括初始化,等待指令,进入测试,保存数据,退出测试。

后面将对此详细讲解。

2.2和3是两个队列,用来在前面板显示数据并对之进行必要的处理(自动翻页,错误显示红色,等等)他们分别对应前面板的string&table控件,这是采用NI推荐使用的生产消费模式,在主体产生的数据同时被写进队列将显示部分独立于其他部分。

例程讲解,1,例程讲解,上图是主体程序的第一步,作用是初始化。

因是demo程序,没有刷新硬件部分,笔者只放了读取testplanList的部分,将config里面所有文件名读出并将他们显示在enum控件。

正常程序中要将config,testdata,mainvi,drivervi,这些文件夹会整体放入一个文件夹,尽量避免使用固定的文件夹如“c:

test”等等,这样方便保存修改的记录也方便拷贝到其他电脑上出现找不到某个vi的情况。

例程讲解,例程讲解,上图显示的是程序的第二页,内容是等待指令。

笔者使用的是while循环套一个事件结构,只有操作者触发布尔控件的值发生变化才会触发这个事件,而事件结构内有个true常量会输入到while循环,从而退出循环进入下一步。

例程讲解,2,3,1,例程讲解,上图是进入测试部分:

1.读取操作者选取的testplan名称,并根据这个找到对应的config文件。

2.读取config文件中testflow,将之转化为字符串数组,并写入testflow队列中。

3.将string&table两个控件清零。

例程讲解,1,3,2,4,5,A,例程讲解,上图是本程序的重点部分1.读取上页写入testflow队列的数据,并根据此依次读出主从线程的测试项。

此功能依靠readsubconfig.vi实现(见上图的A点)具体代码见下面的附件,读出两个线程的测试项同时将他们写入masterthread&slavethread这两个队列中。

例程讲解,2.从readsubconfig读出的主从流程,将被写入masterthread&slavethread两个队列,请注意3下面的子vi,他必须设为preallocatedoneforeachinstance模式,因为两个线程可能同时调用这个vi。

labview中如果队列没有元素了,那么dequeueelement.vi将处在等待状态无法正常退出,所以创建watchdog.vi的作用就是当队列中没有元素了,此队列将被release,从而dequeueelement.vi可以退出等待状态,进入程序的下一步。

代码见附件。

例程讲解,例程讲解,上图是进入测试的最后部分,因为string&table控件处理需要时间,往往出现所有的测试项都已经运行完毕但是数据处理并没有完成,这时候就必须放置等待功能,每隔0.1s轮询一次两个队列,如果里面有元素就继续等待,没有则release这个队列使得下面的显示队列退出等待。

例程讲解,例程讲解,上图显示的是数据保存功能,在根目录下面的data,以时间为名称。

尾声,首先谢谢各位看官能看到最后一页本人也是labview菜鸟,刚刚对labview有点感悟,想拿出来和大家共享,所以写了这个PPT,希望各位高手多吐口水,多砸砖头。

小弟真诚的希望能结识labview方面的高手,我的QQ:

285023294TEL:

13915535164,Thanks,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2