Labview初學者常見問題及解答

admin @ 2014-03-26 , reply:0

1、Labview如何實現由一個事件引發其他三個事件的順序發生,且這三次事件間的時間間隔為50ms?
A:可以引用狀態機來設計程序,將觸發事件作為狀態機的狀態控制參數,後面發生的三個事件依次作為狀態機的三個順序狀態,設置狀態切換時間間隔為500ms.
 
2、labview在主程序通過局部變數不能實時看子vi的參數
A:通過局部變數只能得到子vi運行完之後的結果。可以用control reference 方式,在子vi加一個屬性節點引出一個reference。
主程序里把需要顯示的控制項創建一個reference連到子vi的reference輸入埠。另外也可以用vi server方式實現。
 
3、如何在一個graph或chart顯示多個Y軸刻度,並且使每個通道對應每個刻度?
A:在前面板上,右鍵點擊刻度,然後選擇duplicate scales,就會創建一個新的刻度。然後再點擊右鍵,選擇swap sides,就可以讓刻度顯示在圖的左邊或右邊。然後右鍵右上角的plot legend上的曲線plot,選擇Y scales然後就可以選擇與該曲線相應的Y軸SCALES。多條曲線對應多條Y軸的刻度時,是同樣的方法。 
 
4、如何從labview中打開一個pdf文件?
A:最簡單的方法:用system exec.vi實現,在system exec.vi的command line 埠創建一個常量,輸入adobe reader 的路徑,再加上文件名等幾個參數就可以實現上述要求。舉例如下:如果要拉開位於c盤的1234.pdf文件可以這樣寫“C:\Program files\Acrobt 7.0\Acrobat\Acrobat.exe”/t “C:\1234.pdf” “username”其中C:\Program files\Adobe\Acrobt 7.0\Acrobat\Acrobat.exe是Adobe Reader 的安裝路徑,/t是命令參數,C:\1234.pdf則是要打開的文件名,最後的username是用戶的名字。 
 
5、採集數據在graph如何顯示系統時間,並且隨著採集點數時間不斷刷新。
A:有兩種方式,一種是採集波形數據然後輸出給graph,在graph上選擇顯示絕對時間,並且去掉ignore time stamp選項。第二種是採集數據文件,然後用獲取時間的vi獲取當前時間,然後把採集的數據文件和當前vibuild成波形文件再給 graph.graph的設置和前種方法一樣。這樣就可以顯示出時間雖採集點不斷刷新的效果。 
 
6、report generation里的standard和HTML究竟是什麼意思?
A:STANDARD和HTML是LV本身就有的報表類型,無須安裝其他的文本編輯工具就可以列印。STANDARD是LV內建的一種報表格式,可以列印但不能存檔,也就是說我們的報表沒有電子版。HTML是網頁格式的文件,可以用瀏覽器打開,其實相當於LV幫我們編寫HTML代碼,這種格式是不能直接列印的,需要先指定網頁路徑才能列印出來。還要注意,如果是一段程序是用了report generation的vi,在打包成exe文件或llb文件時,需要加入兩個動態vi:_excel dynamic vi和 _word dynamic vi。如果生成的報表採樣了模板需要自支持文件里添加相應模板。 
 
7、如果要將channel名字,測的是什麼信號,採樣率是多少這樣的數據和採得數據一起存入文件應該用什麼方式比較好?
A:推薦一種以前基本被忽略的文件結構——TDM FILE格式來存,這種文件格式基於二進位的方式,而在存儲過程中可以加入很多的外部信息進去,例如free text;free interger等等,所以存這樣的應用還是挺合適的。 
 
8、vi property 下execution中選項reetrant execution,選用和不選用有什麼區別?
A:如果主程序執行同一個子vi,是同時兩次或多次執行時,在不選用時,就會依次使用這個子vi;如果選用,則這個子vi就會并行執行,提高程序運行速度。 
 
9、為什麼把LABVIEW程序框圖解密以後,就可以一直打開程序框圖,如何才能實現每次打開vi都是加密的?
A:如果在LABVIEW解開程序的框圖的密碼,關閉以後該程序,不退出labview,這個程序如果再次被打開會一直可以查看他的框圖程序,原因是lv 沒有關閉,所以密碼會一直存在內存當中,所以再次打開會依然看到程序框圖,如果要實現每次打開都是加密的,只要在一次打開后,把labview也關掉,下次再想要查看程序框圖就需要輸入密碼。 
 
