labview深入探索xcontrol_第1頁(yè)
labview深入探索xcontrol_第2頁(yè)
labview深入探索xcontrol_第3頁(yè)
labview深入探索xcontrol_第4頁(yè)
labview深入探索xcontrol_第5頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、labview深入探索-xcontrolcontrol是LABVIEW8.x新增的功能,中的我們是再熟悉不過(guò)了,這個(gè)到底代表什么那,到網(wǎng)站上也沒(méi)找到它的英文定義,可能相當(dāng)與中的?雖然無(wú)法弄清楚它的定義,但是它的作用是清楚的,我個(gè)人理解它更象中的控件自畫,也具備了一些的能力,與的最大區(qū)別是是獨(dú)立于平臺(tái)的,可用于各種編程環(huán)境,從這點(diǎn)來(lái)說(shuō),可以把它看做內(nèi)部的 activex,MFC中的控件自畫是這樣的,當(dāng)我們要做一個(gè)特殊形狀的控件時(shí),可以設(shè)置它的一個(gè)屬性是自畫,own draw,也就是說(shuō),這個(gè)控件是用戶自己畫出來(lái)的,比如一個(gè)按鈕,當(dāng)鼠標(biāo)進(jìn)入它的控制區(qū)域,會(huì)自動(dòng)顯示凸起狀態(tài),還可以自動(dòng)改變顏色,IE菜

2、單就是這樣,當(dāng)鼠標(biāo)移入的時(shí)候,背景色自動(dòng)變成蘭色,離開(kāi)后,又自動(dòng)恢復(fù),實(shí)際上,它是在響應(yīng)兩個(gè)事件,MOUSE_ENTER 和MOUSE_LEAVE事件在xcontrol出現(xiàn)以前,我們也可以對(duì)一個(gè)控件通過(guò)屬性節(jié)點(diǎn)和事件結(jié)構(gòu)實(shí)現(xiàn)這種動(dòng)態(tài)變化,但是有著本質(zhì)的區(qū)別,xcontrol通過(guò)事件結(jié)構(gòu)判斷事件,利用屬性節(jié)點(diǎn)改變其顯示方式是完全在內(nèi)部實(shí)現(xiàn)的,因此它是可以重用的,從使用方法上它和一般的控件沒(méi)有任何區(qū)別,我們完全可以把它看成又給我們提供了新的控件,我的文章里多次提到的概念,有了XCONTROL,我們不但可以保存數(shù)據(jù),而且有了顯示的能力,所以說(shuō),對(duì)于基于組件編程的,能力有了很大的提高雖然xcontro

3、l是一個(gè)新增的特性,但是它的制作方法實(shí)際上我們或多或少地都涉及到了,這就使得制作XCONTROL變得相對(duì)容易了可以看出,我們通過(guò)事件結(jié)構(gòu)編程實(shí)現(xiàn)了當(dāng)鼠標(biāo)移入BOOLEAN控件區(qū)域時(shí),BOOLEAN控件的CAPTION和COLOR自動(dòng)發(fā)生了改變,但是所有的控制代碼都是在主循環(huán)里完成了,是通過(guò)控件外部改變的,因此,我們無(wú)法重用這個(gè)控件,假如我們需要100個(gè)這樣的控件,我們需要在事件結(jié)構(gòu)中分別對(duì) 100個(gè)控件做類似的編程,這顯然是非常麻煩的.最好的辦法是讓這段代碼在控件內(nèi)部完成,這樣對(duì)于使用者來(lái)說(shuō),這和一般的控件沒(méi)有區(qū)別,這樣有效地實(shí)現(xiàn)了封裝,所有的一切從用戶的角度看,就象調(diào)用一個(gè)ACTIVEX.X

