新聞中心

        EEPW首頁 > 測試測量 > 設計應用 > labview深入探索----xcontrol

        labview深入探索----xcontrol

        作者: 時間:2017-01-09 來源:網絡 收藏

        這和一般的事件結構使用方法完全不同,一旦循環退出,整個事件檢測就結束了,不會再響應其他事件了。而在XCONTROL中,這顯然是不能這樣做的,因為XCONTROL肯定要不斷響應事件,按常規想法,它應該連接的是-1,循環永遠不退出。即使永遠不退出,持續檢測事件,這樣也是有問題的,如果有大量的XCONTROL,這將導致數量龐大的事件結構循環,這樣會極大地影響程序性能。

        仔細分析后,我得出結論,上面的事件結構實際上是個回調函數。

        CVI的回調函數是這樣定義的:

        int CVICALLBACK PlotData (int panel, int control, int event,
        void *callbackData, int eventData1, int eventData2);

        VC也是類似的。

        它的目的是,如果面板或者面板上某個控件發生的事件,比如鼠標按下,值改變等等,將自動調用這個函數,注意是操作系統自動調用這個函數,不是用戶調用的。

        FACADE.VI正是這個功能,一旦XCONTROL發生任何事件,LABVIEW將自動調用這個回調函數,回調函數響應事件后,因為沒有其它事件發生,會立即觸發超時,導致循環結束,回調函數退出。具體過程是這樣的:

        XCONTROL 發生事件----》labview調用FACADE.vi--->響應事件---》超時退出

        下次發生事件時重復上面的過程。

        LABVIEW除了超時事件外,還自動生成了其它幾個事件,可以把它們稱做系統事件,對于任何的XCONTROL,這幾個事件都是必須存在的。

        2:Data Change事件


        Data Change 事件是指前面自定義數據類型DATA的值改變了所發生的事件。

        事件是如何發生的那,當你用數據流,或者局部變量以及VALUE屬性節點改變了XCONTROL的值,則觸發該事件。

        這一點和一般的事件結構也是不同的,對于一般地控件,用局部變量或者Value屬性節點是不會產生事件的,如果改變了同時需要觸發事件,我們不得不用VALUE(SIGNAL)事件來人為觸發。

        當我們在前面板生成這個控件時,DATA CHANGE事件自動觸發,盡管我們此時并未改變它的值。

        3:DISPLAY STATE CHANGE----顯示狀態改變事件。

        當你在前面板拖入(生成)這個XCONTROL的實例時,或者復制控件,以及用自定義的屬節點改變控件時觸發這個事件。我們可以利用這個事件來改變XCONTROL的外觀特性。

        4:方向改變事件

        當一個XCONTROL從控制器改變成指示器或者從指示器改變成控制器時產生該事件。

        利用這個結構,我們可以把指示器和控制器顯示成完全不同的形狀。

        對于常規的控件,我們可以用鼠標右鍵的CAHNGE TO CONTROL和CHANGE TO INDICATOR來改變,XCONTROL也是如此。

        5:Exec State Change-----執行狀態改變

        左側傳入的RUN MODE?為真表示運行狀態,為假表示編輯狀態,這個事件的基本做用是,指示器在編輯狀態下是可以更改它的值的,而在運行狀態下是不允許用戶直接修改的,只能通過數據流或者局部變量來修改,這樣,我們必須知道當前是運行還是編輯狀態。

        另外經過實際測試,當一個XCONTROL被拖入前面板(生成控件實例)的時候,將按照下面的次序產生事件:

        調用INIT.VI---->DATA CHANGE EVENT--->STATE CHANDE EVENT

        需要注意的是左側共有四個嚴格類型的數據傳入循環:

        DATA IN---它是上面定義的DATA.CTL

        DISPLAY STATE IN----它是上面定義的STATE.CTL

        Container state-----包容器狀態

        Action--------------動作

        我們看看Container State 和Action的定義



        Container State 是一個嚴格類型定義的簇,有三個元素組成:

        .Indicator ? ,boolean 用來表示當前的XCONTROL是控制器還是指示器

        .Run Mode? boolean 用來表示當前的XCONTROL是處于運行狀態還是編輯狀態.

        .RefNum refnumxcontrol自身的控件參考.

        Action 也是一個嚴格類型的簇,有三個元素組成:

        .Data Changed boolean 如果該項給定TRUE,則觸發DATA CHANGE事件

        .State Changed boolean 如果該項給定為TRUE,則觸發Display StateCHANGE事件.

        .Action Name 用戶可以自己定義的字符串信息,比如我們可以指明是哪個要求觸發DATA CHANGE事件的 .

        接下來,我們來制作這個XCONTROL的屬性和方法

        我們在狀態中已經定義了四個屬性:1.進入標題,2.離開標題 3.進入顏色 4.離開顏色

        這四個屬性是子定義的屬性,完成后,LV自動在屬性節點中增加四個項目.屬性節點一般都定義成可讀可寫的,根據需要,也可以定義成單向的.


        當我們打開一個VI,包含XCONTROL時,XCONTROL是不允許編輯的,在調試XCONTROL的過程我們需要頻繁切換XCONTROL的設計窗口和使用窗口,用上面的UNLOCK LIBARAY FOR EDITING,可以暫時啟動XCONTROL的編輯,這是使用XCONTROL的窗口處于錯誤中斷狀態.



        關鍵詞: labviewxcontro

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 泽普县| 英德市| 板桥市| 定陶县| 视频| 淄博市| 三江| 苍山县| 衡阳市| 班戈县| 金平| 禄劝| 玛纳斯县| 方山县| 垣曲县| 刚察县| 凯里市| 大悟县| 即墨市| 卢湾区| 米泉市| 布尔津县| 马关县| 榆中县| 威远县| 郑州市| 湾仔区| 新乡市| 苗栗市| 宜都市| 杭锦后旗| 黑龙江省| 丹阳市| 江油市| 探索| 深泽县| 建昌县| 平潭县| 淅川县| 胶南市| 峡江县|