2012年3月25日 星期日

LabVIEW 入門

Labview-logo1

保持學習新事物是一個很好的習慣,過程中你可能會發現很多有趣的事。

過去我一路從 Pascal, C, 組合語言, Java, C#, Tcl, JavaScript 這些傳統文字型的程式語言學起,一直到 VB, Delphi, Visual Stduio 這些工具,所用的工具一直在變,而且新的工具也愈來愈先進。我用過 VB, Delphi, Visual Stduio,這些工具被稱為視覺化的程式開發環境,很方便也很好用,不管是在開發 GUI 圖形介面或是寫網路應用程式方面,透過開發工具所提供的元件盤,很多事情其實都在「拖、拉、點、放」之間就完成了,真的替工程師省下了不少時間。雖然如此,VB, Delphi, Visual Stduio 這些開發環境還稱不上是圖形化程式開發環境,因為做出了一個漂亮的圖形介面還不夠,你還是得寫一些程式碼讓軟體變得有靈魂,這樣軟體才是活的,不然程式只是個空殼。

最近我在自學 LabVIEW,才發現原來還有完全圖形化程式開發工具,不只是圖形人機介面,就連程式碼也是透過圖形化的接線與圖示就可以建構起來,寫程式就像是在畫流程圖一樣。說真的,LabVIEW 還挺有趣的。

我用零碎的時間學習 ,陸陸續續整理了一些 LabVIEW 學習心得,目前已經寫了 10 幾篇,這些都是很基礎的概念,我把它們稱為「LabVIEW 入門」。底下是這些筆記的列表:

  1. LabVIEW 簡介
  2. 安裝 LabVIEW
  3. 認識 LabVIEW 開發環境
  4. 設定你的 Controls Palette 和 Functions Palette
  5. Hello World in LabVIEW
  6. Data Flow Programming #1
  7. Data Flow Programming #2
  8. Data Flow Programming #3
  9. While Loops
  10. For Loops
  11. Shift Register
  12. For Loop and Shift Regsiter
  13. Case Structure
  14. SubVIs
  15. Waveform Chart
  16. Waveform Graph
  17. Array
  18. Loop Tunnels

2012年3月22日 星期四

Loop Tunnels

這篇我們將介紹 LabVIEW 的 Loop Tunnels。

在 LabVIEW,Loop Tunnel 是用來輸入資料到迴圈或者是取得迴圈輸出的一個功能。底下我們用個簡單的例子來介紹如何建立 Loop Tunnel。

我們來看底下這支程式,在這支程式 Block Diagram 上有一個 For Loop,而 Front Panel 上則有 Loop Count 和 Loop Iteration,Loop Count 的用途是讓使用者指定迴圈要執行的次數,而 Loop Iteration 則用來顯示迴圈目前已執行的次數:

2012-02-05 12h51_07 2012-02-05 12h50_45

記得 LabVIEW 的迴圈 index 是從 0 開始數起的。所以,如果我們把 Loop Count 設成 5,當我們按 Run 鈕執行這支程式,在 For Loop 執行完畢後,Loop Iteration 上就會顯示 4:

2012-02-05 12h48_09

2012年3月19日 星期一

Array

這篇我們將介紹 LabVIEW 的 Array。

Array 是一個相同資料型態的集合。在 LabVIEW 裏,建立 Array 是很簡單的一件事。底下我們用個簡單的例子來介紹如何建立 Array。

建立 Array

當你在 Block Diagram 上按滑鼠右鍵,打開 Functions Palette > Array, Matrix & Cluster,你會看到第一個選項就是 Array,像下圖這樣,把它拖曳放到 Block Diagram 上就可以建立一個 Array:

image 

底下我們建立了兩個 Array,右手邊的圖是 Block Diagram:

2012-02-02 22h21_12 2012-02-02 22h21_36

2012年3月16日 星期五

Waveform Graph

承上篇,在這篇我們將介紹 Graph。

上篇,我們已經看過 Chart 的範例程式:

2012013023h05_43_thumb

