Labview基本常見(jiàn)問(wèn)題解答(二)
25、在子vi運(yùn)行過(guò)程中,如何將數(shù)據(jù)實(shí)時(shí)傳遞到調(diào)用它的主vi中,而不是等待子VI運(yùn)行結(jié)束后才在主VI中獲得子Vi的輸出數(shù)據(jù)?回答:使用帶控制參量的屬性節(jié)點(diǎn)可以實(shí)現(xiàn)在子VI中修改主VI屬性的目的,由于控件的值(Value)也是控件的屬性之一,因此可以使用控制參量是新以上要求。在子VI中,使用帶有控制參量的屬性節(jié)點(diǎn),將要傳遞到主VI的數(shù)據(jù)寫(xiě)入這個(gè)屬性(Value)中,將控制參量要設(shè)置為Control,并且在子VI的連接器中進(jìn)行定義;在主VI中,為接收子VIshuju的控件建立一個(gè)控制參量,將這個(gè)控制參量連接到子VI,即可達(dá)到在主VI中實(shí)時(shí)獲取子VI數(shù)據(jù)的要求。 其實(shí)以上這段話,我自己也不是很明白的,什么叫帶控制參量的屬性節(jié)點(diǎn)。這兩天看了下下,發(fā)現(xiàn)VI SERVER的QUEUE是可以實(shí)現(xiàn)從SUBVI實(shí)時(shí)傳遞數(shù)據(jù)到MAINVI的。
本文引用地址:http://butianyuan.cn/article/193754.htm這是一個(gè)隊(duì)列例子的前面板,下面是框圖,
這是MAINVI的框圖
這是SUBVI的框圖。
26、事件結(jié)構(gòu)中兩種事件類(lèi)型,一個(gè)是通知事件(Notify),另一個(gè)是過(guò)濾事件(Filter),這兩種事件的區(qū)別是什么?回答:對(duì)于通知事件,程序可以感知事件的發(fā)生并且響應(yīng)該事件,然后再處理在事件結(jié)構(gòu)中定義的任務(wù);對(duì)于過(guò)濾事件,程序感知事件發(fā)生后首先處理在事件結(jié)構(gòu)中定義的任務(wù),然后根據(jù)時(shí)間結(jié)構(gòu)中的設(shè)定(Discard?)決定是否響應(yīng)該事件。舉例來(lái)說(shuō),時(shí)間為Panel Close,在事件發(fā)生時(shí)彈出一個(gè)對(duì)話框。如果是通知事件,首先響應(yīng)事件關(guān)閉了前面板,因此沒(méi)有辦法處理“彈出對(duì)話框”的任務(wù);如果是過(guò)濾事件,首先處理“彈出對(duì)話框”的任務(wù),然后根據(jù)事件結(jié)構(gòu)中的Discard的值判斷是否關(guān)閉前面板,若Discard為T(mén),則不關(guān)閉,若為F,則關(guān)閉。
27、LV7.1主程序已經(jīng)完成,想在主程序運(yùn)行之前,先執(zhí)行一個(gè)別的界面,當(dāng)退出該界面的時(shí)候,再顯示主界面,如何實(shí)現(xiàn)?回答:可以在主程序框圖之前,將主程序前面板隱藏,調(diào)用子程序,推出子程序后,再顯示主程序前面板。這可以通過(guò)VI屬性節(jié)點(diǎn)來(lái)實(shí)現(xiàn),先調(diào)用一個(gè)屬性節(jié)點(diǎn),右鍵選擇Select Class/VI Server/VI,然后在屬性中選擇Front Pannel Window/State屬性,分為設(shè)為Hide和Standard。Demo程序見(jiàn)項(xiàng)目進(jìn)程管理中AE-01labview編程技術(shù)討論的“主界面隱藏”。
28、將LV7.1前面板控件(graph)的內(nèi)容保存成圖像文件,在LV中如何編程實(shí)現(xiàn)?回答:右鍵控件創(chuàng)建Invoke Node,選擇方法為“Get Panel Image”;另外,調(diào)用Graphics Sound/Graphics Formats下面的VI,將第二步獲得的圖像寫(xiě)入相應(yīng)格式文件中。
29、在LV程序中使用matlab,生成exe文件以后,發(fā)現(xiàn)文件可以運(yùn)行但是無(wú)法彈出運(yùn)行界面?;卮穑涸趌v中如果使用了MATLAB的話,生成EXE文件的時(shí)候需要加一個(gè)名為馬特script.dll的文件作為支持文件,此外在目標(biāo)PC上必須安裝MATLAB軟件。
30、LV7.1使用VI Server的方式,在一臺(tái)機(jī)器上調(diào)用另一臺(tái)機(jī)器上的VI并運(yùn)行,需要做哪些設(shè)置?(兩臺(tái)機(jī)器在同一個(gè)網(wǎng)絡(luò)中)回答:1)在Tools/Options/VI Server:Configurtion下選擇Protocols為T(mén)CP/IP,這樣才能在網(wǎng)絡(luò)中使用VI Server,否則只是在本機(jī)上使用VI Server。 2)在Tools/Options/VI Server:TCP/IP Access下設(shè)置可以訪問(wèn)的VI Server的主機(jī)IP。如果不進(jìn)行設(shè)置,遠(yuǎn)程機(jī)器將無(wú)法調(diào)用需要的VI。
31、在LV7.1中如何在運(yùn)行程序后,前面板上去掉windows的關(guān)閉按鈕回答:可以在LV的前面板FILE/VI properties/windows appearance/customize,去掉allow user to close window對(duì)鉤,保存設(shè)置,運(yùn)行后可以實(shí)現(xiàn)效果。
32、LV7.1中如何清除前面板的Graph,即在每次運(yùn)行時(shí),讓Graph重新顯示數(shù)據(jù)而不顯示歷史數(shù)據(jù)?;卮穑涸贕raph里面可以通過(guò)創(chuàng)建Local Varible并對(duì)其賦空來(lái)解決。而在Chart里可以通過(guò)創(chuàng)建History Data屬性節(jié)點(diǎn)并對(duì)其賦空來(lái)解決。
33、LV7.1中怎樣將一個(gè)數(shù)組中所有滿足條件的元素的索引值提取出來(lái),保存成一個(gè)新的數(shù)組?回答:使用移位寄存器、Build Array和Select函數(shù)就可以做到,具體方法:1)使用FOR循環(huán),在循環(huán)邊框上添加一個(gè)移位寄存器,并初始化為一維空數(shù)組,類(lèi)型為I32;2)在循環(huán)內(nèi)部使用Select函數(shù),每次循環(huán)都判斷數(shù)組中的一個(gè)元素,并將判斷結(jié)果(布爾量類(lèi)型)送入Select的“s”輸入端;3)每次循環(huán)都使用Build Array函數(shù)將左端的移位寄存器直接連接到Select函數(shù)的“f”輸入端,這樣Select函數(shù)的輸入端就是所有滿足條件的元素的索引值;4)將Select函數(shù)的輸出端連到右端的移位寄存器上。這樣程序結(jié)束后,F(xiàn)or循環(huán)的右端移位寄存器的數(shù)據(jù)就是需要的索引值。
35 移位寄存器和反饋節(jié)點(diǎn)的區(qū)別?回答:反饋節(jié)點(diǎn)箭頭的起始端相當(dāng)于移位寄存器的右端,箭頭的末端相當(dāng)于寄存器的左端。區(qū)別在于移位寄存器的左端元素可以通過(guò)下拉下拉方式增加,而反饋節(jié)點(diǎn)的端口是無(wú)法增加的。
36、如何讓子VI的前面板也顯示出來(lái)?回答:右鍵點(diǎn)擊子VI,選擇SUBVI NODE……然后再選擇第2項(xiàng)SHOW……就是當(dāng)子VI被調(diào)用時(shí),顯示前面板。
37、彈出窗口無(wú)法進(jìn)行任何操作,并且被主界面擋住,如何解決?回答:主界面VI properties中windows appearance里customs設(shè)定windows behavior為normal了,因此主界面保持在最前端,應(yīng)該設(shè)為default。
38、在程序中實(shí)現(xiàn)按對(duì)應(yīng)鍵彈出窗口,在窗口已打開(kāi)情況下繼續(xù)可打開(kāi)其他窗口?回答:在程序框圖內(nèi)使用并行循環(huán)。每一個(gè)可能要運(yùn)行的子VI(打開(kāi)其窗口)及其運(yùn)行條件(按鍵)各占一個(gè)循環(huán)。各個(gè)循環(huán)相互獨(dú)立,互不干擾。在考慮同時(shí)關(guān)閉各個(gè)窗口時(shí),需要使用全局變量。
39、在調(diào)度Vi的時(shí)候,經(jīng)常無(wú)意地把面板上的一些控件移動(dòng)了位置。還要花很大功夫去重新布置這些面板控件。有沒(méi)有辦法讓已經(jīng)設(shè)計(jì)好的控件的位置固定不動(dòng)?回答:首先我們可以通過(guò)Operate菜單中的Change To Run/Edit Mode命令,設(shè)置VI為運(yùn)行或編輯模式。面板控件的移動(dòng)只在編輯模式下有效。在運(yùn)行模式下是不能移動(dòng)任何控制的位置的。第二種方法是,選擇指定的控件(可多選),然后在菜單的Reorder下拉菜單下,選擇LOCK命令,來(lái)鎖住指定的控件。這樣,除非使用Unlock命令解鎖。否則是無(wú)法移動(dòng)指定控件的位置。
40、為什么子VI節(jié)點(diǎn)的輸出端口沒(méi)有數(shù)據(jù)傳遞出來(lái)?回答:這類(lèi)問(wèn)題的主要原因是子VI中存在著循環(huán)。如果子VI中的循環(huán)不能推出,子VI節(jié)點(diǎn)就一直在運(yùn)行。對(duì)于LV的數(shù)據(jù)流編程機(jī)制來(lái)講,一個(gè)節(jié)點(diǎn)沒(méi)有執(zhí)行完,它的所有輸出端口就不會(huì)有有效數(shù)據(jù)輸出。解決方法:一是把子VI中的循環(huán)提出到主VI里來(lái)。二是使用全局變量,并在主VI中使用并行循環(huán)來(lái)控制子VI的結(jié)束。
41、怎樣在LABVIEW中實(shí)現(xiàn)全屏顯示?回答:1)要全屏顯示,在File/VI Properties/Window Size/Size the front panel to the width and height of the entire screen打上鉤,就可以了。2)是否控件顯示方法,第一,要完全不顯示時(shí),可以把控件放在界面看不見(jiàn)的地方他就不顯示了;第二種方法,你可以使用控件的屬性進(jìn)行控制控件的Visible,具體方法是在程序框圖里點(diǎn)擊鼠標(biāo)右鍵/Create/Properties Node,選擇Visible,并將其改為Change to Read,對(duì)Visble設(shè)置為T(mén)rue或False就可以控制控件是否顯示了 。
42、LV如何對(duì)Excel文件作數(shù)據(jù)續(xù)存?回答:使用Excel Get Last Row.vi先將Excel內(nèi)已有數(shù)據(jù)的最后一行的行數(shù)得出,再于該行開(kāi)始續(xù)存數(shù)據(jù)。
43、LV當(dāng)用鼠標(biāo)點(diǎn)擊Graph時(shí),該Graph的大小變化了,當(dāng)鼠標(biāo)離去后Graph的大小恢復(fù)到原來(lái)情況?回答:可以應(yīng)用一個(gè)Event Structure來(lái)做,添加兩個(gè)事件(一個(gè)是鼠標(biāo)點(diǎn)擊,另一個(gè)是鼠標(biāo)離去)。通過(guò)在這兩個(gè)事件中分別賦給Graph的PlotArearSize屬性節(jié)點(diǎn)不同的值,來(lái)改變Graph的大小。
44、如何用LABVIEW編程檢測(cè)U盤(pán)?回答:需要調(diào)用Windows API函數(shù)GetDriveTypeA,其函數(shù)返回值盤(pán)符類(lèi)型的數(shù)據(jù)類(lèi)型為長(zhǎng)整形,輸入?yún)?shù)為檢測(cè)盤(pán)符。調(diào)用CLFN.vi選擇windowssystem32kernel32.dll,選擇GetDriveTypeA,設(shè)置Return Type為Numeric Signed 32-bit Integer;再添加參數(shù)nDrive,設(shè)置參數(shù)類(lèi)型為STRING和格式為C String Pointer。運(yùn)行時(shí)在輸入端填上要檢測(cè)的U盤(pán)盤(pán)符,返回結(jié)果為時(shí)表示為DRIVE_REMOVABLE即為可移動(dòng)的U盤(pán)。
評(píng)論