通常一個VI若包含三、四十個以上的subVI(不包含LabVIEW本身在Functions中提供的VI)時,就可算是一個中大型的軟體計劃(software project)了。雖然比起軟體工程中的一些作業環境軟體(如Windows系列)或大型應用軟體(如Word、Excel)等仍算是小工程,但其複雜性亦在一定程度之上,若沒有事先想好在撰寫程式時的一些規劃與方法,想要完成這類中大型的軟體絕對不是一件簡單的事。尤其這類軟體通常不是由一個人,而是由一個團隊所共同完成的,因此整個軟體的結構,就要能讓團隊中的每一成員都能清楚的了解,而且要夠簡單,才算是好的軟體結構。以下將參考由Rick Bitter等人所著”LabVIEW Advanced rogramming Techniques”,中之第4章的部分內容,介紹所謂軟體計劃中的三層式結構(the Three-Tiered Structure)的概念及其優點。 fficeffice" />
需要軟體結構的主要原因,是當軟體人員發展軟體到某一階段時,若沒有計劃或無意的創造了許多subVI,但各subVI之間有許多部分其實是重複撰寫的;或各VI相互間呼叫時沒有一定的紀律,使得在VI Hierarchy中所看到的各VI間的連線是錯綜複雜,像個盤絲洞一般,這將可能會使多人發展的軟體計劃增加所耗費的時間和可能出錯的機會、減低程式的效率,以及增加debugging時的困難。為了改善上述的情形,所以要提倡三層式結構的概念。
三層式結構由上而下依次為:Main Level、Test Level和Driver Level,這種結構是由經驗中得來的,在多人發展的軟體計劃中顯得簡單明瞭,當大家都能遵照這個結構來寫程式時,這種結構就可以充分顯現出它的優點。那這三個階層到底如何區別呢?以通俗的比喻來說,假設我們如果要組織一個籃球隊參加全國比賽,每個球員要練習基本動作及體能,如何跑、如何跳、手腳該如何放置才是正確位置等,這就相當於系統中Driver Level所做的事情;接下來,將各球員組合練習某一套防守或進攻的戰術,如二三區域聯防、人盯人防守,每個人該在什麼位置才能正確接應等,則像是Test Level中一項項的test了;而最後比賽時,場上的戰略運用,包括何時要用什麼戰術組合、如何更換球員、何時喊暫停、終場前是不是要故意犯規或採拖延戰術等等,對照過來,就像是在Main Level中,如何將Test Level中各test做最有效能的整合與排列組合等的工作。
簡單來說,Driver Level包含了程式與所有儀器、元件、馬達或其它應用軟體的溝通、控制等較低階的事情,使其可完成某一項基本的動作,例如初始化、馬達走到home位置、雷射以設定的能量及頻率發射光束‧‧‧等。可注意到我們在這邊所說的driver,並不像一般在別處所稱驅動程式的那種driver那麼低階,真正最低階的工作還是要有現成的VI來幫忙才行;在Test Level中,則是如何連接各個Driver VI的基本動作,使可做完出一套連續、有意義的流程,來執行某項測試,例如讓手臂由A點走到B點,下降夾取一個螺絲,再走至C點裝到某面板上,然後回到A點等待,類似這樣控制一個流程的進行,便是Test VI的工作內容;Main Level則包含了使用者介面(User Interface)或稱人機介面(Man-Machine Interface) ,目的是整合各項測試和例外處理(Exception Handling)等,將它們以適當的順序及流程組合,很容易地讓使用者操作。
當一個軟體計劃嚴格的遵照上述的三層結構來撰寫時,最大的優點是可使程式碼的再使用(code reuse)達到最大化,在不同的Test VI中,可重複使用相同的Driver VI;而在不同程式的Main Level中,又可重複使用相同的Test VI,這將使得程式維護或修改的時間與精力大幅減少;同時當我們已有一個程式的樣板(template)後,可增加軟體版本更新的速度。另一個很重要的好處是,當我們在撰寫某一個level中的程式時,並不需要關心在另一個level中有什麼其它的程式是如何執行的,而只要專注在自己的這個level的程式上就可以了,這使得由團隊來共同完成一個大型計劃的工作變得容易許多。
以下將依Driver Level、Test Level、Main Level的順序,來介紹在各level寫程式時的原則與心得﹔(1) Driver Level﹔通常在Driver Level所寫的程式是比較低階的,其功能是把一些最基本的I/O動作按某一順序連接起來,形成基本動作,大致分為三大類﹔a. 組態(configuration):開啟或關閉與儀器的連結、將儀器初始化及設定組態等。b. 量測(measurement):由儀器讀出測量值或特定的資料。c. 動作/狀態(action/status):一個流程的啟始或結束動作、檢查錯誤等。
簡單來講,Driver Level的內容是藉由一些介面(卡),經digital I/O或analog I/O由儀器取得上一些sensor的電壓值,或傳出一些電壓值來控制機器、儀器或馬達等的組態與動作,使得儀器或機器能夠正確設定及做出一些基本的動作。另外程式與儀器間的資料傳遞或在自身電腦的存取動作,規定檔案的格式以及存取等等,也都屬於Driver Level中應該完成的事項。但是真正最低階的工作還是需要NI提供的VI來進行,我們所寫的Driver VI仍是屬於較高階的。
|