10、使用vi server技術,如何實現從一個vi打開運行並讀取另一個vi中控制項的值?
A:
1)  調用Open vi reference.vi ,輸入子VI的路徑到其VI PATH的埠;
2)  調用Ivoke Node.vi並設為Open FP;
3)  調用Ivoke Node.vi並設為Run VI;
4)   調用Ivoke Node.vi並設為Get control Value[Variant];對Control Name埠填入子VI循環的停止按鈕控制項名稱;Get Control Value [Variant]輸入端的值通過Variant To Data .vi設為控制項相對應的控制項類型后,輸出到前面板,這就可實現取VI控制項的值;
5)  最後調用Close Reference.vi關閉VI Server。 
 
11、連續採集程序分成配置task狀態和採集狀態兩大部分。在配置狀態中得配置出有效的task。根據需要在適當的時候進入採集狀態。在採集狀態中使用start task 和read兩個 vi並且循環執行。當程序開始后立刻報錯。
A:因為採集狀態中使用start task和 read 兩個vi並且循環執行,當採集已經開始后再使用start task就會重複開始相同的資源,導致資源衝突產生錯誤。建議start部分單獨作為一個狀態,在循環執行的狀態中只使用read.vi。 
 
12、LV7.1在前面板突然找不到Scrollbar了,現在想看或者操作屏幕之外的控制項顯示件非常麻煩,怎麼能夠找到Scrollbar?
A:在File\VI Property\Window Appearance\Customize里有Show scrollbar的選項。 
 
13、LV7.1如何實現將Chart的時間坐標與計算機系統時間一致?
A:Chart屬性Format And Precision選Absolute Time,顯示方式改System Time Format 和System Data Format。程序框圖裡Get Data/Time In Seconds獲取當前時間,轉換為雙精度浮點型后輸入到Waveform Chart的屬性節點Xscale. Offset。屬性節點Xscale. Format設為模式7。 
 
14、LV7.1如何設計時間輸出格式為小時:分:秒.毫秒?
A:用Get Data/Time In Seconds用來獲得當前時間,另一個是Format Data/Time String函數,這個函數用來定義輸出時間的格式,再time format string埠上輸入字元串%H:%M:%S%.3u,然後time stamp連接Get Data/Time In Seconds的時間輸出即可。關於時間格式的定義可以在help里看到。 
 
15、為什麼用子程序調用時pop up前面板,前面板總是自主程序後面?
A:在window appearance裡面選擇default floating 和modal這三項,將主程序的選項設在較低的優先順序而子程序設得高一點應該可以了。 
 
16、如何讀出excel里的數據來作分析?
A:使用Excel Get Data.vi並在參數data type上使用二維字元數組可把Excel內數據以字元串的方式讀出。 
 
17、如何對Excel文件作數據續存?
A:使用Excel Get Last Row.vi先將Excel內已有數據的最後一行的行數得出,再於該行開始續存數據。 
 
18、如何將文件保存為Excel格式
A:1)      用ActiveX技術,將LV作為一個ActiveX伺服器。可以參考National Instruments\Labview 7.1\examples\apps\freqresp.llb VI庫裡面的Frequency Response.vi例子程序。2)使用Report Generation工具包,它屏蔽了底層的ActiveX,使用比較簡單,不過需要購買。3)保存為文本方式,後綴為.xls,這樣子也可以用 Excel打開,不過不能用Excel修改保存,要不然會自動修改為Excel文檔,以後也不能用LV對其進行操作。 
 
19、如何在table中既顯示小數又顯示整數
A:table中顯示的是字元串,顯示小數還是整數是在轉換成字元串而未放入table之前的過程中完成的,因此可以將整數小數分別轉換成字元串后再合併輸出到table中即可。 
 
20、如何製作一個邊框是透明的string控制項
A:選擇一個classic simple string控制項,使用工具模板的染色工具,在彈出的對話框中選擇右上角“T”;一樣的transparent,然後給這個控制項染色就可以了。 
 
21、循環採集並對採集的結果判斷,前面板放置一個布爾報警燈,只保存報警的數據,並可回放,怎麼實現?
A:存儲vi外加一個case結構,並以布爾報警燈作為判斷,如果為真值,存儲,為false,不存。回放有兩種形式,即:可以把試驗數據存儲,然後回調。也可以把graph存為圖片。 
 
