2015-09-04 36 views
0

我有一個複雜的GUI,包含許多控件和子VI。我將控件的值傳遞給子VI,當我需要更改控件的某些屬性(即禁用它們)時,我會傳遞參考。在Labview中創建全局控件

我的程序框圖太大了。所以我想使用全局變量。然後,我可以將子VI顯示爲圖標,並在圖上節省大量空間(我的子VI有很多輸入)。

但是我應該怎樣處理其屬性需要改變的控件(現在我將引用傳遞給它們而不僅僅是值)?當我使用全局變量時,我只能得到它的值,僅此而已。

我可以爲我所有的控件創建全局引用,並在我的子VI中使用它們,但是子VI很不清楚,我想避免它。

那麼如何在Labview中創建全局控件?

編輯:我在我的主VI中有一個名爲「Motor ID」的控件。當我想連接到子VI中的電機時,我傳遞了該控件的引用。在子VI中,如果連接已建立,則使用屬性「disabled」來禁用控件。

當我使用全局變量來保存電機ID時,我所能做的就是獲取電機ID並與電機連接。但是我不能禁用我的主VI中的控制。

+0

所以我不清楚。您不知道如何在LabVIEW中創建全局變量,或者如何更改子VI中的控件屬性? –

+0

我知道如何在Labview中創建一個全局變量。我也知道如何改變子VI中的控制屬性,但前提是我在子VI中引用了我的控件。我不知道的是如何使用全局變量來改變控件的屬性。 – user2738748

+0

如果您的圖表雜亂無章,您認爲需要使用全局變量進行清理,那麼您應該考慮使用選項卡控件。 – user122302

回答

1

根據你的意見,我會說你不能改變使用全局的控件/指標的屬性。

記住全局變量只傳遞控件的VALUE而沒有與它們相關的任何屬性。您必須將控件引用傳遞給子VI才能更改FP上的控件屬性。

我可以建議你將所有控件分組到一個集羣中,創建該集羣的引用並將一個引用傳遞給子VI以避免代碼複雜化。或者,您可以將控件的所有引用歸入羣集,並將一條線路傳遞給子VI。

希望這會有所幫助。

0

您可能只想調查子面板。頂級VI中的子面板是託管子VI面板的單個控件。您可以打開對您的子VI的VI引用,並將其面板放在子面板控件中。然後,子VI只需更新自己面板上的控件......不涉及控制參考。

+0

謝謝,但我在許多子VI中使用了一些控件,所以它不會幫助。但這是一個很好記住的訣竅。 – user2738748

+0

多個子VI中的相同控件?這在設計精良的LV計劃中非常不尋常。這種設計不僅容易出現競爭條件,而且對於數據移動來說效率相當低。如果你的程序有很多無法解釋的錯誤,那麼你可能會看上去很長很難,因爲這可能是問題的根源。 (我不是說不這樣做 - 對某些人來說這很有用 - 我只是說我與很多LV用戶的廣泛經驗表示這是一個經常遇到的問題。) – srm

+0

這是我第一個在Labview - 可能我的設計不好。我希望它沒有任何錯誤 - 它的工作方式如何,但我必須清理程序框圖。也許相同的控制不是一個好的選擇 - 相同的變量(即comport number或我的設備的ID)。爲什麼它不尋常,它有什麼問題?我會很感激任何建議 - 我正在學習Labview。 – user2738748

2

我會說你有幾個選擇,不幸的是他們都可能需要重大的代碼重組,因此很多時間。其中兩個已經被其他人聲明,但我會在這裏重複。

  1. 使用全局參考
  2. 整理相關數據爲簇
  3. 利用子面板
  4. 查找到X-Controls
  5. 使用多個窗口和子的VI,而不是標籤。
  6. 使用CVT API來存儲您的全局

而且深入到每一個選項...

  1. 使用全局引用僅僅意味着您將所有控件的引用存儲到它們自己的全局變量中,然後在您的VI中調用它們。通過全局引用,您可以修改任何屬性,獲取或設置值,從本質上控制VI,就如同您可以從該VI訪問前面板一樣,而無需通過輸入節點傳遞參考。這可能會造成初始化混亂,並且需要爲每個控件創建引用,但它對於功能和可讀性可能是值得的。

  2. 將數據組織成簇總是在框圖上看起來更好看,我會鼓勵儘可能地做到這一點。總是尋找機會將數據放入羣集中。但要小心,因爲如果將羣集傳遞到子VI中,則會將所有數據從羣集傳遞到子VI中,並且如果項目佔用大量內存,則會減慢程序的速度。它們對組織和清理圖表很有用,但要注意如何將它們傳遞給程序。

  3. 子面板基本上允許你有一箇中央前面板,並在你喜歡的時候換掉VI。您可以通過調用節點來控制VI的執行,並通過將其引用傳遞給圖表中的子面板塊來選擇子面板中顯示的VI。如果您有幾個獨立的操作,並非所有操作都必須立即顯示,這非常有用。

  4. X-Controls與子面板類似,除了方式較冷。一個X控件本質上是一個集羣和一個子面板的組合,可以放到你的前面板上。它在程序框圖中表示爲普通控件,但數據操作和處理在內部事件結構中獨立處理。 X-Controls可能會有些混亂,如果使用不當,實際上可能會使代碼更復雜,而不是清理它。在嘗試將它們集成到代碼之前,確保完全理解它們的行爲。

  5. 如果您可以將代碼分區到多個窗口中,則可以使用運行狀態機的控件VI來確定向用戶顯示哪個窗口。這種方法與子面板方法密切相關。任何由所有VI使用的數據都可以存儲到全局變量中,並且可以與下面提到的CVT API一起使用。我對CVT(當前值表)API沒有太多經驗,但我知道如果使用正確,它可以是相當強大的。本質上,CVT允許您將所有值存儲到全局變量中,但是您可以使用鍵訪問它們,而不是通過將全局變量放到圖上。密鑰是在創建時分配給全局的字符串。 (他們可以在運行時創建並沒有事先分配!)

除非上述建議,最快的實施方法是,使用一個事件循環響應前面板活動的要求。創建所有需要表示數據的全局變量,並根據需要在VI中使用它們來移除輸入。如果用戶更新具有關聯全局的前面板項目,則更新全局。注意避免競爭條件,並儘可能從只有一個位置寫入全局變量(CVT庫有助於避免使用功能全局變量的競態條件)。在並行循環中,從相關的全局變量中更新指標。

總而言之,清理程序框圖和前面板有很多方法,但總的來說,最好考慮從一開始就以避免混亂的方式來構建代碼!