2013/10/20

Wait (ms) 與 Wait Until Next Multiple (ms) 有何不同


圖一

大多數的 LabVIEW 使用者對於延時元件 Wait (ms) 與 Wait Until Next ms Multiple 都不陌生,但對於這兩者的差別往往說不清楚,甚至有錯誤的理解。讓我們先來看以下的例子:



圖二

在上圖的程式中,註解1標示的區域是模擬一個執行時間為 50 ms 的主程式功能,註解2標示的是延時元件,此處以Wait (ms)等待200 ms。註解3的程式則是利用 Tick Count (ms) 實測每次迴圈執行所費的時間。由於在上圖中,Wait 等待的時間為 200 ms 大於主程式的 50 ms,for 迴圈每次執行完主程式的 50 ms後,都要等待額外的150 ms,補足到 200 ms 才會執行下一次迴圈運算。因此Wait元件的功能,顧名思義就是「等待」,等到一定的時間後,才進行下一次迴圈運算。實際的運算結果如下圖所示,每次都是不多不少正好是 200 ms。

2013/09/21

如何開啟多個相同的執行檔

在Windows內的許多應用程式,例如小畫家(Painter)、記事本(Notepad)、計算機(Calculator)...等,均可以同時重複開啟。但若是以 LabVIEW 封裝成的執行檔(executable),似乎同一時間內只能夠開啟一個,有沒有辦法可以改變這項設定呢?

做法其實很簡單,由 LabVIEW 封裝的執行檔,在同一層資料夾內都有另一個檔名相同,但副檔名是 .ini 的組態檔,如圖一所示:

圖一

2013/09/08

動態地讓Array Size增長 - Part 3

在前兩篇文章〈動態地讓Array Size增長 - Part 1〉與〈動態地讓Array Size增長 - Part 2〉中,介紹了如果不能夠事先知道陣列(array)大小,可以使用Shift Register + Build Array 來動態地讓陣列長大。這個技巧雖然簡潔易用,但有一個缺點:記憶體使用效率不佳
圖一:動態成長手法

以圖一為例,當我們使用Build Array元件將一個長度為5的1D Array與獨立元素結合成一個長度為6的1D Array時,LabVIEW除了原本長度為5的1D Array外,會需要再向作業系統請求一個新的記憶體位置,來存放長度為6的1D Array。並且把新的這個Array存入Shift Register內,並將舊的Array刪除;若使用動態成長手法讓Build Array執行了一萬次,那麼請求新記憶體位置與刪除舊記憶體位置的動作也要執行一萬次。


2013/09/07

動態地讓Array Size增長 - Part 2

在上一篇文章〈動態地讓Array Size增長 - Part 1〉中,介紹了如何利用shift register與Build Array的技巧讓一個矩陣能根據資料量動態地成長,而毋須事先配置;並且介紹了LabVIEW從2012版開始,提供的Conditional Tunnel功能,在某些場合可以替代shift register與Build Array來達到動態成長的功能。

這次我們繼續介紹利用shift register搭配Build Array的手法,來進行不同的應用:

圖一

在圖一這個應用中,程式須判斷使用者輸入的字串是否已經存在於系統資料庫中,如果沒有的話,便將這個字串加入資料庫中。解法請參考下圖:

2013/08/05

動態地讓Array Size增長 - Part 1

在撰寫VI時,若能預先得知計算過程所需陣列(array)的大小並事先進行配置,就運算效率而言是最好的作法。但在某些應用中並無法事先得知array大小,因此需要動態地讓array增長例如以下範例:



圖一

如圖一所示:如果要撰寫一個VI,比較輸入矩陣(Input Array)的各個元素是否大於指定數值(Assigned Value),並將大於的數值輸出,可以運用以下手法實作:

2013/07/28

在程式執行中設定當前的元件值程式為預設值

稍對LabVIEW熟悉的讀者都知道,在編寫VI時要將當下前置面板所有元件的值設為預設值,可以透過 Edit > Make current values default 達到。然而在程式執行過程中,這個功能無法使用。一般VI還可以暫時中止程式進行設定,但如果要封裝為執行檔就麻煩了;特別是封裝成執行檔後,更是麻煩。

一個解決方案,是利用File I/O將當前的元件值寫入一個文件,如:txt檔;在下次程式執行時,先載入該文件並設定所有元件的即可。以下是範例:


利用VI Snippet簡化範本儲存與檔案交換

LabVIEW自2009版以後提供了一個很方便的功能,叫做VI Snippet。此功能可以將LabVIEW程式,也就是VI,存成PNG格式的圖檔,藉由將圖檔拖曳進入Block Diagram中,即可將程式區塊加入當前開發的VI中:

舉例而言:

利用兩個 Tick Count (ms)加上For loopsequence structure 來做 benchmarking ,是相當常見的程式效能評估手法,用來計算程式運算所花的時間:



2013/07/20

MathScript讓你能夠在LabVIEW內使用MATLAB語法

LabVIEW有一個模組叫做MathScript RT Module,能夠支援m-file的語法(syntax);m-file雖然有多個軟體採用,但說穿了最主要的就是MALTAB® 。不同於LabVIEW原本就有的MATLAB script功能需要呼叫與開啟MATLAB® ,MathScript讓使用者毋須在開發端電腦上安裝MALTAB® 便能夠執行m-file。

MathScript利用LabVIEW容易製作使用者介面的優點,搭配文字型敘述可以簡潔呈現複雜數學公式的優勢,讓使用者可以在更短時間內開發出可讀性更高的程式碼。





2013/06/22

使用Quick Drop加快搜尋元件的速度


傳統在VI內加入元件與函式的方式,是按滑鼠右鍵叫出LabVIEW的元件面板或函式面板,再循分類目錄找到元件,將其拖曳到前置面板(front pantl)或是方塊流程圖(block diagram)上。


這種簡單的操作方式讓剛入門的使用者很容易學習,毋須記憶函式名稱,只要透過分類目錄與圖示就可以找到元件。但缺點是如果不知道函式所在目錄的話,便會搜尋不著;另一方面,對於有經驗的使用者來說,這種方式實在太慢:再怎麼熟悉元件的位置,要拖曳出一個元件一般還是需要1~2秒的時間。因此,LabVIEW從2009版開始,提供了一個很棒的功能叫作 Quick Drop 來加快搜尋元件的速度。