當我們按 Run 鈕執行程式,就會看到溫度值會輸入到 Chart 上,而且當我們滑動 Slide 時 Chart 上的溫度曲線也會隨著時間變化。這支程式的 Block Diagram 如下:

2012年3月13日 星期二

Waveform Chart

這篇我們將介紹如何在 LabVIEW 裏建立 Waveform Chart。

當你需要用圖形來看一些數據資料時,Chart 和 Graph 會是很方便的工具。底下我們從一個很簡單的例子來認識 Waveform Chart 和 Graph。本篇將先介紹 Chart,下一篇接著介紹 Graph。

我們來看底下這支程式:

image 2012-01-30 22h30_54

這支程式沒有什麼特別,只是可以讓我們滑動溫度指示器。假如要表示單一個時間點的溫度,這支程式很夠用,不過如果我們想看某一段時間的溫度,那麼就會需要用到 Chart 和 Graph。底下就以這個例子來介紹 Chart 和 Graph 的用法。

註:這支程式 Front Panel 上用到一個 Numeric > Vertical Pointer Slide,而 Block Diagram 上則只有一個 While Loop 以及一個 Wait (ms) 的 Timing function 讓迴圈每 100 ms 跑一次避免迴圈佔用太多 CPU 資源。

2012年3月10日 星期六

SubVIs

這篇我們將介紹 LabVIEW 的 SubVIs。

SubVI 是一個簡化 Block Diagram 的方法。SubVI 會讓程式碼變得模組化,所以我們就可以在其它 VI 程式裏重覆使用一段程式碼。我們從一個簡單的例子來學習建立 SubVI。

底下是一個簡單的 LabVIEW 程式:

 2012-01-29 21h47_49 2012-01-29 21h48_46

 

這支程式可以計算三角形的面積。如果你輸入底為 10 高為 5,這支程式就會算出三角形面積,得到面積為 25。

2012年3月7日 星期三

Case Structure

在這篇我們將介紹 LabVIEW 的 Case Structure。

如果你學過其它程式語言,你可能已經熟悉 If-Then-Else 或 Switch 這些條件結構,這些結構是用來選擇要執行哪一段程式碼,在 LabVIEW 裏要做同樣的事是用叫一個作 Case Structure 的結構。底下我們將說明如何使用 Case Structure。

認識 Case Structure

我們來看底下這支程式:

2012-01-29 15h34_09 

這支程式是一個很簡單的程式,它可以讓使用者利用 Button 來控制 LED 的開關。如下圖左,當 Button 被按下時 LED 燈就會打開;而當你再按一下 Button,LED 燈就會變成關閉的狀態,如下圖右:

2012年3月4日 星期日

For Loop and Shift Regsiter

在這篇,我們將介紹如何利用 LabVIEW 的 For Loop 和 Shift Register 寫一支從 1 加到 10 的程式。

首先,打開 LabVIEW,建立一個 Blank VI,然後在 Block Diagram 上按滑鼠右鍵打開 Functions Palette,接著點選 Structures > For Loop 在 Block Diagram 上拖曳畫出一個 For Loop:

 image_thumb5 

由於我們要計算 1 加到 10 的總合,Loop Count 是 10,所以我們要把 For Loop 的 Loop Count 設定為 10,先在 Count (N) Terminal 上按右鍵,點選 Create Constatn:

2012年3月1日 星期四

Shift Register

這篇我們將介紹 LabVIEW 的 Shift Register。

在 LabVIEW,Shift Register 可以加到 While Loop 和 For Loop 中。Shift Register 提供一個在迴圈迭代 (Loop Iteration) 之間傳遞資料的方法。讓我們從一個簡單的例子來認識 Shift Register。

認識 Shift Register

底下是一個簡單的 While Loop,迴圈裏只有一個 Wait (ms) 等待 1000 ms 的 function:

2012-01-29 01h03_25 2012-01-29 01h03_55

要建立 Shift Register,方法是在 Loop 的邊框上按右鍵,然後點選 Add Shift Register: