Download presentation
Presentation is loading. Please wait.
1
圖控程式設計-LabVIEW 老師:唐永新 教授 助教:洪德一 許為捷 郭東協 蘇培嘉
2
前言-1 本教材一共分為六章,每一章節皆以漸進的方式編著。
第一單元介紹LabVIEW之操作環境,包含人機介面、程式方塊區、快速鍵及此軟體介面上相關操作的介紹。 第二單元談到程式設計上的基礎應用,包含控制單元、顯示單元、布林函數的應用等。 第三單元介紹了迴圈及架構的說明及其應用,包含For迴圈、While迴圈、Case Structures、Sequence Structures、Event Structures的應用。
3
前言-2 第四單元介紹陣列與叢集的各種運用。 第五單元教各位使用波形圖、字串及檔案I/O等。
第六單元教各位讀者使用Project進行專案程式設計與SubVI模組化程式設計。 在本教材中主要是將LabVIEW 8的系統與功能,以淺顯易懂的文字陳述方式配合軟體介面中之圖片操作給各位讀者閱讀,以減少讀者對於研習此軟體的摸索時間。為使讀者更能加強體會各章節中介紹的各icon運用之觀念,每單元皆有範例及課後練習來配合觀念陳述,來加深讀者對軟體中各種功能的靈活運用。
4
目錄 第一單元 LabVIEW操作環境介紹 第二單元 VI程式的撰寫 第三單元 迴圈與架構 第四單元 陣列與資料叢集
第五單元 波形圖表與字串 第六單元 專案開發
5
第一單元 LabVIEW操作環境介紹
6
單元目標 1.1 認識LabVIEW 1.1.1 圖形化語言(G Language) 1.1.2 虛擬儀器(VI) 1.1.3 開啟LabVIEW 1.2 Geting Started 環境介紹 1.3 善用Find Examples 1.4 人機介面(Front Panel)環境操作 1.4.1 前置面板視窗(Front Panel) 1.4.2 工具面板(Tool Palette) 1.4.3 程式方塊區(Block Diagram) 1.5 快速鍵的使用 1.6 使用Help了解功能 課後作業1.1 課後作業1.2
7
單元目標 1.讓同學了解什麼是LabVIEW、G Language與VI 2.熟悉LabVIEW的程式編輯環境
3.讓同學能善用快捷鍵、HELP與Find Examples
8
1.1認識LabVIEW-1 隨著科技的進步,National Instruments的LabVIEW在多種工程的應用和相關產業中,已經廣泛的被使用。LabVIEW軟體所使用的直覺式圖形程式設計語言,適用於自動化量測和控制系統;使用圖形化資料流語言以及程式方塊圖,能夠自然地呈現資料流,且將資料對應到使用者介面控制。此外,使用者也可輕鬆地檢視並修改資料,或控制輸出 。對於初接觸程式設計的新手,LabVIEW Express技術能將一般抽象的量測和自動化系統轉換為更高階的直覺式 VI。透過了此項技術使許多非擅長程式設計的使用者利用 LabVIEW 軟體快速且輕鬆地開發出自動化系統。
9
1.1認識LabVIEW-2 LabVIEW 為有經驗的程式設計者提供如 C 或 BASIC 傳統程式設計語言的效能、彈性,和相容性。事實上,就如傳統的程式設計語言,完整的 LabVIEW 程式設計語言亦包括變量、資料類型、物件、迴圈、序列結構,以及錯誤處理架構。而且透過 LabVIEW,您可以重新使用 DLLs 或共用函式庫等舊版程式碼套件,並與使用 ActiveX、TCP,及其他標準技術的軟體進行整合。
10
1.1.1圖形化語言 LabVIEW是一種圖形化的語言,是以圖形與線的連接方式來撰寫程式,故又可稱為G Language。LabVIEW提供了相當完整的應用模組、涵式庫與人機界面元件,在這個圖形化系統設計平台上,我們可以透過相關控制卡與擷取卡進行訊號擷取、影像擷取、運動控制、數位輸出入…等程式設計。
11
1.1.2虛擬儀器-1 美國國家儀器公司NI(National Instruments)提出了虛擬測量儀器Virtual Instrument(VI)概念,取代了以傳統儀器領域,而使用電腦和網路來與儀器技術結合起來的重大變革,開創了以軟體當作儀器的時代。
12
1.1.2虛擬儀器-2 電腦可以視作任何儀表的引擎,來進行整合、控制、操作的動作,虛擬儀器的發展便是如此。虛擬儀器是一種概念儀器,至今業界還沒有一個明確的國際標準和定義。一般認為,所謂的虛擬儀器,實際上就是一種基於電腦的自動化測試儀器系統,因為它們的外觀和操作方式模仿實體傳統儀器,ex:示波器、計量表等。而虛擬儀器的優點主要是能夠提升性能及降低成本,與電腦技術結合開拓更多的功能、更具靈活性,並透過軟體模組的技術來使其達到模組化的環境。由於虛擬儀器的設備利用率高、維修費用低,所以能夠獲得較高的經濟效益,這是傳統的儀器無所比擬的。
13
1.1.3開啟LabVIEW-1 我們可以在開始\所有程式\National Instruments LabVIEW 8.5.1中開啟LabVIEW 。
14
1.1.3開啟LabVIEW-2 當按下National Instruments LabVIEW 8.5.1時,可看到登入LabVIEW的起動畫面 。
15
1.1.3開啟LabVIEW-3 過了一段時間後可看到系統的啟動完成的畫面,此畫面可供使用者選擇開啟一個新的空白VI、專案或開起舊檔…等模式 。
16
1.2 Getting Stated環境介紹-1 一、File功能視窗有分成以下兩個小對話框:
(New)可看到New的對話框所提供有以下內容: Blank VI 可開啟一個新的空白VI Empty Project 可開啟一個新的空白專案
17
1.2 Getting Stated環境介紹-2 (Open)可看到Open的對話框所提供有以下內容:
此項對話框主要是提供使用者可以直接開啟之前所存過 的程式或一些範例應用程式。
18
1.2 Getting Stated環境介紹-3 Resource功能視窗,主要提供使用者能在此視窗下
能學到LabVIEW更新、LabVIEW相關知識、網路資源、範 例等,讓使用者能自我學習。
19
1.2 Getting Stated環境介紹-4 接下來我們要開始建立一個新的VI,可以有兩種方式:
1.利用在系統選擇模式視窗裡的New小對話框的Blank VI 2.利用檔案(File)的New VI來建立
20
1.2 Getting Stated環境介紹-5 在開啟一新的空白VI後,會看到程式區塊與人機面板上下重疊,這樣子在設計上會不方便,此時我們可利用快捷鍵Ctrl-T(稍後第1.5節會做詳細介紹),使視窗左右並行。
21
1.3善用Find Examples-1 在程式設計時若使用到的函數不知道其撰寫方法時,我們可利用LabVIEW提供的Find Examples功能,搜尋出類似的範例,透過範例即可快速的了解其函數之撰寫方式。其位置於程式方塊區或人機介面視窗用Help->Finder Examples …來產生NI Example Finder視窗,產生的視窗,如下圖所示。
22
1.3善用Find Examples-2 我們以搜尋Sine來進行實例操作。搜尋的方法是在
Search選單下鍵入Sine後點擊Search,再點選右方搜尋 的結果。
23
1.4人機介面(Front Panel)與程式方塊區(Block Diagram)環境操作-1
當我們開啟上一個單元所搜尋到的範例程式,會跳出人機介面視窗,而程式區塊視窗還尚未開啟,我們可利用快捷鍵Ctrl-T(稍後第1.5節會做詳細介紹)使式窗並排。圖中的左圖為人機介面,右圖為程式方塊。
24
1.4.1前置面板視窗(Front Panel)-1 在人機介面的視窗會看到工具列,利用此下拉式工具列
使用者可以做出執行、排列、縮放、文字輔助說明等功能, 將在下面做詳細的介紹: 1.執行鍵:按此鍵可讓程式執行。 在按執行鍵後,程式無誤會顯示如下。 程式有誤會顯示如下,應做錯誤排除才能使程式正常。
25
1.4.1前置面板視窗(Front Panel)-2 2.連續執行鍵:按此鍵可讓程式重複且連續的執行。 程式為連續執行的時候此鍵會如下圖。
3.停止鍵:程式強制停止。
26
1.4.1前置面板視窗(Front Panel)-3 4.暫停鍵:按此鍵可暫時將程式停止,若按第2次可使程式繼續執行。
5.字型格式選擇鍵:使用者可做字型變更,如字型的大小、結構、型式及顏色等。
27
1.4.1前置面板視窗(Front Panel)-3 6.排列: 可對物件進行排列,可增加程式的美觀。
6.1物件排列鍵:可做物件邊緣或中心點上下,左右的對齊。 6.2物件間距鍵:可對物件依可種間距類型來排列。
28
1.4.2工具面板(Tool Palette)-1 工具面板(Tool Palette):主要給使用者在做修改、建立、除錯用,可由2種方式來產生它,可在人機介面及程式方塊視窗的View->Tools Palette來產生或利用Shift+滑鼠右鍵。
29
1.4.2工具面板(Tool Palette)-2 1.自動選擇鍵:程式自動判斷應該用何種功能進行程式修改 或建立所示。
2.操作修改:可調整輸入、輸出值,也可調整開關、旋鈕或 數值。 3.指標定位:可做物件的移動、放大及縮小。
30
1.4.2工具面板(Tool Palette)-3 4.標示:編輯標示的文字。 5.連線:用在程式方塊視窗的物件節點之間的連結。
6.物件彈出式選單:顯示物件的彈出式功能表。 7.捲軸:可用此鍵將超出視窗範圍的物件拉回。
31
1.4.2工具面板(Tool Palette)-4 8.中斷點設置:可做程式的中斷,常用在迴圈除錯的時候。
9.探針:可在執行時察看各變數的數值。 10.顏色複製:可做其他物件顏色的複製。 11.著色工具:可在物件塗色。
32
1.4.3程式方塊區(Block Diagram) -1
在程式方塊區看到與人機介面相似的工具列,部分的功能已在1.4.1中有詳細的描述,本單元將介紹的主要有Execution Highlighting Button、Retain Wire Values Button、Step Function Buttons三項功能。 1.Execution Highlighting Button(標示執行):以較慢速度觀察資料。
33
1.4.3程式方塊區(Block Diagram) -2
2.Retain Wire Values Button (保存線資料):暫時記憶線的資料輸出內容。 3.Step Function Buttons (保存線資料): 3.1單步進入:單步讀取程式(會讀入Subvi) 。 3.2單步跨越:不會讀Subvi。 3.3單步離開:跳越到下一個結點。
34
1.5快速鍵的使用 Ctrl-T人機介面與程式方塊視窗並排。 Ctrl-E or Ctrl-Tab人機介面與程式方塊視窗之間的切換。
Ctrl-H開啟輔助視窗。 Ctrl-B自動切除斷線的部份。
35
1.5快速鍵的使用-1 1.6使用Help了解功能 在此節將介紹Context Help的視窗,我們可運用快速件Ctrl+H開啟Context Help的視窗,我們將滑鼠游標移動至不同的icon上,Context Help的視窗內容會隨之改變。
36
1.5快速鍵的使用-2 若我們想更詳細的了解該icon的內容,可在點擊Detailed help會有詳細的說明。
37
課後作業 課後作業1.1 請略述LabVIEW程式撰寫軟體的特色? 課後作業1.2
請大略說出在LabVIEW裡面VI指的是什麼?它有何功用?
38
第二單元 VI程式的撰寫
39
單元目標 2.1 程式設計的基礎 2.1.1 輸入、邏輯運算與輸出 認識LabVIEW的輸入、邏輯運算與輸出 2.2 控制單元(Control)與顯示單元(Indicator) 2.2.1 數值(Numeric) 2.2.2 布林(Boolean) 2.2.3 字串(string) 2.2.4 表單(Rings) 常數(Constant)的快速轉換 2.2.6 改變文字的大小、字型樣式、對齊、 顏色、與字型
40
2.3 在程式方塊區建立邏輯運算核心 2.3.1 基本的數學運算 2.3.2 基本的布林判斷 2.4 接線 2.4.1 學習接線 2.4.2 斷線 2.4.3 畫線小技巧 2.5 執行VI程式 2.5.1 資料流的觀念(Dataflow Programming) 2.5.2 區域變數(Local Variable) 2.5.3 常見的錯誤訊息與錯誤排除 2.5.4 Error List介紹 課後作業2.1 課後作業2.2
41
單元目標 1.了解VI程式設計所需要的基礎觀念 2.認識常用的控制單元(Control)與顯示單元(Indicator)
3.學會接線與接線相關技巧 4.學會執行程式與錯誤排除
42
2.1程式設計的基礎 在VI程式撰寫之前我們先要學習基本的程式設計觀念,了解程式設計時輸入、輸出的種類,並認識LabVIEW的輸入、邏輯運算與輸出。請沒有程式設計基礎的同學務必在此單元多下功夫,能對未來撰寫程式上有很大的幫助。
43
2.1.1輸入、邏輯運算與輸出 程式設計的最基本架構不外乎是由輸入、邏輯運算與輸 出所組成。我們必須根據專案需求進行輸入與輸出的定義並
確認其種類,最後在進行核心邏輯程式的撰寫。
44
2.1.2認識LabVIEW的輸入、邏輯運算 與輸出
在LabVIEW的程式設計環境裡具有虛擬儀表的程式撰寫特色,我們可以在人機介面設計開關、表單、旋鈕、LED燈、數值顯示、波型顯示等功能;在式方塊區進行核心邏輯程式撰寫。
45
2.2控制單元(Control)與顯示單元(Indicator)
在上一個單元裡,我們有了程式設計的基本概念。在本單元我們實際的建立控制單元與顯示單元,以下我們將介紹常式撰寫上常用的控制與顯示元件:數值(Numeric)、布林(Boolean)、字串(string)、表單(Rings)、路徑(Path)。請同學務必確實的練習每一個控制與顯示元件並熟悉其位置。
46
2.2.1數值(Numeric)-1 數值(Numeric)主要做為數字的輸入控制與顯示,其位置於人機介面按滑鼠右鍵-Modem/Numeric。
47
2.2.1數值(Numeric)-2 點選後放置人機介面,如下圖所示。 放置後在程式方塊區會出現相對應的控制元件,如下圖所示。
48
2.2.2布林(Boolean)-1 布林(Boolean)主要做為TRUE與FALSE的輸入控制與顯示,其位置於人機介面按滑鼠右鍵-Modem/Boolean 。
49
2.2.2布林(Boolean)-2 點選後放置人機介面,如下圖所示。 放置後在程式方塊區會出現相對應的控制元件,如下圖所示。
50
2.2.2布林(Boolean)-3 布林(Boolean)在控制輸入方 面,LabVIEW提供了六種按鈕的機 械動做設定,分別是:
1.Switch When Pressed 2.Switch When Released 3.Switch Until Relessed 4.Latch When Pressed 5.Latch When Released 6.Latch Until Relessed
51
2.2.3字串(String)與路徑(Path)-1
字串(string)主要做為文字的輸入控制與顯示;路徑(Path)主要做為路徑的輸入控制與顯示,其位置於人機介面按滑鼠右鍵-Modem/String&Path。
52
2.2.3字串(String)與路徑(Path)-2
點選後放置人機介面,如下圖所示。 放置後在程式方塊區會出現相對應的控制元件,如下圖所示。
53
2.2.4表單(Rings)-1 表單(Rings)主要做為文字的輸入控制與顯示,其位置於
人機介面按滑鼠右鍵-Modem/Ring&Enum 。
54
2.2.4表單(Rings)-2 點選後放置人機介面,如下圖所示。 放置後在程式方塊區會出現相對應的控制元件,如下圖所示。
55
2.2.4表單(Rings)-3 表單(Rings)內容的產生需在Ring的控制元件或顯示元件上按右鍵選擇Edit Items,會彈出Items的編輯視窗,點選Insert增加Item項目,並可輸入相關文字。
56
2.2.5常數(Constant)的快速轉換-1 在前面2.2.1~2.2.4單元我們學會了如何建立Control、Indicator的元件,但在許多程式撰寫的場合中,常會需要使用到常數(Constant)這個具有恆定不變特性的輸入元件。因此,在本單元會教導同學快速的將Control、Indicator元件轉換成常數(Constant)。
57
2.2.5常數(Constant)的快速轉換-2 首先我們先建立出前面2.2.1~2.2.4常用的Control元件。
在程示方塊區以滑鼠在元件上點擊右鍵 選擇Change to constant。
58
2.2.6改變文字的大小、字型樣式、 對齊、顏色、與字型-1
在人機介面的設計方面,本單元將會說明如何改變文 字的大小、字型樣式、對齊、顏色、與字型。 首先Shift+滑鼠右鍵選擇文字點選功能後,再直接點 選欲改變的文字。
59
2.2.6改變文字的大小、字型樣式、 對齊、顏色、與字型-2
點選工具列上的Text Setings,如下圖所示。 出現下拉式選單,大小、字型樣式、對齊、顏色、與字型 之設定,如下圖所示。 文字的尺寸 文字的字型 文字的字型樣式 文字的顏色 文字的對齊
60
2.3常用的邏輯運算核心元件 在上個單元中我們練習過LabVIEW常用的控制單元(Control)與顯示單元(Indicator),而在這個單元裡,我們將進一步的去認識邏輯運算核心裡基本的數學運算與布林判斷。
61
2.3.1基本的數學運算-1 在學習撰寫邏輯運算核心之前,我們必須先熟悉基本的數學
運算,其位置於程式方塊區按滑鼠右鍵-Programming/Numeric。
62
2.3.1基本的數學運算-2 常用的數學運算點選後放置於程式方塊區,如下圖所示。
除了上述的的數學運算功能外,數學上常用的亂數、小數點進位或捨去與絕對值也都被放置於Programming/Numeric頁面上,以下我們就針對這些功能做介紹。
63
2.3.2基本的布林判斷-1 撰寫邏輯運算核心時除了數學運算之外,布林判斷的使 用也非常的重要。以下將介紹六種布林判斷的判斷邏輯。
64
2.3.2基本的布林判斷-2
65
2.4接線 在上個單元裡,我們認識了許多常用的邏輯運算核心元 件。在本單元我們將教導同學如何將這些元件連接起來,且
學習接線上的許多小技巧,以增進在撰寫程式上的效率。
66
2.4.1學習接線-1 當我們在人機界面加入了輸出或輸入的元件後,可以根 據程式的需求,在程式方塊區建立核心運算邏輯,緊接著我
們可以開始進入了接線的階段。首先我們先介紹接線的兩種 方法:
67
2.4.1學習接線-2 1.自動感應接線: 首先設定好工具面板為自動選項,如下圖所示。 在將滑鼠移至接線點,靠近接線點時會自動變換成接線捲軸
的圖示,如下圖所示。
68
2.4.1學習接線-3 點擊滑鼠左鍵即可開始接線,在將滑鼠移至另一接點, 即可完成接線的動作,如下圖所示。
69
2.4.2斷線 2.選擇手動接線: 當您在接線時,誤將不同的輸出、輸入格式或內容接在一 起,則會出現斷線的情形,如下圖所示。
在您將錯誤的接線更正前,程式的執行鍵將會出現無法執行 的圖示,如下圖所示。 您可以選取線段後刪除或使用快速鍵<Ctrl+B>清除所有斷 線。
70
2.4.3畫線小技巧-1 1.接線時轉彎: 在接線時的第一次轉彎可直接透過移動滑鼠達成,如有二次以
上轉彎時則須在轉彎處點擊滑鼠左鍵即可將線段轉彎。 2.取消畫線: 接線時若想取消接線則只需點擊滑鼠右鍵或鍵盤上ESC即可取 消掉。 3.移動線: 將滑鼠靠近線段上先會出現接線捲軸的圖示,再繼續移動至線 段上方會出現接定位箭頭的圖示,點選後即可直接移動線或以 鍵盤上下左右鍵移動線。
71
2.4.3畫線小技巧-2 4.連線至可視範圍外的區域: 點選接線後將滑鼠移至邊框捲軸上,畫面會逐漸移動至可視
範圍之外,即可完成可視範圍外區域的接線,如下圖所示。
72
2.4.3畫線小技巧-3 5.快速產生預設的常數、控制元件、顯示元件:
我們可以在icon上的接點或線段上點擊滑鼠右鍵,選擇Creat/Constant or control or indicator,即可快速產生預設的常數、控制元件、顯示元件,如下圖所示。
73
2.5執行VI程式 在上個單元完成接線後,緊接著我們就可以進入到撰寫程式的最後一個步驟-執行程式。在本單元中,我們除了執行所撰寫的程式之外,還會介紹撰寫LabVIEW程式所需的資料流觀念,以及閱讀錯誤訊息、排除錯誤的方式。
74
2.5.1資料流的觀念(Dataflow Programming)-1
要了解資料流的觀念,首先我們要先執行程式 與開啟Execution Highlighting Button 。
75
2.5.1資料流的觀念(Dataflow Programming)-2
在程式執行後我們能發現下列資料流的觀念: 1.程式執行後所有的輸入元件同時將資料流入運算元件,不 會因擺放的位置不同而有先後流入的情形。 2.資料流入運算元件後由於處理器運算的關係,會逐一的將 運算結果輸出,輸出的順序由後建立的控制元件先輸出運 算結果;先建立的輸入元件最後輸出運算結果。 3.資料的流動方向皆為由左向右流動。
76
2.5.2區域變數(Local Variable)-1
本單元所建立的輸出或輸入元件,在某些程式我 們可以運用區域變數來達到簡化接線的複雜度。以下 列的範例來看,兩個輸入元件經過運算後要輸出四個 輸出元件,我們很難發現減法的輸入接點接反了。
77
2.5.2區域變數(Local Variable)-2
我們可以藉由分身來簡化接線並降低接線上的錯 誤,如下圖所示。
78
2.5.2區域變數(Local Variable)-3
分身的作法非常簡單,只需在輸出或輸入單元上 點及滑鼠右鍵Create/Local Variable 即可產生一分 身出來,如下圖所示。
79
2.5.2區域變數(Local Variable)-4
分身產生後我們可依照程式所需自行去變更分身為讀出 性質或寫入性質,其更改的方法是在創造的分身上點擊滑鼠 右鍵,選擇Change To Write或 Change To Read,如下圖所 示。
80
2.5.3常見的錯誤訊息與錯誤排除-1 進入執行程式的階段後,緊接著就是最重要的閱讀錯誤訊
息與錯誤排除。以下將會介紹常見的錯誤訊息與排除方式。 1-1.輸出或輸入錯誤的數值資料格式 數值格式的選用錯誤有時候可能不會影響程式的執行,但LabVIEW還是會以紅點的錯誤訊息提醒您,如下圖所示。
81
2.5.3常見的錯誤訊息與錯誤排除-2 1-2.輸出或輸入錯誤的數值資料格式的錯誤排除
上述的案例中,輸入的數值格式為DBL,但輸出的數值格式為I32。故我們僅需在該輸出元件上滑鼠點擊右鍵,選擇Representation/Double Precision,如右圖所示。
82
2.5.3常見的錯誤訊息與錯誤排除-3 2-1.兩個以上的布林控制元件或輸出同時接到一個布林輸出
這種情形常發生在有兩個以上的布林控制元件或輸出,想要觸發或控制一個布林輸出,如下圖所示。此為初學者常犯在接線上觀念的錯誤。
83
2.5.3常見的錯誤訊息與錯誤排除-4 2-2.兩個以上的布林控制元件或輸出同時接到一個布林輸出的錯誤排除
上述的案例中,如要有兩個以上的布林控制元件或輸出,想要觸發或控制一個布林輸出。我們可以運用Compound Arithmetic,以Or布林判斷使三個布林控制可以接到一個布林輸出,如下圖所示。
84
2.5.4 Error List-1 除了上一個單元常見的錯誤訊息外,可能發生錯誤情形難以預期,因此,本單元會介紹Error List來快速搜尋出錯誤的地方。我們可以利用快速鍵Ctrl+L將Error List視窗開啟,如下圖所示。
85
2.5.4 Error List-2 在Error List視窗中會有三個文字顯示區,分別為
Items with errors、errors and warnings、Details。 Items with errors文字顯示區:主要顯示錯誤的檔案名稱。 errors and warnings文字顯示區:主要顯示錯誤的區域與 簡單的錯誤描述。 Details文字顯示區:主要顯示該錯誤的詳細描述。
86
2.5.4 Error List-3 我們以上一個單元的錯誤範例如下左圖所示來看Error List的顯示情形。布林接線錯誤會造成程式無法執行,即使我們強制執行程式,Error List在不起動的情況下亦會自動跳出視窗,如下右圖所示。
87
課後作業 課後作業2.1 請說明布林(Boolean)控制輸入六種機械動作的滑 鼠點擊TRUE、FALSE輸出與機械反應。 課後作業2.2
請說明Control、Indicator與Constant元件之間的 差異。
88
第三單元 迴圈與架構
89
單元目標 3.1 迴圈 3.1.1 For迴圈 While迴圈 3.1.3 移位暫存器(Shift egisters)的功能 3.2 架構 3.2.1 條件結構 (Case Structures) 3.2.2 順序結構 (Sequence Structures) 3.2.3 事件結構( Event Structure) 課後作業3.1 課後作業3.2
90
單元目標 1.學習for、while 迴圈以及移位暫存器的使用 2.學習case、sequence、event 結構的使用
91
3.1迴圈 迴圈是連續執行的程式,我們可定義迴圈的次數或迴圈停止條件,在處理重復性的工作非常方便,它可以執行相同的程式片段,還可以讓程式結構化。在下面的單元裡我們將會介紹For迴圈與While迴圈。
92
3.1.1 For 迴圈-1 For 迴圈是屬於連續執行的迴圈,根據程式的需求,我們可以定義迴圈要執行的次數,即可讓迴圈內的程式內容重覆執行。其位置於程式方塊區按滑鼠右鍵-Programming/Structures/For Loop,如下圖所示。
93
3.1.1 For 迴圈-2 放置於在程式方塊區時我們需拖曳所需的迴圈大小,如下圖所示。
94
3.1.1 For 迴圈-3 在LabVIEW所提供的FOR迴圈有兩個端點:分別為執行次數的端點,以及迴圈的執行累加計數點。在此特別注意For 迴圈計算迴圈的方式,是從0開始至所設定的迴圈數,但最後一次不執行後跳出,故迴圈的執行次數由端點輸入值決定。
95
3.1.1 For 迴圈-4 For Loop結構有兩端點: N為執行次數的端點,設定迴圈執行的次數。i為輸出此迴圈正在執行的次數值,如下圖所示。前面我們有提到For Loop的N輸入端點是從0開始計數。譬如:N輸入端點為6,則i會從0循環到5,總共是循環六次(0→1→2→3→4→5),進入第六次後不執行跳出迴圈。
96
3.1.1 For 迴圈-5 Wait Until Next ms Multiple:節拍器是用來控制迴圈重復執行之間的延遲時間,通常使用在迴圈結構,單位為毫秒。在這邊我們要特別注意節拍器的延遲作用是在上個執行結束與下一個執行開始之間,程式執行的第一次迴圈沒有延遲作用。
97
3.1.1 For 迴圈-6 範例:設計一個For Loop執行六次,產生六個隨機數值,並乘以十倍,將結果顯示在輸出顯示上;i端點上加入一個顯示功能顯示迴圈執行次數。由於迴圈很快就會循環結束,所以我們外加一個毫秒計數控制迴圈延遲時間,以方便我們觀察迴圈輸出值的過程,如下圖所示。
98
3.1.2 While 迴圈-1 While 迴圈是屬於連續執行的迴圈,依據判斷條件的真(true)或是假(false)來決定迴圈的停止或開始。其位置於程式方塊區按滑鼠右鍵-Programming/Structures/While Loop,如下圖所示。
99
3.1.2 While 迴圈-2 放置於在程式方塊區時我們需拖曳所需的迴圈大小,如下圖所示。
100
3.1.2 While 迴圈-3 有兩個端點:分別為迴圈的執行計次終端點,以及條件終端點。
為計次終端點(Iteration Terminal):顯示此迴圈已完成執行的次數。 Stop if true為布林條件,當程式所執行的輸出結果為True時,迴圈內會停止執行。如下圖所示。
101
3.1.2 While 迴圈-4 Continue if true為布林條件,當程式所執行的輸出結果為True時,迴圈內會繼續執行。如下圖所示。
102
3.1.2 While 迴圈-5 範例:當輸入數值大於或等於4時,布林輸入為TURE,則停止程式運轉。反之,輸入數值小於4時,布林輸入為FALSE,則程式繼續運轉,如下圖所示。
103
3.1.3 移位暫存器(Shift Registers)的功能-1
移位暫存器(Shift Registers)可將數值暫存傳送至下一次執行的迴圈中。在建立移位暫存器之前,必須先建立迴圈。在For 迴圈上增加移位暫存器:位於For Loop的邊框上按下滑鼠右鍵→點選Add Shift Register,如下圖所示。
104
3.1.3 移位暫存器(Shift Registers)的功能-2
位於For Loop的邊框上有一對上下的箭頭,右側向上箭頭在執行程式完畢後會儲存資料,此資料會傳送至左側向下箭頭,以此一直循環到程式結束,如下圖所示。
105
3.1.3 移位暫存器(Shift Registers)的功能-3
範例: 設計一個從0加到10(0+1+2+…+10)的程式。由於0到10共11個數字,迴圈需要執行11次。向下箭頭前加一個常數0可以使下次迴圈執行時,將初始值歸0,以免持續的累加上去。如下圖所示。
106
3.1.3 移位暫存器(Shift Registers)的功能-4
範例: 第一次執行時,向下箭頭值為0,執行迴圈次數為0,向上箭頭值為0;第二次執行時,向下箭頭值為0,執行迴圈次數為1,向上箭頭值為1,以此類推,如下表所示。
107
3.2結構 本單元將介紹條件式的結構,其中包含有條件結構(Case Structures)、順序結構(Sequence Structures)和事件結構(Event Structures)。結構的作用在於有條件式的執行結構內的程式,在我們了解這三個結構的特性後,可以選用適當的結構於程式撰寫上。
108
3.2.1 條件結構(Case Structures)-1
條件結構主要是由外部的條件來觸發頁面後執行其頁面的程式內容。其位置於程式方塊區按滑鼠右鍵-Programming/Structures/Case Structure,如下圖所示。
109
3.2.1 條件結構(Case Structures)-2
放置於在程式方塊區時我們需拖曳所需的結構大小,如下圖所示。 觸發換頁執行有三種型式,分別為布林觸發、整數觸發、字串觸發,事件結構可以有兩個或多個的事件,但一次只能執行一個Case。
110
3.2.1 條件結構(Case Structures)-3
由範例介紹布林Case結構,布林控制的選擇True或False,來決定標題框內要執行的程式。由前置面板(Front Panel)的布林控制 ,選擇True 進入加法器做加法運算,若選擇False 進入乘法器做乘法運算。如下圖所示。
111
3.2.1 條件結構(Case Structures)-4
使用整數做作條件觸發。由範例介紹整數Case結構,整數控制的選擇0或1,來決定標題框內要執行的程式。由於Case結構的預設觸發為布林觸發,因此我們需將前置面板(Front Panel)的整數控制連線至Case結構的觸發接點,以改變Case結構的觸發類型,如下圖所示。
112
3.2.1 條件結構(Case Structures)-5
由前置面板(Front Panel)的整數控制,選擇 進入加法器做加法運算,若選擇 進入乘法器做乘法運算,假若整數控制不是選擇0或1時,將會自動跳進預設視窗內的程式 ,如下圖所示。
113
3.2.1 條件結構(Case Structures)-6
由範例介紹字串Case結構,字串控制的選擇Add或Multiply,來決定標題框內要執行的程式。由於Case結構的預設觸發為布林觸發,因此我們需將前置面板(Front Panel)的字串控制連線至Case結構的觸發接點,以改變Case結構的觸發類型,如下圖所示。
114
3.2.1 條件結構(Case Structures)-7
改變引號內的字串內容,透過前置面板(Front Panel)的字串控制 ,選擇Add 進入加法器做加法運算,若選擇Multiply 進入乘法器做乘法運算,假若整數控制不是選擇Add或Multiply時,則會自動跳進預設視窗內的程式 ,如下圖所示。
115
3.2.2順序結構(Sequence Structures)-1
順序結構(Sequence Structures)顧名思義就是指依照順序執行框內的程式,對程式資料具有流程控制的作用。順序結構(Sequence Structures)有兩種不同的類型:平面結構(Flat Sequence)與堆疊結構(Stacked Sequence),此兩種結構都可以新增新的子程式框架。
116
3.2.2順序結構(Sequence Structures)-2
平面結構(Flat Sequence):其功能為由左到右以平面的方式執行程式內容,並將所有程式的內容顯示出來。其位置於程式方塊區按滑鼠右鍵-Programming/Structures/ Flat Sequence,如下圖所示。
117
3.2.2順序結構(Sequence Structures)-3
放置於在程式方塊區時我們需拖曳所需的結構大小,如下圖所示。
118
3.2.2順序結構(Sequence Structures)-4
新增頁面的方式在結構外框上點擊滑鼠右鍵Add Frame After or Add Frame Before,如下圖所示。
119
3.2.2順序結構(Sequence Structures)-5
範例:使用平面結構(Flat Sequence)做順序控制,首先,LED滅2秒→LED亮2秒→(x+y)歸零→(x+y等於多少)。
120
3.2.2順序結構(Sequence Structures)-6
堆疊結構(Stacked Sequence):把每一個框架一層一層的重疊,在框架上會有編號,代表的是第幾層,此優點是可以減省畫面的空間。其位置於程式方塊區按滑鼠右鍵-Programming/Structures/ Stacked Sequence,如下圖所示。
121
3.2.2順序結構(Sequence Structures)-7
放置於在程式方塊區時我們需拖曳所需的結構大小,如下圖所示。
122
3.2.2順序結構(Sequence Structures)-8
新增頁面的方式在結構外框上點擊滑鼠右鍵Add Frame After or Add Frame Before,如下圖所示。
123
3.2.2順序結構(Sequence Structures)-9
範例:可以試著把前一個平面結構(Flat Sequence)的範例,用堆疊結構(Stacked Sequence)做看看,做出來的結果看看有沒有不一樣,如圖 所示。
124
3.2.3事件結構(Event Structure)-1
事件結構(Event Structure)裡含有多個子程式的框架,每個框架都可以當做一個事件來使用,當某一個事件發生時,便會主動判斷發生事件的所在位置。事件的發生是在Front Panel上,然後在到Block Diagram找尋所在位置。其位置於程式方塊區按滑鼠右鍵-Programming/Structures/Event Sequence,如下圖所示。
125
3.2.3事件結構(Event Structure)-2
放置於在程式方塊區時我們需拖曳所需的結構大小,如下圖所示。
126
3.2.3事件結構(Event Structure)-3
介紹事件結構的部分重要的設定點,如下圖所示。 1.Timeout terminal 此節點位於事件框架的左上角,為事件延遲時間的設定,以避免使用所有資源執行該事件,而產生無法跳出迴圈的問題,延遲秒數的單位為毫秒,預設值為-1。 2.Event selector label 此節點位於事件框架的正上方,可以新增新的事件,將滑鼠移到框架上,按下右鍵選擇Add event case來新增,完畢後需要做新增事件的相關設定,修改時可以選擇Edit event做修改。
127
3.2.3事件結構(Event Structure)-4
範例:按下事件一時→事件一亮、事件二滅,按下事件二時→事件二亮、事件一滅。
128
課後作業 課後作業3.1 請列舉二個LabVIEW裡常使用到的迴圈,並舉出其迴圈的差異點。 課後作業3.2
順序結構(Sequence Structures)裡可以區分成哪兩種結構,並根據其特色來說明選用的場合。
129
第四單元 陣列與資料叢集
130
單元目標 4.1 一維陣列 4.1.1 建立一維陣列 4.1.2 以程式設計輸出一維陣列 4.2 二維微陣列 4.2.1 建立二維陣列 4.2.2 以程式設計輸出二維陣列 4.3 陣列處理函數 4.3.1 Initialize Array 4.3.2 Array Size 4.3.3 Build Array 4.3.4 Array Subset 4.3.5 Index Array
131
4.4 陣列運算的形態Polymorphism 4.5 叢集 4.5.1 建立資料叢集 4.6 資料叢集的排序 4.7 叢集函數 4.7.1 Bundle與Bundle by Name 4.7.2 Unbundle與Unbundle by Name 4.8 陣列與叢集的轉換 課後作業4.1 課後作業4.2
132
單元目標 1.建立一維陣列以及二維陣列,並學習如何使用程式設計輸出陣列。 2.瞭解陣列運算之型態;並且介紹各種陣列處理函數。
3.介紹給讀者資料叢集觀念及其運用方式、排序。 4.如何建立叢集、解除叢集。 5.教各位讀者如何在陣列與叢集中轉換。
133
4.1一維陣列 到目前為止,我們提到的數值只在純量數的階段:因此在本章節當中,我們將為各為讀者提到陣列的觀念。在LabVIEW當中的陣列所指的是一群全部皆為相同資料型態的資料元素集合。在一維陣列當中,包含多達231個元素(當然,要用到231個元素的前提要有足夠的記憶體),第一個元素之初始值由0開始,第二個元素之位置則為1,以此類推至第N個元素其位置為N-1。以下圖來說,此為一張包含了10個元素之一維陣列。
134
4.1.1建立一維陣列-1 在建立陣列資料之控制器及顯示器時,將利用到陣列外框(Array Shell)及資料物件(Data Object)所組成,其資料的型態可以為數值、布林、路徑、字串,其建立方法如下: 步驟A:將控制面板當中的Modern ->Array Matrix & Cluster -> Array提出,並移至人機介面區。
135
4.1.1建立一維陣列-2 步驟B:接著再由控制面板當中提出控制器或顯示器物件,以拖曳之方式放入步驟A提出的陣列外框當中。
136
4.1.1建立一維陣列-2 若需建立常數的陣列資料型式,方法與建立控制器、顯示器的方式相似。
137
4.1.2以程式設計輸出一維陣列-1 此單元主要是利用迴圈來建立一維陣列,包含了設定自動索引(Auto Indexing)之功能。以For Loop建立一維陣列之方式為例子,將建立之步驟寫出給讀者明瞭。 步驟A:將功能面板當中的Programming -> Strctures -> For Loop提出至程式區,並設定好執行次數6
138
4.1.2以程式設計輸出一維陣列-2 步驟B:將功能面板當中的Programming -> Numeric -> Random Number提出放至For Loop當中,創造一個一維陣列之顯示器並將其與Random Number 連接(如下圖所示) 。
139
4.1.2以程式設計輸出一維陣列-3 在此程式當中,各位讀者注意到前頁圖的A點地方之符號,此種型態為自動索引之功能。自動索引之功能為在迴圈每一次重複執行時,將會送出一個值至顯示器當中的元素位置,以此方式累加至設定次數到達為止;當我們將自動引索功能取消時,顯示器當中第一個元素位置每次會顯示最後一次送出的數值,因此所接收之顯示器型態不能為陣列形式,而為一單純形式的數值(如下圖所示)。
140
4.2二維陣列 在二維陣列當中,會把元素分為兩個索引值:行索引(Column Index)及列索引(Row Index),兩者之初始值皆由0作為初始值。圖中為一個 5行x4列 的二維陣列。
141
4.2.1建立二維陣列 在創建二維陣列時,可先建立一維陣列,接著再由一維陣列將其拓展為二維陣列。方法首先將滑鼠游標移至陣列索引的邊框,在邊框右下角按住滑鼠左鍵以拖曳的方式將其往下拉一層,即可完成二維陣列的建立。
142
4.2.2以程式設計輸出二維陣列 若想由程式自動產生一個二維陣列時,我們可以使用兩個For Loop配上一個Random Number來建立。首先放置一個For Loop及Random Number,此迴圈當中輸出產生的是一個1列數行的一維陣列。再將外部包上一個For Loop,則可建立出一個數行數列之二維陣列。
143
4.3陣列處理函數 在LabVIEW當中,提供了許多關於處理陣列函數的方式,使用這些圖示並不像其他文字程式當需進行冗長的撰寫。它們都Array的子面板當中。這些函數都十分重要,接下來請各位讀者耐心一一的看完他們並且實際演練演練吧。
144
4.3.1 Initialize Array-1 此函數之目的為建立一個新的陣列,並可以設定陣列中的元素的初始值,設定輸入的維度數目為多少,輸出的維度數目則為多少,如下圖所示為Initialize Array之說明。
145
4.3.1 Initialize Array-2 範例說明如下,我們在設定輸入的元素為3個,陣列初始值大小為7,其輸出為一維陣列。程式執行運算後如圖所示,我們產生了有3個7的一維陣列。
146
4.3.2 Array Size-1 此函數之功能可將陣列中的元素的數目回傳。假設輸入的陣列是N維時,其輸出的陣列便可顯示出此N維陣列的元素各數。其輸出輸入的關係可由下圖可知。
147
4.3.2 Array Size-2 此函數之範例如下圖所示,輸入之一維陣列當中包含了3個元素,因此輸出的Array Size為3。
148
4.3.3 Build Array-1 陣列擴充函數在陣列工具當中的實用性非常高,其輸出入說明如圖所示。編者依功能性的差異將此分為以下兩種情況探討: a.可將數個陣列或者陣列中的任一個元素,以串接合成一個新的陣列。 b.可將數個相同元素數目的陣列,以並接的方式合成一個新維度的陣列。
149
4.3.3 Build Array-2 範例A:此範例將兩個一維陣列及一個元素,串接合成一個新的一維陣列。其詳細輸出入數值,讀者可由圖仔細查閱得知。
150
4.3.3 Build Array-3 範例B:此範例將三個一維陣列,並接合成一個新的二維陣列。其詳細輸出入數值,讀者可由圖仔細查閱得知。
151
4.3.3 Build Array-4 我們可以由範例A及範例B分辨出兩者使用Build Array函數所達到的目的不同。我們可以利用在Build Array函數圖示上面點選滑鼠右鍵,彈出功能選單並點選Concatenate Inputs,來進行切換串接、並接的方式。
152
4.3.4 Array Subset-1 Array Subset函數可以將設定好的輸入陣列之索引(Index)及長度(Lengh)提出,來輸出形成一個新的子陣列。Array Subset各接點輸出入說明圖示如下圖所示。
153
4.3.4 Array Subset-2 Array Subset的範例如下:在輸入的陣列當中,索引元素位置由1開始、長度為2的數值出來,輸出一個長度為2的新子陣列。
154
4.3.5 Index Array-1 此函數有兩種功用: A.可以將一維陣列中的某元素提出,形成一個單一的數值Element。
B.可將二維陣列中的任何一列或任何一行提出,形成一個一維的子陣列。
155
4.3.5 Index Array-2 舉個範例說明之,此一範例皆應用到了上述的兩種功能。首先輸入的是一個2維陣列,我們將索引的位置設1,使用第一個Index Array函數輸出一個一維的子陣列。接著又用到第二個Index Array函數將剛才所輸出的子陣列作為輸入,用來輸出元素位置為3的元素數值(Element = 2)。 第一個Index Array函數 第二個Index Array函數
156
4.3.5 Index Array-3 在我們輸入的項目為一個二維陣列時,連接到Index Array函數就會自動變成索引行或列;而輸入的項目僅為一個一維陣列時,連接到Index Array函數就會自動轉成索引單一元素數值。
157
4.4陣列運算的形態Polymorphism 在LabVIEW的加、減、乘、除……等函數運算當中所表示的函數可以有不同的資料型態,像是純量、陣列,我們可由下圖Polymorphism運算型態中一些不同種類的運算來舉例說明之。
158
4.5叢集 叢集(Cluster)本身是一種資料結構,它結合一個或是數個資料物件來組成一個新的資料型態,但是有人會問說:「那叢集與陣列有何不同呢?」。它們最大的差異在於,陣列(Array)中的物件所要求的性質必須要相同;而相反的,叢集(Cluster) 可允許不同的資料型式如布林、字串及數值等資料類型,因此叢集十分類似文字式設計語言的紀錄(record)或struct。
159
4.5.1建立資料叢集-1 在建立叢集資料之控制器及顯示器時,將利用到叢集外框(Cluster Shell)及不同的資料物件(Data Object)所組成,其資料的型態可以為數值、布林、路徑、字串,其建立方法如下: 步驟A:將控制面板當中的Modern ->Array Matrix & Cluster -> Cluster提出,並移至人機介面區。
160
4.5.1建立資料叢集-2 步驟B:接著再由控制面板當中提出控制器或顯示器物件,以拖曳之方式放入步驟A提出的叢集外框當中。
161
4.6資料叢集的排序-1 當我們在整理叢集當中的資料時,其內部各項資料的順序安排是十分重要的。叢集框內的第一個物件順序被預設為0,而第二個物件的順序則預設為1,第三為2…等物件以此類推。將滑鼠移動到叢集外框邊上,按下滑鼠右鍵,點選Reorder Controls In Cluster。
162
4.6資料叢集的排序-2 當按下Reorder Controls In Cluster後,人機介面區的程式面板會改變,一個新的叢集按鈕會取代原來之工具列,而改變後的叢集狀態也會在面板當中直接顯示出來。圖中的白底灰字的部份為原來物件順序的數字,而黑底白字的部份則為欲設定之新物件順序的數字。
163
4.6資料叢集的排序-3 使用者在設定叢集物件的順序時,將欲設定順序數字由Click to set to右邊的區域鍵入完成,將滑鼠指向欲設定的物件當中的黑底白字的地方,並且按下滑鼠左鍵,逐一重複上述動作即完成叢集順序的設定,最後由滑鼠點選左上角的確認按鍵,即可將改變後的順序號碼儲存起來。
164
4.7叢集函數 在Lab VIEW當中,包含了許多關於叢集的處理函數,這些叢集處理函數都在Function面板 -> Programming -> Cluster, Class, & Variant的子面板當中。
165
4.7.1 Bundle與Bundle by Name-1
166
4.7.1 Bundle與Bundle by Name-2
Bundle合集函數可將單獨的物件組合成為一個單獨的叢集,也可將目前叢集當中的物件替換掉,其各輸出入點如圖所示。如有任何物件要透過Bundle合集函數連線到叢集時,在合集函數的最上層是由0開始到n-1個物件,將滑鼠移動到圖示下方以拖曳的方式來增加輸入的數目。
167
4.7.1 Bundle與Bundle by Name-3
這個範例程式中包含了兩個Bundle函數,其中一個Bundle函數功能將資料組合,另一個Bundle函數則是將資料進行修改。
168
4.7.1 Bundle與Bundle by Name-4
Bundle by name名稱合集函數與Bundle函數的功能十分相似,可以用來修改代替原來叢集中的物件。其唯一的不同在於Bundle by name名稱合集函數是利用叢集中的名稱,取代它們在叢集中的順序,並由它們自己的標示來命名。其中各輸出入接點的情況如圖 所示,左方和上方為輸入端,右方為輸出端,中間多了各端點代表了所連接資料型態的名稱。因Bundle by name函數與Bundle函數的差異不大,在此就不多作範例說明,由各位讀者自行練習,體會當中的差異性。
169
4.7.2 Unbundle與Unbundle by Name-1
叢集中Unbundle解集的概念,是將叢集中的物件逐一分開,而形成各自獨立的物件型態。與Bundle時介紹給各位讀者的方式相同,您可以把它想像成一條除去了外層表皮的電話纜線。在這條剝去了外表皮的纜線中裸露了許多細線,這些細線分別包含負責傳遞數據、音訊、視訊、電壓等不同資料。因此這些裸露的細線就相當程式當中Unbundle函數,將集合起來的資料逐一分解成許多不同的資料。
170
4.7.2 Unbundle與Unbundle by Name-2
Unbundle解集函數可將叢集分解成一個一個單獨的物件。輸出入端各接點可由圖看出,輸入端是一個叢集,輸出端依照輸入的叢集順序最上層由0到n-1個物件逐一排序,且此函數的輸出端點數目必須與輸入叢集中的元素數目相等。
171
4.7.2 Unbundle與Unbundle by Name-3
Unbundle by Name名稱解集函數與Unbundle解集函數功能也十分類似,可以用來解除叢集物件,其各輸出入接點關係。它門的差別在於Unbundle by Name可以用選擇名稱的方式解除,不用考慮到叢集中的每個端點都顯示出來。因為每個叢集的物件都有參考名稱,因此使用Unbundle by Name可以選擇自己專有的名稱,所以在此函數裡面輸出端點的數目與輸入叢集的元素數目可以不需要相等。當輸出端連接完成後,選擇物件名稱的方式可用滑鼠將游標移至輸出的端點左方預設名稱上,按下滑鼠左鍵,再點選叢集元素的名稱,如下圖所示。
172
4.7.2 Unbundle與Unbundle by Name-4
這個範例裡面皆有Unbundle 及Unbundle by Name函數的應用。首先輸入一個叢集包含了Numeric、String及Boolean,通過Unbundle函數的輸出端按照了第一為Numeric 第二為String 最後是Boolean的順序輸出;而通過Unbundle by Name函數的輸出端,則可以選擇使用者所需解除的物件(在此選擇為Boolean及Numeric )。
173
4.8陣列與叢集的轉換-1 前面幾個小節都已經介紹完陣列和叢集的基本運用了,但是兩者其實是可以互相轉換的。有的時候,我們可以將陣列改成叢集;有的時候,亦可以將叢集轉換為陣列。在Lab View當中,以陣列處裡的運算工具要比叢集的工具多出許多。而到底什麼時候才需要將叢集轉成陣列?什麼時候將陣列轉成叢集呢? 舉個例子來講,當您在人機介面上有一組包含許多開關的叢集,而您想改變其開關的排序。這時就可以將此叢集轉成陣列,轉換後再經由陣列的處理函數來一次調整它的排序,處裡完後再轉換回叢集。
174
4.8陣列與叢集的轉換-2 這些轉換工具它們可以在Function面板 -> Programming -> Array的子面板當中找到,如下圖所示。
175
4.8陣列與叢集的轉換-3 叢集轉陣列的工具函數為Cluster To Array,而Cluster To Array函數左端輸入為Cluster ,右端輸出為Array型式,其輸出入接點關係如下圖所示。 陣列轉叢集的工具函數為Array To Cluster,而Array To Cluster函數左端輸入為Array,右端輸出為Cluster型式,其輸出入接點關係如下圖所示。
176
課後作業-1 課後作業4.1 試以程式設計一個由1~150的數字範圍當中,可以整除720的任意數字,並用一維陣列顯示列出其結果。如果不能整除720的數字,則不顯示出來。 課後作業4.2 試設計一個程式,使用SIN 函數運算由0~720度每次增量為30度,將每次的結果按照順序以一維陣列顯示出來。若結果答案為1的數字,則不顯示出來。
177
課後作業-2 課後作業4.3 請試著以自己的角度,說明Array陣列與Cluster叢集的差異。另外請各別舉出幾種Array處理函數與Cluster處理函數,並說明其功能運用。
178
第五單元 波形圖表與字串
179
單元目標 5.1 波形圖表 5.1.1 建立單一波形圖表 5.1.2 波形圖表更新模式 5.1.3 數位顯示器 5.1.4 卷軸 5.1.5 清除波形圖表資料 5.1.6 建立多重波形圖表 5.1.7 Stack Plots與Overlay Plots 5.2 Waveform Graph與XY圖形 5.2.1 Waveform Graph 5.2.2 XY圖形
180
5.3 字串 5.3.1 單行字串 5.3.2 卷軸 5.3.3 表格 5.4 字串函數 5.4.1 String Length 5.4.2 Concatenate String 5.4.3 Get Date/Time String 5.4.4 String Subset 5.4.5 Match Pattern 5.4.6 Format Into String 5.4.7 Scan From String 5.5 檔案I/O 課後作業5.1 課後作業5.2
181
單元目標 1.認識波形圖表的基本功能 2.認識字串的基本功能 3.了解字串函數的使用 4.撰寫基本的檔案I/O程式
182
5.1波形圖表 波形圖表為一種常見的輸出元件,可用於數學圖形、統計結果與類比轉數位訊號…等的顯示。本單元將會帶領同學建立波形圖表以及波形圖表功能設定,在下面的5.1與5.2單元裡我們將會有詳細的介紹。
183
5.1.1建立單一波形圖表-1 波形圖表(Waveform Chart)主要做為圖形的輸出與顯示,其位置於人機介面按滑鼠右鍵-Modem/Graph/ Waveform Chart,點選後放置人機介面,放置後在程式方塊區會出現相對應的控制元件,如下圖所示。
184
5.1.1建立單一波形圖表-2 我們可以利用While Loop 與 Random Number來產生亂數的波形圖表,執行程式後即可產生波形,如下圖所示。
185
5.1.2波形圖表更新模式-1 波形圖表的更新模式主要可分三種,可於波形圖表上點擊滑鼠右鍵,選擇Properties後。可在彈出波形圖表的內容設定選單上的Update mode,如下圖所示。
186
5.1.2波形圖表更新模式-2 波形圖表(Waveform Chart)主要做為圖形的輸出與顯示,其位置於人機介面按滑鼠右鍵-Modem/Graph/ Waveform Chart,點選後放置人機介面,放置後在程式方塊區會出現相對應的控制元件,如下圖所示。
187
5.1.2波形圖表更新模式-3 1. Strip Chart:退去式的圖形更新模式,在新的資料進入後,舊的資料會向左方退去,此為預設的波形圖表更新模式,如下圖所示。
188
5.1.2波形圖表更新模式-4 2. Scope Chart:換頁式的圖形更新模式,在新的資料進入至填滿畫面後,舊的資料會全部刪除,並從圖面的左方從頭開始顯示,此為預設的波形圖表更新模式,如下圖所示。
189
5.1.2波形圖表更新模式-5 3. Sweep Chart:掃描式的圖形更新模式,在新的資料進入至填滿畫面後,會由一條少描線將舊的資料逐漸的覆蓋過去,並從圖面的左方從頭開始顯示,此為預設的波形圖表更新模式,如下圖所示。
190
5.1.3數位顯示器 數位顯示器可用來顯示最新的輸出值以供使用者判斷當下的輸出值,可於波形圖表上點擊滑鼠右鍵,選擇Properties後,可在彈出波形圖表的內容設定選單上的Show digital display(s),點選後即會顯示於Waveform Chart旁邊,如下圖所示。
191
5.1.4卷軸 卷軸可用來拉動以顯示被覆蓋過的舊資料,若人機界面空間有限又想要觀看大筆資料,可善用此功能。於波形圖表上點擊滑鼠右鍵,選擇Properties後,可在彈出波形圖表的內容設定選單上的Show x scroll bar,點選後即會顯示於Waveform Chart下方,如下圖所示。
192
5.1.5清除波形圖表資料 常時間的輸出波形圖表資料會使得Waveform Chart累積過多的資料,若想清除波形圖表資料,可於波形圖表上點擊滑鼠右鍵,選擇Data Operations/Clear Chart,點選後即會清除Waveform Chart的資料,如下圖所示。
193
5.1.6建立多重波形圖表-1 多重波形圖表是在撰寫程式上很常出現的ㄧ種輸出顯示方式,通常用於比較或分析多筆波形的同步輸出。在5.1.1單元,我們已經學會了如何建立單一波形圖表,在這個單元中我們將進一步的去學習如何建立多重波形圖表。
194
5.1.6建立多重波形圖表-2 多重波形圖表的建立是透過資料叢集的方式將多筆資料透過Bundle後輸出叢集資料再傳至Waveform Chart,其詳細的程式及執行後的波形輸出如下圖所示。
195
5.1.7 Overlay Plots與Stack Plots
但根據不同的輸出顯示,我們可以將多重波形圖表的輸出以預設的Overlay Plots或以Stack Plots的方式顯示。Stack Plots設定的方式,在Waveform Chart上點擊滑鼠右鍵後彈出選單,點選Stack Plots。點選後Waveform Chart會以Stack Plots的方式顯示。
196
5.2 Waveform Graph與XY圖形 本單元將介紹Waveform Graph與XY Graph,XY Graph 與5.1單元所介紹Waveform Chart的最大差異在於輸入圖表顯示資料形態。Waveform Chart只需要輸入單筆數據即可顯示,X軸由數據的時間差所決定;Waveform Graph則是以一維矩陣輸入,X軸為Index值、Y軸為Element值;XY Graph顧名思義就是要同時輸入X值與Y值。
197
5.2.1 Waveform Graph-1 Waveform Graph位置於人機介面按滑鼠右鍵-Modem/Graph/Waveform Graph,點選後放置人機介面放置後在程式方塊區會出現相對應的控制元件,如下圖所示。
198
5.2.1 Waveform Graph-2 我們可以利用For Loop 與 Sine 函數來產生的波形,執行程式後即可產生波形,如下圖所示。
199
5.2.2 XY圖形-1 XY圖形位置於人機介面按滑鼠右鍵-Modem/Graph/XY Graph,點選後放置人機介面,放置後在程式方塊區會出現相對應的控制元件,如下圖所示。
200
5.2.2 XY圖形-2 我們可以利用For Loop 與 Sine 函數來產生的XY波形,執行程式後即可產生波形,如下圖所示。
201
5.3字串 字串在定義上我們可將其視為由字元所組成的ㄧ維陣列,在程式設計上是很常用的元件。本單元將會引導同學建立字串、相關字串設定與基礎的字串涵數,在下面的5.3與5.4單元裡我們將會有詳細的介紹。
202
5.3.1單行字串-1 我們在2.2.3單元裡已經學會如何建立String元件,然而在字串的格式中<Enter>亦代表字元的ㄧ種,但這會與字元輸入完成後的確認<Enter>動作造成程式輸入上的誤會,因此LabVIEW提供了Limit to Single Line的輸入功能。在String上點擊右鍵後跳出選單,選擇Limit to Single Line,如下圖所示。
203
5.3.1單行字串-2 以下列的範例程式來說明,如下圖所示,將String 設定為Limit to Single Line,String4則否。
204
5.3.1單行字串-3 程式執行後我們在String與String4打字輸入可以發現有開啟Limit to Single Line在鍵入<Enter>後會直接顯示在右方的String2輸出;沒有開啟Limit to Single Line在鍵入<Enter>後會進入下一段繼續編輯,而不會直接顯示在右方的String3輸出,如下圖所示。
205
5.3.2卷軸 卷軸可用來拉動以顯示過多的資料,若人機界面空間有限又想要觀看大筆資料,可善用此功能。於String上點擊滑鼠右鍵,選擇Properties後,可在彈出波形圖表的內容設定選單上的Show x scroll bar。點選後即會顯示於Waveform Chart下方,如下圖所示。
206
5.3.3表格-1 表格是LabVIEW裡面一個特殊的元件,可以用來顯示二維陣列的字串。表格的位置於人機介面按滑鼠右鍵-Modem/List&Table/Table,點選後放置人機介面,放置後在程式方塊區會出現相對應的控制元件,如下圖所示。
207
5.3.3表格-2 建立好Table後我們可以開啟或關閉行列標頭,設定的方式如圖所示。設定完成後我們可以發現標頭與資料之間會有雙細線隔開,如下圖所示。
208
5.3.3表格-3 運用Find Examples,我們鍵入Tables即可搜尋到Building Tables.vi。開啟後程式的人機介面與程式方塊如下圖所示。
209
5.4字串函數 我們可以將字串視為一個由字元所組成的ㄧ維陣列。因此LabVIEW也提供的如同陣列般的涵數,我們將其稱之為字串函數。在下面的單元中我們將介紹常用的字串函數。
210
5.4.1 String Length String Length函數可用於讀取輸入字串的字元數。String Length函數的位置於程式方塊區按滑鼠右鍵-Programming/String/ String Length,如左圖所示。其應用範例如右圖所示。
211
5.4.2 Concatenate String Concatenate String函數可將兩個以上的字串合併成一個字串。Concatenate String函數的位置於程式方塊區按滑鼠右鍵-Programming/String/ Concatenate String,如左圖所示。其應用範例如右圖所示。
212
5.4.3 Get Date/Time String Get Date/Time String函數可將程式執行時的日期與時間以字串的格式輸出。Get Date/Time String函數的位置於程式方塊區按滑鼠右鍵-Programming/Timing/ Get Date/Time String,如左圖所示。其應用範例如右圖所示。
213
5.4.4 String Subset String Subset函數可將輸入的字串取出我們所需的片段後,再以字串的形式輸出。String Subset函數的位置於程式方塊區按滑鼠右鍵-Programming/String/ String Subset,如左圖所示。其應用範例如右圖所示,在這裡要特別注意的是offset接點的設定值是從零開始算起。
214
5.4.5 Match Pattern Match Pattern函數可將已知的輸入字串與欲匹配的字串取出,若有找到符合的字串,則可以輸出match到的字串以及前後的字串。Match Pattern函數的位置於程式方塊區按滑鼠右鍵-Programming/String/ Match Pattern,如左圖所示。其應用範例如右圖所示。
215
5.4.6 Format Into String-1 此函數可將輸入的數值資料轉換成字串形式輸出。其位置於程式方塊區按滑鼠右鍵-Programming/String/ Format Into String,如左圖所示。其應用範例如右圖所示。
216
5.4.6 Format Into String-2 由於輸入格式眾多,若有需要可查閱LabVIEW使用手冊,下表中列出常用的Format Into String函數的使用情形。
217
5.4.7 Scan From String-1 Scan From String函數與上一單元Format Into String函數之功能恰好相反,可將輸入的字串資料轉換成數值形式輸出。Scan From String函數的位置於程式方塊區按滑鼠右鍵-Programming/String/Scan From String,如左圖所示。其應用範例如右圖所示。
218
5.4.7 Scan From String-2 由於輸入格式眾多,可藉由Scan From String的Detailed help內,查詢表中列出常用的Format Into String函數的使用情形。
219
5.5檔案I/O-1 本單元檔案I/O主要是以LabVIEW進行開啟檔案、檔案寫入內容、檔案讀取內容與關閉檔案之功能。以簡單的範例來說,我們可以在LabVIEW開啟WordPad、記事本或Excel等應用程式,依專案所需來撰寫檔案I/O的程式。 步驟1.建立一個文字檔案
220
5.5檔案I/O-2 步驟2.建立基本的檔案I/O程式
221
5.5檔案I/O-3 步驟3. 開啟檔案路徑
222
5.5檔案I/O-4 步驟4.輸入文字與執行
223
課後作業 課後作業5.1 請畫出下列程式所輸出的圖形。
224
課後作業 課後作業5.2 請寫出下列程式所輸出的文字。
225
第六單元 專案開發
226
單元目標 6.1 專案開發 6.1.1 Project環境介紹 6.1.2 自行設計控制元件 6.1.3 製作SubVI 6.1.4 SubVI圖示與連接點面板 課後作業6.1
227
單元目標 1.認識Project環境 2.可以自行製作控制元件與SubVI 3.使學生具有實例專案開發的基礎能力
228
6.1專案開發 在前面五個單元裡,我們已將撰寫LabVIEW程式時,經常使用到的輸出入元件、迴圈架構、陣列叢集與字串函數有了初步的認識。本單元將進一步以專案開發的角度來介紹Project環境、控制元件設計與SubVI的製作。
229
6.1.1 Project環境介紹-1 由於一個專案程式開發常會伴隨著大量的程式或子程式(SubVI)檔案;控制元件的客製化也是相當常見的專案需求。因此,LabVIEW提供使用者一個管理專案程式的介面-Project來方便使用者進行專案開發。我們可以在Labview開啟時選擇Empty Project。開啟後會彈出Project視窗,如下圖所示。
230
6.1.1 Project環境介紹-2 開啟Project視窗後,我們首先介紹如何在Project新增VI程式、資料夾以及將現有的VI程式檔案或資料夾匯入Project。 新增VI:在My Computer點擊滑鼠右鍵/New/VI。新增後會跳出新增的VI人機介面與程式方塊視窗。Project內也會出現新增的VI檔案,如下圖所示。
231
6.1.1 Project環境介紹-3 新增資料夾:在My Computer點擊滑鼠右鍵/New/Virtual Folder。新增後在Project內會出現新增的資料夾,如下圖所示。
232
6.1.1 Project環境介紹-4 匯入VI或資料夾:在My Computer或新增的資料夾點擊滑鼠右鍵/Add/File或Folder,如下圖所示。
233
6.1.2自行設計控制元件-1 在專案製作上時常會遇到需要重新設計控制元件的要求,因此本單元會教導同學如何自行設計一個控制元件。
首先我們先在Project內My Computer點擊滑鼠右鍵選擇New/Control。點選後會跳出新增的Control人機介面視窗。Project內會出現新增的控制元件檔案,如下圖所示。
234
6.1.2自行設計控制元件-2 我們以重新設計一個布林按鈕為例: 步驟一
開起小畫家或其它繪圖程式繪製一個布林按鈕True與False的圖案,如下圖所示。
235
6.1.2自行設計控制元件-3 步驟二 在Control視窗中先選擇一個OK Button控制元件,如下圖所示。 步驟三
按下編輯的按鈕,如下圖所示。
236
6.1.2自行設計控制元件-4 步驟四 將小畫家所繪製的False圖示複製到Control人機介面視窗後再刪除,如下圖所示。 步驟五
在OK Button False的圖示上點擊滑鼠右鍵選擇Import Picture from Clipboard,原OK Button圖示即被更換為所設計的圖示,如下圖所示。
237
6.1.2自行設計控制元件-5 步驟六 在更換後OK Button False的圖示上點擊滑鼠右鍵選Picture Item,點選另一個尚未更換的原OK Button False的圖示,如下圖所示。再重複步驟五將圖示更換掉。
238
6.1.2自行設計控制元件-6 步驟七 將小畫家所繪製的True圖示複製到Control人機介面視窗後再刪除,如下圖所示。
239
6.1.2自行設計控制元件-7 步驟八 在更換後OK Button False的圖示上點擊滑鼠右鍵選Picture Item,點選另兩個尚未更換的原OK Button True的圖示,如下圖所示。再重複步驟五將圖示更換掉。
240
6.1.2自行設計控制元件-8 步驟九 在Picture Item兩對True與False圖示接更換完成後,如圖所示。在按下步驟三的編輯按鈕即完成該按鈕的重新設計,如下圖所示。
241
6.1.2自行設計控制元件-9 步驟十 我們將重新設計後的布林按鈕儲存後,可直接由Project內的檔案拖曳至VI程式內的人機介面,即可完成一個自製布林按鈕的新增,如下圖所示。
242
6.1.3製作SubVI-1 一個專案程式在撰寫完成後往往會面臨到程式過於龐大、維護不易、接線雜亂與不易理解程式邏輯…等問題。因此,LabVIEW提供了SubVI的功能可使程式結構化,在程式後續的閱讀與維護可有莫大的幫助。 SubVI主要的功能是將程式最靠近輸入端與最靠近輸出端的程式運算邏輯區塊以VI方塊的形式來包裝原有複雜的接線程式,如下圖所示。
243
6.1.3製作SubVI-2 SubVI製作流程之範例: 步驟一 首先我們以Project建立圖 的VI程式,如下圖所示。
244
6.1.3製作SubVI-3 步驟二 以滑鼠左鍵框選欲包裝成SubVI的程式區域,如下圖所示。
245
6.1.3製作SubVI-4 步驟三 以滑鼠點選Edit/Create SubVI後,即完成SubVI包裝的設定,如下圖所示。
246
6.1.3製作SubVI-5 步驟四 以滑鼠連續點擊SubVI兩次後,會跳出該SubVI的檔案視窗,檔案名稱後面會括弧(SubVI),如下圖所示。
247
6.1.3製作SubVI-6 步驟五 儲存SubVI檔案後在Project內即會顯示您建置的SubVI檔案,如下圖所示。
248
6.1.3製作SubVI-7 步驟六 直接由Project內的SubVI檔案拖曳至VI程式內的程式方塊區,即可完成一個SubVI的新增,如下圖所示。
249
6.1.4 SubVI圖示與連接點面板-1 我們在上一個單元已經學會如何將程式包裝成SubVI,不過該SubVI的圖示與連接點面板皆為LabVIEW預設自動產生的,如圖所示。連接點的定義與SubVI圖示容易與其他的SubVI混淆,因此本單元將教導同學如何自訂SubVI圖示與連接點面板。
250
6.1.4 SubVI圖示與連接點面板-2 我們以前述的SubVI來作為自訂SubVI圖示與連接點面板的範例: 自訂SubVI圖示步驟一
在檔案視窗內右上角的SubVI圖示點擊滑鼠右鍵選擇Edit Icon,即會跳出Icon的圖示編輯程式,如下圖所示。
251
6.1.4 SubVI圖示與連接點面板-3 自訂SubVI圖示步驟二
在Icon的圖示編輯程式內我們可以利用繪圖區的工具進行繪圖,完成繪圖後亦可由色彩快速轉換區進行黑白、16色與256色的轉換,如下圖所示。
252
6.1.4 SubVI圖示與連接點面板-4 自訂SubVI圖示步驟三
在Icon的圖示編輯完成後點選OK鍵,即完成Icon圖示的變更,如下圖所示。在SubVI檔案視窗內右上角的SubVI圖示亦被變更。
253
6.1.4 SubVI圖示與連接點面板-5 自訂SubVI連接點面板步驟一
在SubVI檔案視窗內右上角的SubVI圖示點擊滑鼠右鍵選擇Show Connector,即會使Icon的圖示變成SubVI連接點面板,如下圖所示。
254
6.1.4 SubVI圖示與連接點面板-6 自訂SubVI連接點面板步驟二
在SubVI檔案視窗內右上角的SubVI連接點面板點擊滑鼠右鍵選擇Disconnect All Terminals,即會使預設的SubVI連接點全部被清除,如下圖所示。
255
6.1.4 SubVI圖示與連接點面板-7 自訂SubVI連接點面板步驟三
在SubVI檔案視窗內右上角的SubVI連接點面板點擊滑鼠右鍵選擇自己想要的Pattern,即會變更SubVI檔案視窗內右上角的SubVI連接點面板,如下圖所示。
256
6.1.4 SubVI圖示與連接點面板-8 自訂SubVI連接點面板步驟四
先點擊SubVI連接點面板的位置,再點擊輸入輸出元件,即可將輸入輸出元件重新定義到自己想要的SubVI連接點上,如圖所示。完成上述所有設定後存檔,即可成功的變更自訂SubVI圖示與連接點面板。
257
課後作業 課後作業6.1 請試著撰寫出一個49選6的樂透程式,但不可以出現0與重複的數字。
Similar presentations