4、CONTROL可以輕松實(shí)現(xiàn)這個(gè)功能我們知道LV的控件是面向?qū)ο蟮膶哟卫^承結(jié)構(gòu),每個(gè)控件都繼承了它的父類的屬性和方法,但是對(duì)于一個(gè)具體的控件,它的屬性和方法都是固定的我們無(wú)法刪除或者增加這個(gè)控件的屬性和方法.對(duì)于XCONTROL,我們可以簡(jiǎn)單地理解成繼承了一個(gè)基本控件,并在此基礎(chǔ)上,用戶增加的自己的屬性和方法,是一個(gè)重新定義的,增加的大量功能的新的控件.下面看看制作XCONTROL的具體過(guò)程.這樣一個(gè)基本的XCONTROL的結(jié)構(gòu)就建立起來(lái)了,存儲(chǔ)并重新命名lv自動(dòng)生成兩個(gè)自定義控件,分別是data.ctl和state.ctl,兩個(gè)VI,分別是Facade.vi和Init.vi這四個(gè)部分是任何XC

5、ONTROL都必須包括的基本構(gòu)件。LV幫助文件中稱為required abilities,必須的能力(直譯),data.ctl代表該XCONTROL表示的數(shù)據(jù)類型,一般的控件也都代表一種數(shù)據(jù)類型,比如DOUBLE,BOOLEAN,ARRAY等等data.ctl是自定義控件,可以根據(jù)需要修改成您需要的數(shù)據(jù)類型,比如對(duì)于一個(gè)學(xué)生的個(gè)人信息,我們應(yīng)該生成一個(gè)簇,包括姓名,性別,年齡,班級(jí)等。state.ctrl代表XCONTROL的顯示狀態(tài),它和DATA.CTL一樣,都是嚴(yán)格類型定義。它包含的信息是我們想控制XCONTROL的屬性。根據(jù)我們上面的例子,我們定義四種屬性,1:鼠標(biāo)進(jìn)入標(biāo)題 2:鼠標(biāo)離開(kāi)

6、標(biāo)題 3:鼠標(biāo)進(jìn)入顏色 4:鼠標(biāo)離開(kāi)顏色。xcontrol中最復(fù)雜的就是facade.vi,facade英文意思是一個(gè)物體的正面,這里翻譯成外觀比較合適。當(dāng)xcontrol被加載到前面板或者一個(gè)包含XCONTROL的VI調(diào)入內(nèi)存的時(shí)候,該VI自動(dòng)被調(diào)用,以便在顯示之前做一些必要的初始化工作。我們還是用上面的例子制作一個(gè)簡(jiǎn)單的XCONTOL來(lái)說(shuō)明一下,首先我們修改DATA.CTL,用一個(gè)BOOLEAN 類型替代它。然后修改STATE.CTL,加入必要的屬性。INIT是你在前面板生成控件時(shí)自動(dòng)調(diào)用了,同時(shí)它內(nèi)部存儲(chǔ)了版本信息,當(dāng)檢查到當(dāng)前版本發(fā)生變化,自動(dòng)更新。INIT一般不需要更改。重點(diǎn)看一下F

7、ACADE.VI,它自動(dòng)生成幾個(gè)事件。1:TIMEOUT事件。在事件結(jié)構(gòu)中,如果沒(méi)有任何事件發(fā)生,TIMEOUT如果位連接,默認(rèn)值是-1,表示永遠(yuǎn)不發(fā)生超時(shí)事件,如果連接一個(gè)固定的數(shù)值,比如100,單位是毫秒,如果沒(méi)有事件發(fā)生,則每100MS觸發(fā)一次超時(shí)事件,需要注意的是上面的超時(shí)事件連接的是0,表示無(wú)事件時(shí)立即超時(shí),同時(shí)循環(huán)條件端子選擇的是 STOP IF TRUE,因此,一旦超時(shí)發(fā)生,將立即退出循環(huán)。這和一般的事件結(jié)構(gòu)使用方法完全不同,一旦循環(huán)退出,整個(gè)事件檢測(cè)就結(jié)束了,不會(huì)再響應(yīng)其他事件了。而在XCONTROL中,這顯然是不能這樣做的,因?yàn)閄CONTROL肯定要不斷響應(yīng)事件,按常規(guī)想法,

