透過絕對型別定義(Strict Type Definition)功能建立元件

在LabVIEW環境下,使用者除了可以使用LabVIEW所提供在Control Pallet上的元件(ControlIndicator)外,更可以利用Edit Customize Control功能,來改變顯示在Front Panel上元件的外觀。除了可以自訂元件之外,LabVIEW還針對需要使用大量控制元件來開發程式的LabVIEW使用者,提供了絕對型別定義(Strict Type Definitions)功能,讓開發人員很輕易的就可以有效率的規劃元件。

對於使用LabVIEW作為開發環境的工程師而言,參()數的規劃及使用上有不同於其他以文字(Text-Base)為基礎的程式語言。一般在使用這些元件時,不單單只是為了要顯示在人機(Front Panel)上,有些時候也必須利用它們來作為類似於旗標(Flag)或暫存器(Buffer)的功能─存放參()數。但是,如果在程式開發初期沒有善盡規劃的責任的話會有可能出現一種現象:就是在程式碼區(Block Diagram)上會到處布滿了元件,有可能為了要找到某一個存放參()數的元件時,而花費許多時間或因為想要改變一個Enum元件的Item,而必須花費更多的時間處理這方面的事(因為有可能同一個Enum元件,同時在很多地方使用)。這對於程式開發人員將會帶來不必要的麻煩,而且在程式管理上也有可能會出現困擾。

為了減少並降低這樣的困擾,在元件的規劃上可以運用絕對型別定義(Strict Type Definition)功能,來增加元件管理的便利性。

絕對型別定義(Strict Type Definitions)

絕對型別定義(Strict Type Definitions)可以將某一個元件賦予他指定的型態,而這個被定義的元件是獨一無二的,簡單的說就是建立元件的本尊。在程式開發過程中,設計人員可以大量引用已定義過的元件,也就是建立分身。當本尊被改變時(不包括ValueCaption NameLabel Name),其他的分身也會同時被改變。以下就利用實例來說明,如何透過分身與本尊的元件關係,來有效率的管理程式中的參()數。

![|297x331](upload://ipsbWDRNfV5VViyY6CXMwxtRvxq.jpeg)

1.1 Front Panel上的Test_Cluster元件

![|168x135](upload://rmryzzRJXmfe80SA3748EBPJ9Gu.jpeg)

1.2 Test_EnumItem

1.1是一個已經透過絕對型別定義(Strict Type Definitions)方式所建立的Test_Cluster元件,在這個Test_Cluster元件裡分別有一個控制流程程序(Step)Enum元件及代表Test_ExitBoolean元件。其中,Test_Enum元件也是一個已經透過Strict Type Definitions建立的元件,在這裡面分別有StartStep1Step2End等四個程序圖1.2

在使用上我們同時在Block Diagram,複製許多相同的Test_Cluster。然後試著改變Test_Cluster中的Element。可以發現Test_Cluster一被改變時,所引用的其他元件也同時被改變圖1.3a、圖1.3b及圖1.3c,而Test_Enum亦是如此。

![|376x183](upload://YDepNiuEAHuYqtRxn1lHd0PKGo.jpeg)

1.3a 同時大量使用相同的Test_Cluster元件

![|554x289](upload://bGmjmkhhw5JJByTBGuDV9iZt6Ro.jpeg)

1.3b 新增NumericTest_Cluster

![|373x172](upload://lWBH50tFbF6PtRzqeZZvaUij14C.jpeg)

1.3 c Test_Cluster同時被改變(同時增加Numeric)

利用定義型別建立元件的優點

既然經過型別定義的元件具有這樣的特性,那要如何運用在程式裡呢?

在這裡我利用流程控制的方式及架構來與之搭配使用。

先利用以上述的方式先建立Test_EnumTest_Cluster,然後利用State Machine建立流程。在程式編輯中,有時會因為必須要加入(刪除)某些程序或加入(刪除)某些元件而改變。

![|526x367](upload://kLdXMVbbliA6gwoRS1QDAQp2szE.jpeg)

1.4新增Step3Step4項目到Test-Enum

1.4Test_Enum的項目裡增加Step3Step4時,所有引用的Test_Enum項目都會立刻增加新增的Enum Item 1.5

![|438x180](upload://jKham5UiBZDNlee25ccRDvtCQfI.jpeg)

1.5 其他相同的Test_Enum元件依據新增的結果而改變

但是,如果使用沒有型別定義的元件,當改變Test_EnumItem時 圖1.6,雖然左邊的Test_Cluster裡的Test_Enum被改變,但是就因為使用的元件不是利用型別定義方式建立的元件,而造成在其他地方的Test_Enum沒有同時改變,所以就會出現圖1.7的壞線(Broken Wires)情形。

![|534x323](upload://7GMbiAEksJuEtta5IWQ3kvl3Pv5.jpeg)

1.6 新增Enum項目

![|556x181](upload://ivIm9tle3kZ3E9AsOrXjEpTvdY1.jpeg)

1.7 因為沒有使用Strict Type Def功能,而產生壞線(Broken Wires)

而且,左邊的Enum項目改變了,但是右邊的Enum項目卻還沒。

建立Strict Type Definition步驟

步驟一:

在人機介面上建立控制元(Control)或顯示元(Indicator)。並在該元件上按滑鼠右鍵選擇Advance>>Customize進入Edit Customize Control 畫面。

![|341x350](upload://2iZQCzpk1Ml55eibsDOwd8o2kmQ.jpeg)
![|270x185](upload://mXHdydzL1hWAQBU3B480vXw8Cr6.jpeg)

步驟二:

編輯該元件完成後,選擇畫面上之下拉選單,選擇以Strict Type Def.方式存檔。

![|270x185](upload://55ZIbUZXA2UkiclsJ4fCijuwSXu.jpeg)

步驟三:

選擇存檔的名稱。

![|465x123](upload://71huCVx6uLSjlHKl4qz2RP4RtC8.jpeg)

步驟四:

關閉Edit Customize Control視窗。此時會出現〝是不是要替換控制元〞的視窗,如果選〝Yes〞,則會將Front Panel上的Enum元件做替置的動作。

如果選〝No〞,則不會替置Enum元件。確定後,完成Strict Type Definition

![|293x109](upload://nBzKnVK9ci5EhH1RMoq9O38ha3t.jpeg)

變更Strict Type Definition步驟

步驟一、

Front Panel上選擇愈變更編輯的元件按滑鼠右鍵,並選擇Open Type Def.選項。進入Edit Customize Control 畫面。

![|296x251](upload://mKQnrO87yug9vxAh5kidtWuvuAg.jpeg)

步驟二、

針對Control元件進行編輯,完成編輯後關閉並存檔。這樣就完成編輯變更動作,而且,所有同源的元件(例中為Enum元件)都會被改變。

結論

利用Type DefinitionStrict Type Definition的好處是在於,利用它的特性將所有元件與Cluster配合做一個統一的規劃,也就是做好元件管理的動作,避免在Block Diagram上佈滿元件。

在程式編輯的過程中參()數的增加或減少是無法避免的,縱使再怎樣進行縝密的程式規劃也一定會遇到這樣的問題,但是如果能夠善用工具及想法,有效的進行管理及規劃,我想對於往後的程式維護上,一定會有所益助。

不只如此,尤其是在當你使用State Machine方式做順序控制時,可以利用這樣的方式來增加或刪除流程,以增加在編輯流程時的適應性。

有關於Type Definitions功能,這裡只是提出一些簡單的方式,讓大家對這個功能有一個概念,善加利用。要如何發揮最好的效果,端看身為使用者的你如何來使用這些工具。