22、怎樣把While loop的循環次數i寫入Table的行頭ColHdrs[]呢?
A:創建Table的屬性節點,屬性ColHdrVis=T顯示行頭,ColHdrs[]連接一個字元串數組,需要將循環次數i加1,然後通過 Number To Fractional String轉化為字元類型,精度為0。添加移位寄存器,賦初值為空字元串數組,build array上端輸入接移位寄存器,下端接數字,右端接ColHdrs[]和移位寄存器另外一端。 
 
23、串口程序打包安裝到一台沒有LV環境的機器下,串口不可用,為什麼?
A:LV7.1的版本,在Application Builder中Installer頁面選擇:Advanced/Serial Port Support。 
 
24、使用CLF節點調用DLL中的函數,如果原函數中指定的數據類型為結構,那麼在CLF配置過程中該如何指定數據類型?
A:可以選擇數據類型(TYPE)為Adapt To Type,然後在輸出或輸入埠連接一個Cluster,這個Cluster的定義和原函數中結構的定義一樣。選擇Adapt To Type后,連接到埠的數據類型是什麼,與函數介面的數據類型就是什麼。
 
 
25、在子vi運行過程中,如何將數據實時傳遞到調用它的主vi中,而不是等待子VI運行結束后才在主VI中獲得子Vi的輸出數據?
A:使用帶控制參量的屬性節點可以實現在子VI中修改主VI屬性的目的,由於控制項的值(Value)也是控制項的屬性之一,因此可以使用控制參量是新以上要求。在子VI中,使用帶有控制參量的屬性節點,將要傳遞到主VI的數據寫入這個屬性(Value)中,將控制參量要設置為Control,並且在子VI的連接器中進行定義;在主VI中,為接收子VIshuju的控制項建立一個控制參量,將這個控制參量連接到子VI,即可達到在主VI中實時獲取子VI數據的要求。
 
26、事件結構中兩種事件類型,一個是通知事件(Notify),另一個是過濾事件(Filter),這兩種事件的區別是什麼?
A:對於通知事件,程序可以感知事件的發生並且響應該事件,然後再處理在事件結構中定義的任務;對於過濾事件,程序感知事件發生后首先處理在事件結構中定義的任務,然後根據時間結構中的設定(Discard?)決定是否響應該事件。舉例來說,時間為Panel Close,在事件發生時彈出一個對話框。如果是通知事件,首先響應事件關閉了前面板,因此沒有辦法處理“彈出對話框”的任務;如果是過濾事件,首先處理 “彈出對話框”的任務,然後根據事件結構中的Discard的值判斷是否關閉前面板,若Discard為T,則不關閉,若為F,則關閉。 
 
27、LV7.1主程序已經完成,想在主程序運行之前,先執行一個別的界面,當退出該界面的時候,再顯示主界面,如何實現?
A:可以在主程序框圖之前,將主程序前面板隱藏,調用子程序,推齣子程序后,再顯示主程序前面板。這可以通過VI屬性節點來實現,先調用一個屬性節點,右鍵選擇Select Class/VI Server/VI,然後在屬性中選擇Front Pannel Window/State屬性,分為設為Hide和Standard。Demo程序見項目進程管理中AE-01labview編程技術討論的“主界面隱藏”。 
 
28、將LV7.1前面板控制項(graph)的內容保存成圖像文件,在LV中如何編程實現?
A:右鍵控制項創建Invoke Node,選擇方法為“Get Panel Image”;另外,調用Graphics &Sound/Graphics Formats下面的VI,將第二步獲得的圖像寫入相應格式文件中。 
 
29、在LV程序中使用matlab,生成exe文件以後,發現文件可以運行但是無法彈出運行界面。
A:在lv中如果使用了MATLAB的話,生成EXE文件的時候需要加一個名為馬特script.dll的文件作為支持文件,此外在目標PC上必須安裝MATLAB軟體。 
 
30、LV7.1使用VI Server的方式,在一台機器上調用另一台機器上的VI並運行,需要做哪些設置?(兩台機器在同一個網路中)
A: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的關閉按鈕
A:可以在LV的前面板FILE/VI properties/windows appearance/customize,去掉allow user to close window對鉤,保存設置,運行后可以實現效果。

32、LV7.1中如何清除前面板的Graph,即在每次運行時,讓Graph重新顯示數據而不顯示歷史數據。
A:在Graph裡面可以通過創建Local Varible並對其賦空來解決。而在Chart里可以通過創建History Data屬性節點並對其賦空來解決。 
 
