




已閱讀5頁,還剩43頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
基于VI服務器與隊列的程序架構,Cedar 2009-09-03,應用領域,自動化測試系統(tǒng)(ATE),挑戰(zhàn),以往的教材中著重強調(diào)了某一個功能的實現(xiàn),但是在實際應用中一個完整的自動測試系統(tǒng)(ATE)往往有很多功能要求實現(xiàn)。 由于ATE(auto test system)使用的設備非常昂貴,所以要盡量減少單位產(chǎn)品所消耗的ATE工時。 針對以上要求,筆者利用隊列和VI-server創(chuàng)建測試軟件。,使用產(chǎn)品,Labview8.6,關鍵詞,Labview VI-server 并行測試 隊列 錯誤處理,介紹,本文基于labview中的VI-server和queue的組合,開發(fā)出可并行測試多個功能的測試軟件。 由于可根據(jù)測試軟件本身特點可以修改config文件,形成可測試不同產(chǎn)品的程序,從而大幅度縮短項目開發(fā)周期。,正文,Labview是一種圖形化編程語言,比文本編程語言開發(fā)時間短。 在當今降低成本要求越來越高的時代,盡量將測試項目集成到一個程序已是大勢所趨。 為了縮短項目開發(fā)時間,盡量利用以前的代碼也不為是一個節(jié)約成本的好辦法。,測試結構,一般的測試程序可以被分為: 初始化 等待運行指令 進入測試 保存測試數(shù)據(jù) 退出測試,測試流程,初始化,等待運行指令,進入測試,保存數(shù)據(jù),退出測試,測試流程,初始化設備:測試之前往往要首先刷新整個ATE,使得所有的測試設備能夠符合被測品(DUT)的要求。 等待運行指令:當外圍準備好了方能進入測試,比如被測品有沒有安裝到位?保護措施有沒有打開?等等,而程序必須在此步等待操作者確認完畢后方能進入下步操作。,測試流程,進入測試:此時PC將按照測試計劃(testplan) 規(guī)定流程,逐步對被測品進行各項測試,要求的測試項往往很多,如按照串行順序測試將消耗很多工時,這時如將互不影響的測試項并行測試將大大減少工時。 保存數(shù)據(jù):為了方便統(tǒng)計分析,往往要求對測試數(shù)據(jù)進行保存,一般的情況是本機(local)要求一份,服務器要求一份。 退出測試:所有測試項完成且保存完數(shù)據(jù)后將ATE進入保護狀態(tài)以防止更換被測品帶來損傷。,基本測試程序架構,測試程序架構比較,根據(jù)以上的要求我們可以編寫相應的代碼 第一種:使用error-handle串行,這張圖想必看過清華出版軟件工程在labview中的應用的人都不會陌生,這個順序看起來很好,簡單而又準確,但是如果想添加一個新狀態(tài)或者改變一下這些狀態(tài)的順序,該怎么辦?這些恐怕要涉及到刪除源代碼以及移動VI。所以這種結構不適合開發(fā)一些大型的測試項目。,測試程序架構比較,第二種:狀態(tài)機 定義:狀態(tài)機是一種具有指定數(shù)目的狀態(tài)的概念機,在某個時刻僅處于一個狀態(tài)。狀態(tài)的轉變是由輸入事件引起的狀態(tài)變化的,作為輸入事件的相應,系統(tǒng)可能轉變到相同或不同的狀態(tài),而輸出事件可能是任意產(chǎn)生的。 就以軟件工程在labview中的應用書中的洗衣機為例。流程圖見下圖,測試程序架構比較,測試程序架構比較,上圖是洗衣機的分層結構圖,可選擇每個狀態(tài)和輸出條件。,測試程序架構比較,上圖顯示的就是狀態(tài)機基本結構,開始條件輸入進移位寄存器,然后將之傳送給case語句。,測試程序架構比較,測試程序架構比較,另一種狀態(tài)機,在實際使用中測試流程在測試前就已經(jīng)規(guī)定好了,一般使用數(shù)組這就不需要用到enum控件,使用delete from array.vi讓測試項逐次運行,如測試項出現(xiàn)異常,則選擇下面的測試項,上圖如出現(xiàn)異常則進入“end”測試項。,測試流程,Delete from array,選擇,測試程序架構比較,上圖所示的結構是很多ATS使用的結構,此結構比error-handle結構優(yōu)秀,特別是其中的錯誤處理功能。 但筆者在實際使用中,發(fā)現(xiàn)此結構還是有一定的缺陷: 第一,如果要新增test3測試項,只有打開mainvi增加代碼,雖然只是簡單的增加一個case結構但是也需要重新debug整個程序,其中就隱含了不確定因素增加了風險; 第二,如果test1和test2兩個測試項互不影響可以并行測試,但這種結構只能串行測試浪費了寶貴的測試時間。,測試程序架構比較,針對以上兩個問題筆者使用兩種方法解決 第一,使用vi-server避免修改mainvi,vi-server是labview獨有的技術,將代碼調(diào)入內(nèi)存執(zhí)行,執(zhí)行完成后釋放內(nèi)存,(具體可參考清華出版Labview高級程序設計)筆者將所有的testvi做成標準格式,每個測試項功能相當于狀態(tài)機中的一個case結構,這樣可以將testvi和mainvi分離,兩者之間使用 vi-server銜接,如果測試項修改,增加,刪除。只需要更改config文件,不需要更改mainvi,避免了風險的產(chǎn)生。代碼見下圖,測試程序架構比較,其中的LOG,FMT,result,error out各有用處,下一部分將對此詳細講解。,測試程序架構比較,上面是vi-server的前后面板,由此得知所有的testvi必須要有LOG,FMT,result,error out這幾個控件。,測試程序架構比較,下圖為一個標準的testvi樣板,必須要有FMT,LOG,result,error out幾個輸入項。把testvi統(tǒng)一成一個樣式,這樣可以方便mainvi的調(diào)用。,測試程序架構比較,第二;針對并行測試,我們可以創(chuàng)立兩個線程:masterthread;slavethread.,masterthread,slavethread,測試程序架構比較,上圖創(chuàng)建了兩個隊列masterthread;slavethread 把可以并行測試的測試項組成兩個字符串數(shù)組,寫入兩個隊列,由于labview是自動實現(xiàn)多線程的,所以可以達到并行測試目的。 必須將vi-server這個vi設置為“preallocate done for each instance”模式,具體方法為:filevi propertiesexecutionexecution reentrant.設置這個模式方能在兩個線程中同時調(diào)用此vi。否則只能一個線程釋放后另一線程才能使用此vi,喪失了并行測試的意義。,例程講解,筆者針對以上所述的內(nèi)容,創(chuàng)建了一套demo程序。,例程講解,例程講解,1,2,3,4,例程講解,上面兩幅是程序的前面板。 在ATS中,操作者只需要知道有沒有通過測試,所以前面板盡量少安排控件。 控件作用講解: 1.這是一個eunm控件,用來顯示有幾種testplan,并選擇相對應的testplan. 2.這是一個布爾控件,點擊后進入測試狀態(tài),注意此控件要選擇“l(fā)atch when release”機械狀態(tài)。,例程講解,3.3和4 都是TAB結構里面的一頁,3里面是一個string控件,用來顯示被測品當前狀態(tài);4是一個table控件,用來顯示被測品的測試狀態(tài)。,例程講解,1,2,3,例程講解,上圖為例程的代碼部分 1.這是程序的主體部分,使用的順序結構,其中包括初始化,等待指令,進入測試,保存數(shù)據(jù),退出測試。后面將對此詳細講解。 2.2和3 是兩個隊列,用來在前面板顯示數(shù)據(jù)并對之進行必要的處理(自動翻頁,錯誤顯示紅色,等等)他們分別對應前面板的string&table控件,這是采用NI推薦使用的生產(chǎn)消費模式,在主體產(chǎn)生的數(shù)據(jù)同時被寫進隊列將顯示部分獨立于其他部分。,例程講解,1,例程講解,上圖是主體程序的第一步,作用是初始化。因是demo程序,沒有刷新硬件部分,筆者只放了讀取testplan List的部分,將config里面所有文件名讀出并將他們顯示在enum控件。正常程序中要將config,testdata,mainvi,drivervi,這些文件夾會整體放入一個文件夾,盡量避免使用固定的文件夾如“c:test”等等,這樣方便保存修改的記錄也方便拷貝到其他電腦上出現(xiàn)找不到某個vi的情況。,例程講解,例程講解,上圖顯示的是程序的第二頁,內(nèi)容是等待指令。 筆者使用的是while循環(huán)套一個事件結構,只有操作者觸發(fā)布爾控件的值發(fā)生變化才會觸發(fā)這個事件,而事件結構內(nèi)有個true常量會輸入到while循環(huán),從而退出循環(huán)進入下一步。,例程講解,2,3,1,例程講解,上圖是進入測試部分: 1.讀取操作者選取的testplan名稱,并根據(jù)這個找到對應的config文件。 2.讀取config文件中testflow,將之轉化為字符串數(shù)組,并寫入testflow隊列中。 3.將string&table兩個控件清零。,例程講解,1,3,2,4,5,A,例程講解,上圖是本程序的重點部分 1.讀取上頁寫入testflow隊列的數(shù)據(jù),并根據(jù)此依次讀出主從線程的測試項。此功能依靠read sub config.vi 實現(xiàn)(見上圖的A點)具體代碼見下面的附件,讀出兩個線程的測試項同時將他們寫入masterthread&slavethread這兩個隊列中。,例程講解,2.從read sub config讀出的主從流程,將被寫入masterthread&slavethread兩個隊列,請注意3下面的子vi,他必須設為preallocate done for each instance模式,因為兩個線程可能同時調(diào)用這個vi。labview中如果隊列沒有元素了,那么dequeue element.vi將處在等待狀態(tài)無法正常退出,所以創(chuàng)建watch dog.vi的作用就是當隊列中沒有元素了,此隊列將被release,從而dequeue element.vi可以退出等待狀態(tài),進入程序的下一步。代碼見附件。,例程講解,例程講解,上圖是進入測試的最后部分,因為string&table控件處理需要時間,往往出現(xiàn)所有的測試項都已經(jīng)運行完畢但是數(shù)據(jù)處理并沒有完成,這時候就必須放置等待功能,每隔0.1s輪詢一次兩個隊列,如果里面有元素就繼續(xù)等待,沒有則rel
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電動重卡車電分離試點示范的實施步驟
- 土地置換合同協(xié)議書
- 廚房廚師用工協(xié)議書
- 商標企業(yè)合作協(xié)議書
- 壓花地坪分包協(xié)議書
- 商鋪質(zhì)量維護協(xié)議書
- 喂養(yǎng)動物捐款協(xié)議書
- 員工每日分紅協(xié)議書
- 醫(yī)院吊頂承包協(xié)議書
- 動物救助安置協(xié)議書
- 高級教師職稱面試講課答辯題目及答案
- 牛安全生產(chǎn)技術-牛常見心血管系統(tǒng)疾病的防治
- 2023新能源風電工程項目文檔全過程控制與檔案整理規(guī)定
- 口腔頜面頸部局部解剖-頸部局部解剖(口腔解剖生理學課件)
- (完整word版)口腔正畸案例分析
- 二級綜合醫(yī)院基本標準(2021年版)
- 鋁合金門窗工程技術規(guī)范
- 人教鄂版小學科學二年級下冊10《自然世界與人工世界》
- 北京市初中學業(yè)水平考試體育與健康知識模擬練習題(含答案)
- 上海市基準地價系數(shù)修正法操作指南
- 血小板血漿(PRP)課件
評論
0/150
提交評論