Labview基本常見問題解答(二)
25、在子vi運行過程中,如何將數據實時傳遞到調用它的主vi中,而不是等待子VI運行結束后才在主VI中獲得子Vi的輸出數據?回答:使用帶控制參量的屬性節點可以實現在子VI中修改主VI屬性的目的,由于控件的值(Value)也是控件的屬性之一,因此可以使用控制參量是新以上要求。在子VI中,使用帶有控制參量的屬性節點,將要傳遞到主VI的數據寫入這個屬性(Value)中,將控制參量要設置為Control,并且在子VI的連接器中進行定義;在主VI中,為接收子VIshuju的控件建立一個控制參量,將這個控制參量連接到子VI,即可達到在主VI中實時獲取子VI數據的要求。 其實以上這段話,我自己也不是很明白的,什么叫帶控制參量的屬性節點。這兩天看了下下,發現VI SERVER的QUEUE是可以實現從SUBVI實時傳遞數據到MAINVI的。
本文引用地址:http://cqxgywz.com/article/193754.htm
這是一個隊列例子的前面板,下面是框圖,

這是MAINVI的框圖

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















評論