33、LV7.1中怎樣將一個數組中所有滿足條件的元素的索引值提取出來,保存成一個新的數組?
A:使用移位寄存器、Build Array和Select函數就可以做到,具體方法:1)使用FOR循環,在循環邊框上添加一個移位寄存器,並初始化為一維空數組,類型為I32;2)在循環內部使用Select函數,每次循環都判斷數組中的一個元素,並將判斷結果(布爾量類型)送入Select的“s”輸入端;3)每次循環都使用 Build Array函數將左端的移位寄存器直接連接到Select函數的“f”輸入端,這樣Select函數的輸入端就是所有滿足條件的元素的索引值;4)將 Select函數的輸出端連到右端的移位寄存器上。這樣程序結束后,For循環的右端移位寄存器的數據就是需要的索引值。 
 
35、 移位寄存器和反饋節點的區別?
回答:反饋節點箭頭的起始端相當於移位寄存器的右端,箭頭的末端相當於寄存器的左端。區別在於移位寄存器的左端元素可以通過下拉下拉方式增加,而反饋節點的埠是無法增加的。 
 
36、如何讓子VI的前面板也顯示出來?
A:右鍵點擊子VI,選擇SUBVI NODE……然後再選擇第2項SHOW……就是當子VI被調用時,顯示前面板。 
 
37、彈出窗口無法進行任何操作,並且被主界面擋住,如何解決?
A:主界面VI properties中windows appearance里customs設定windows behavior為normal了,因此主界面保持在最前端,應該設為default。 
 
38、在程序中實現按對應鍵彈出窗口,在窗口已打開情況下繼續可打開其他窗口?
A:在程序框圖內使用并行循環。每一個可能要運行的子VI(打開其窗口)及其運行條件(按鍵)各佔一個循環。各個循環相互獨立,互不干擾。在考慮同時關閉各個窗口時,需要使用全局變數。 
 
39、在調度Vi的時候,經常無意地把面板上的一些控制項移動了位置。還要花很大功夫去重新布置這些面板控制項。有沒有辦法讓已經設計好的控制項的位置固定不動?
A:首先我們可以通過Operate菜單中的Change To Run/Edit Mode命令,設置VI為運行或編輯模式。面板控制項的移動只在編輯模式下有效。在運行模式下是不能移動任何控制的位置的。第二種方法是,選擇指定的控制項(可多選),然後在菜單的Reorder下拉菜單下,選擇LOCK命令,來鎖住指定的控制項。這樣,除非使用Unlock命令解鎖。否則是無法移動指定控制項的位置。 
 
40、為什麼子VI節點的輸出埠沒有數據傳遞出來?
A:這類問題的主要原因是子VI中存在著循環。如果子VI中的循環不能推出,子VI節點就一直在運行。對於LV的數據流編程機制來講,一個節點沒有執行完,它的所有輸出埠就不會有有效數據輸出。解決方法:一是把子VI中的循環提出到主VI里來。二是使用全局變數,並在主VI中使用并行循環來控制子VI 的結束。 
 
41、怎樣在LABVIEW中實現全屏顯示?
A: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文件作數據續存?
A:使用Excel Get Last Row.vi先將Excel內已有數據的最後一行的行數得出,再於該行開始續存數據。 
 
43、LV當用滑鼠點擊Graph時,該Graph的大小變化了,當滑鼠離去后Graph的大小恢復到原來情況?
A:可以應用一個Event Structure來做,添加兩個事件(一個是滑鼠點擊,另一個是滑鼠離去)。通過在這兩個事件中分別賦給Graph的PlotArearSize屬性節點不同的值,來改變Graph的大小。 
 
44、如何用LABVIEW編程檢測U盤?
A:需要調用Windows API函數GetDriveTypeA,其函數返回值盤符類型的數據類型為長整形,輸入參數為檢測盤符。調用CLFN.vi選擇\windows\ system32\kernel32.dll,選擇GetDriveTypeA,設置Return Type為Numeric Signed 32-bit Integer;再添加參數nDrive,設置參數類型為STRING和格式為C String Pointer。運行時在輸入端填上要檢測的U盤盤符,返回結果為時表示為DRIVE_REMOVABLE即為可移動的U盤



[admin via 研發互助社區 ] Labview初學者常見問題及解答已經有5028次圍觀

http://cocdig.com/docs/show-post-44946.html