8、它應(yīng)該連接的是-1,循環(huán)永遠(yuǎn)不退出。即使永遠(yuǎn)不退出,持續(xù)檢測(cè)事件,這樣也是有問(wèn)題的,如果有大量的XCONTROL,這將導(dǎo)致數(shù)量龐大的事件結(jié)構(gòu)循環(huán),這樣會(huì)極大地影響程序性能。仔細(xì)分析后,我得出結(jié)論,上面的事件結(jié)構(gòu)實(shí)際上是個(gè)回調(diào)函數(shù)。CVI的回調(diào)函數(shù)是這樣定義的:int CVICALLBACK PlotData (int panel, int control, int event,                  &#

9、160;       void *callbackData, int eventData1, int eventData2);VC也是類似的。它的目的是,如果面板或者面板上某個(gè)控件發(fā)生的事件,比如鼠標(biāo)按下,值改變等等,將自動(dòng)調(diào)用這個(gè)函數(shù),注意是操作系統(tǒng)自動(dòng)調(diào)用這個(gè)函數(shù),不是用戶調(diào)用的。FACADE.VI正是這個(gè)功能,一旦XCONTROL發(fā)生任何事件,LABVIEW將自動(dòng)調(diào)用這個(gè)回調(diào)函數(shù),回調(diào)函數(shù)響應(yīng)事件后,因?yàn)闆](méi)有其它事件發(fā)生,會(huì)立即觸發(fā)超時(shí),導(dǎo)致循環(huán)結(jié)束,回調(diào)函數(shù)退出。具體過(guò)程是這樣的:XCONTROL 發(fā)生事件-labview調(diào)用

10、FACADE.vi->響應(yīng)事件-超時(shí)退出  下次發(fā)生事件時(shí)重復(fù)上面的過(guò)程。LABVIEW除了超時(shí)事件外,還自動(dòng)生成了其它幾個(gè)事件,可以把它們稱做系統(tǒng)事件,對(duì)于任何的XCONTROL,這幾個(gè)事件都是必須存在的。2:Data Change事件Data Change 事件是指前面自定義數(shù)據(jù)類型DATA的值改變了所發(fā)生的事件。事件是如何發(fā)生的那,當(dāng)你用數(shù)據(jù)流,或者局部變量以及VALUE屬性節(jié)點(diǎn)改變了XCONTROL的值,則觸發(fā)該事件。這一點(diǎn)和一般的事件結(jié)構(gòu)也是不同的,對(duì)于一般地控件,用局部變量或者Value屬性節(jié)點(diǎn)是不會(huì)產(chǎn)生事件的,如果改變了同時(shí)需要觸發(fā)事件,我們不得不用VA

11、LUE(SIGNAL)事件來(lái)人為觸發(fā)。當(dāng)我們?cè)谇懊姘迳蛇@個(gè)控件時(shí),DATA CHANGE事件自動(dòng)觸發(fā),盡管我們此時(shí)并未改變它的值。3:DISPLAY STATE CHANGE-顯示狀態(tài)改變事件。當(dāng)你在前面板拖入(生成)這個(gè)XCONTROL的實(shí)例時(shí),或者復(fù)制控件,以及用自定義的屬節(jié)點(diǎn)改變控件時(shí)觸發(fā)這個(gè)事件。我們可以利用這個(gè)事件來(lái)改變XCONTROL的外觀特性。4:方向改變事件當(dāng)一個(gè)XCONTROL從控制器改變成指示器或者從指示器改變成控制器時(shí)產(chǎn)生該事件。利用這個(gè)結(jié)構(gòu),我們可以把指示器和控制器顯示成完全不同的形狀。對(duì)于常規(guī)的控件,我們可以用鼠標(biāo)右鍵的CAHNGE TO CONTROL和CHANG

12、E TO  INDICATOR來(lái)改變,XCONTROL也是如此。5:Exec State Change-執(zhí)行狀態(tài)改變左側(cè)傳入的RUN MODE?為真表示運(yùn)行狀態(tài),為假表示編輯狀態(tài),這個(gè)事件的基本做用是,指示器在編輯狀態(tài)下是可以更改它的值的,而在運(yùn)行狀態(tài)下是不允許用戶直接修改的,只能通過(guò)數(shù)據(jù)流或者局部變量來(lái)修改,這樣,我們必須知道當(dāng)前是運(yùn)行還是編輯狀態(tài)。另外經(jīng)過(guò)實(shí)際測(cè)試,當(dāng)一個(gè)XCONTROL被拖入前面板(生成控件實(shí)例)的時(shí)候,將按照下面的次序產(chǎn)生事件:調(diào)用INIT.VI->DATA CHANGE EVENT->STATE CHANDE EVENT需要注意的是左側(cè)共有四個(gè)嚴(yán)

13、格類型的數(shù)據(jù)傳入循環(huán):DATA IN-它是上面定義的DATA.CTLDISPLAY STATE IN-它是上面定義的STATE.CTLContainer state-包容器狀態(tài)Action-動(dòng)作我們看看Container State 和Action的定義Container State 是一個(gè)嚴(yán)格類型定義的簇,有三個(gè)元素組成:.Indicator ? ,boolean  用來(lái)表示當(dāng)前的XCONTROL是控制器還是指示器.Run Mode?    boolean  用來(lái)表示當(dāng)前的XCONTROL是處于運(yùn)行狀態(tài)還是編輯狀態(tài).RefNum &

14、#160;     refnum   xcontrol自身的控件參考.Action 也是一個(gè)嚴(yán)格類型的簇,有三個(gè)元素組成:.Data Changed  boolean   如果該項(xiàng)給定TRUE,則觸發(fā)DATA CHANGE事件.State Changed boolean   如果該項(xiàng)給定為TRUE,則觸發(fā)Display State CHANGE事件.Action Name        

15、     用戶可以自己定義的字符串信息,比如我們可以指明是哪個(gè)要求觸發(fā)DATA CHANGE事件的 .接下來(lái),我們來(lái)制作這個(gè)XCONTROL的屬性和方法我們?cè)跔顟B(tài)中已經(jīng)定義了四個(gè)屬性:1.進(jìn)入標(biāo)題,2.離開(kāi)標(biāo)題 3.進(jìn)入顏色 4.離開(kāi)顏色這四個(gè)屬性是子定義的屬性,完成后,LV自動(dòng)在屬性節(jié)點(diǎn)中增加四個(gè)項(xiàng)目.屬性節(jié)點(diǎn)一般都定義成可讀可寫的,根據(jù)需要,也可以定義成單向的.當(dāng)我們打開(kāi)一個(gè)VI,包含XCONTROL時(shí),XCONTROL是不允許編輯的,在調(diào)試XCONTROL的過(guò)程我們需要頻繁切換XCONTROL的設(shè)計(jì)窗口和使用窗口,用上面的UNLOCK LIBARAY FOR EDITING,可以暫時(shí)啟動(dòng)XCONTROL的編輯,這是使用XCONTROL的窗口處于錯(cuò)誤中斷狀態(tài).編輯完畢后,用APPLAY CHANGES TO INSTANCE,這樣所有用到這個(gè)XCONTROL的VI,就自動(dòng)更新了.只所以先介紹它,是因?yàn)樗且粋€(gè)非常好的方法,是下面調(diào)式中必須用到的.輸入名稱后,屬性就自動(dòng)生成了,最好設(shè)定一個(gè)虛擬目錄,把所有的屬性都集中到一起,這樣易于管理. 我們以鼠標(biāo)進(jìn)入顏色為例來(lái)說(shuō)明一下屬性的設(shè)計(jì)過(guò)程.非常簡(jiǎn)單,需要注意的是,LV自動(dòng)生成的面板中,給出的是B

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論