Labview基本常見(jiàn)問(wèn)題解答
1、Labview如何實(shí)現由一個(gè)事件引發(fā)其他三個(gè)事件的順序發(fā)生,且這三次事件間的時(shí)間間隔為50ms?回答:可以引用狀態(tài)機來(lái)設計程序,將觸發(fā)事件作為狀態(tài)機的狀態(tài)控制參數,后面發(fā)生的三個(gè)事件依次作為狀態(tài)機的三個(gè)順序狀態(tài),設置狀態(tài)切換時(shí)間間隔為500ms.
2、labview在主程序通過(guò)局部變量不能實(shí)時(shí)看子vi的參數回答:通過(guò)局部變量只能得到子vi運行完之后的結果??梢杂胏ontrol reference 方式,在子vi加一個(gè)屬性節點(diǎn)引出一個(gè)reference。主程序里把需要顯示的控件創(chuàng )建一個(gè)reference連到子vi的reference輸入端口。另外也可以用vi server方式實(shí)現。
3、如何在一個(gè)graph或chart顯示多個(gè)Y軸刻度,并且使每個(gè)通道對應每個(gè)刻度?回答:在前面板上,右鍵點(diǎn)擊刻度,然后選擇duplicate scales,就會(huì )創(chuàng )建一個(gè)新的刻度。然后再點(diǎn)擊右鍵,選擇swap sides,就可以讓刻度顯示在圖的左邊或右邊。然后右鍵右上角的plot legend上的曲線(xiàn)plot,選擇Y scales然后就可以選擇與該曲線(xiàn)相應的Y軸SCALES。多條曲線(xiàn)對應多條Y軸的刻度時(shí),是同樣的方法。
4、如何從labview中打開(kāi)一個(gè)pdf文件?回答:最簡(jiǎn)單的方法:用system exec.vi實(shí)現,在system exec.vi的command line 端口創(chuàng )建一個(gè)常量,輸入adobe reader 的路徑,再加上文件名等幾個(gè)參數就可以實(shí)現上述要求。舉例如下:如果要拉開(kāi)位于c盤(pán)的1234.pdf文件可以這樣寫(xiě)“C:Program filesAcrobt 7.0AcrobatAcrobat.exe”/t “C:1234.pdf” “username”其中C:Program filesAdobeAcrobt 7.0AcrobatAcrobat.exe是Adobe Reader 的安裝路徑,/t是命令參數,C:1234.pdf則是要打開(kāi)的文件名,最后的username是用戶(hù)的名字
5、采集數據在graph如何顯示系統時(shí)間,并且隨著(zhù)采集點(diǎn)數時(shí)間不斷刷新?;卮穑河袃煞N方式,一種是采集波形數據然后輸出給graph,在graph上選擇顯示絕對時(shí)間,并且去掉ignore time stamp選項。第二種是采集數據文件,然后用獲取時(shí)間的vi獲取當前時(shí)間,然后把采集的數據文件和當前vibuild成波形文件再給graph.graph的設置和前種方法一樣。這樣就可以顯示出時(shí)間雖采集點(diǎn)不斷刷新的效果。
6、report generation里的standard和HTML究竟是什么意思?回答:STANDARD和HTML是LV本身就有的報表類(lèi)型,無(wú)須安裝其他的文本編輯工具就可以打印。STANDARD是LV內建的一種報表格式,可以打印但不能存盤(pán),也就是說(shuō)我們的報表沒(méi)有電子版。HTML是網(wǎng)頁(yè)格式的文件,可以用瀏覽器打開(kāi),其實(shí)相當于LV幫我們編寫(xiě)HTML代碼,這種格式是不能直接打印的,需要先指定網(wǎng)頁(yè)路徑才能打印出來(lái)。還要注意,如果是一段程序是用了report generation的vi,在打包成exe文件或llb文件時(shí),需要加入兩個(gè)動(dòng)態(tài)vi:_excel dynamic vi和 _word dynamic vi。如果生成的報表采樣了模板需要自支持文件里添加相應模板。
7、如果要將channel名字,測的是什么信號,采樣率是多少這樣的數據和采得數據一起存入文件應該用什么方式比較好?回答:推薦一種以前基本被忽略的文件結構——TDM FILE格式來(lái)存,這種文件格式基于二進(jìn)制的方式,而在存儲過(guò)程中可以加入很多的外部信息進(jìn)去,例如free text;free interger等等,所以存這樣的應用還是挺合適的。
8、vi property 下execution中選項reetrant execution,選用和不選用有什么區別?回答:如果主程序執行同一個(gè)子vi,是同時(shí)兩次或多次執行時(shí),在不選用時(shí),就會(huì )依次使用這個(gè)子vi;如果選用,則這個(gè)子vi就會(huì )并行執行,提高程序運行速度。
9、為什么把LABVIEW程序框圖解密以后,就可以一直打開(kāi)程序框圖,如何才能實(shí)現每次打開(kāi)vi都是加密的?回答:如果在LABVIEW解開(kāi)程序的框圖的密碼,關(guān)閉以后該程序,不退出labview,這個(gè)程序如果再次被打開(kāi)會(huì )一直可以查看他的框圖程序,原因是lv沒(méi)有關(guān)閉,所以密碼會(huì )一直存在內存當中,所以再次打開(kāi)會(huì )依然看到程序框圖,如果要實(shí)現每次打開(kāi)都是加密的,只要在一次打開(kāi)后,把labview也關(guān)掉,下次再想要查看程序框圖就需要輸入密碼。
10、使用vi server技術(shù),如何實(shí)現從一個(gè)vi打開(kāi)運行并讀取另一個(gè)vi中控件的值?回答: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循環(huán)的停止按鈕控件名稱(chēng);Get Control Value [Variant]輸入端的值通過(guò)Variant To Data .vi設為控件相對應的控件類(lèi)型后,輸出到前面板,這就可實(shí)現取VI控件的值;5) 最后調用Close Reference.vi關(guān)閉VI Server。
11、連續采集程序分成配置task狀態(tài)和采集狀態(tài)兩大部分。在配置狀態(tài)中得配置出有效的task。根據需要在適當的時(shí)候進(jìn)入采集狀態(tài)。在采集狀態(tài)中使用start task 和read兩個(gè) vi并且循環(huán)執行。當程序開(kāi)始后立刻報錯?;卮穑阂驗椴杉癄顟B(tài)中使用start task和 read 兩個(gè)vi并且循環(huán)執行,當采集已經(jīng)開(kāi)始后再使用start task就會(huì )重復開(kāi)始相同的資源,導致資源沖突產(chǎn)生錯誤。建議start部分單獨作為一個(gè)狀態(tài),在循環(huán)執行的狀態(tài)中只使用read.vi。
12、LV7.1在前面板突然找不到Scrollbar了,現在想看或者操作屏幕之外的控件顯示件非常麻煩,怎么能夠找到Scrollbar?回答:在FileVI PropertyWindow AppearanceCustomize里有Show scrollbar的選項。
13、LV7.1如何實(shí)現將Chart的時(shí)間坐標與計算機系統時(shí)間一致?回答:Chart屬性Format And Precision選Absolute Time,顯示方式改System Time Format 和System Data Format。程序框圖里Get Data/Time In Seconds獲取當前時(shí)間,轉換為雙精度浮點(diǎn)型后輸入到Waveform Chart的屬性節點(diǎn)Xscale. Offset。屬性節點(diǎn)Xscale. Format設為模式7。
14、LV7.1如何設計時(shí)間輸出格式為小時(shí):分:秒.毫秒?回答:用Get Data/Time In Seconds用來(lái)獲得當前時(shí)間,另一個(gè)是Format Data/Time String函數,這個(gè)函數用來(lái)定義輸出時(shí)間的格式,再time format string端口上輸入字符串%H:%M:%S%.3u,然后time stamp連接Get Data/Time In Seconds的時(shí)間輸出即可。關(guān)于時(shí)間格式的定義可以在help里看到。
15、為什么用子程序調用時(shí)pop up前面板,前面板總是自主程序后面?回答:在window appearance里面選擇default floating 和modal這三項,將主程序的選項設在較低的優(yōu)先級而子程序設得高一點(diǎn)應該可以了。
16、如何讀出excel里的數據來(lái)作分析?回答:使用Excel Get Data.vi并在參數data type上使用二維字符數組可把Excel內數據以字符串的方式讀出。
17、如何對Excel文件作數據續存?回答:使用Excel Get Last Row.vi先將Excel內已有數據的最后一行的行數得出,再于該行開(kāi)始續存數據。
18、如何將文件保存為Excel格式1) 用ActiveX技術(shù),將LV作為一個(gè)ActiveX服務(wù)器??梢詤⒖糔ational InstrumentsLabview 7.1examplesappsfreqresp.llb VI庫里面的Frequency Response.vi例子程序。2)使用Report Generation工具包,它屏蔽了底層的ActiveX,使用比較簡(jiǎn)單,不過(guò)需要購買(mǎi)。3)保存為文本方式,后綴為.xls,這樣子也可以用Excel打開(kāi),不過(guò)不能用Excel修改保存,要不然會(huì )自動(dòng)修改為Excel文檔,以后也不能用LV對其進(jìn)行操作。
19、如何在table中既顯示小數又顯示整數回答:table中顯示的是字符串,顯示小數還是整數是在轉換成字符串而未放入table之前的過(guò)程中完成的,因此可以將整數小數分別轉換成字符串后再合并輸出到table中即可。
20、如何制作一個(gè)邊框是透明的string控件回答:選擇一個(gè)classic simple string控件,使用工具模板的染色工具,在彈出的對話(huà)框中選擇右上角“T”;一樣的transparent,然后給這個(gè)控件染色就可以了。
21、循環(huán)采集并對采集的結果判斷,前面板放置一個(gè)布爾報警燈,只保存報警的數據,并可回放,怎么實(shí)現?回答:存儲vi外加一個(gè)case結構,并以布爾報警燈作為判斷,如果為真值,存儲,為false,不存?;胤庞袃煞N形式,即:可以把試驗數據存儲,然后回調。也可以把graph存為圖片。
22、怎樣把While loop的循環(huán)次數i寫(xiě)入Table的行頭ColHdrs[]呢?回答:創(chuàng )建Table的屬性節點(diǎn),屬性ColHdrVis=T顯示行頭,ColHdrs[]連接一個(gè)字符串數組,需要將循環(huán)次數i加1,然后通過(guò)Number To Fractional String轉化為字符類(lèi)型,精度為0。添加移位寄存器,賦初值為空字符串數組,build array上端輸入接移位寄存器,下端接數字,右端接ColHdrs[]和移位寄存器另外一端。
23、串口程序打包安裝到一臺沒(méi)有LV環(huán)境的機器下,串口不可用,為什么?回答:LV7.1的版本,在A(yíng)pplication Builder中Installer頁(yè)面選擇:Advanced/Serial Port Support。
24、使用CLF節點(diǎn)調用DLL中的函數,如果原函數中指定的數據類(lèi)型為結構,那么在CLF配置過(guò)程中該如何指定數據類(lèi)型?回答:可以選擇數據類(lèi)型(TYPE)為Adapt To Type,然后在輸出或輸入端口連接一個(gè)Cluster,這個(gè)Cluster的定義和原函數中結構的定義一樣。選擇Adapt To Type后,連接到端口的數據類(lèi)型是什么,與函數接口的數據類(lèi)型就是什么。[next]
25、在子vi運行過(guò)程中,如何將數據實(shí)時(shí)傳遞到調用它的主vi中,而不是等待子VI運行結束后才在主VI中獲得子Vi的輸出數據?回答:使用帶控制參量的屬性節點(diǎn)可以實(shí)現在子VI中修改主VI屬性的目的,由于控件的值(Value)也是控件的屬性之一,因此可以使用控制參量是新以上要求。在子VI中,使用帶有控制參量的屬性節點(diǎn),將要傳遞到主VI的數據寫(xiě)入這個(gè)屬性(Value)中,將控制參量要設置為Control,并且在子VI的連接器中進(jìn)行定義;在主VI中,為接收子VIshuju的控件建立一個(gè)控制參量,將這個(gè)控制參量連接到子VI,即可達到在主VI中實(shí)時(shí)獲取子VI數據的要求。其實(shí)以上這段話(huà),我自己也不是很明白的,什么叫帶控制參量的屬性節點(diǎn)。這兩天看了下下,發(fā)現VI SERVER的QUEUE是可以實(shí)現從SUBVI實(shí)時(shí)傳遞數據到MAINVI的。
這是一個(gè)隊列例子的前面板,下面是框圖,
這是MAINVI的框圖
這是SUBVI的框圖。
26、事件結構中兩種事件類(lèi)型,一個(gè)是通知事件(Notify),另一個(gè)是過(guò)濾事件(Filter),這兩種事件的區別是什么?回答:對于通知事件,程序可以感知事件的發(fā)生并且響應該事件,然后再處理在事件結構中定義的任務(wù);對于過(guò)濾事件,程序感知事件發(fā)生后首先處理在事件結構中定義的任務(wù),然后根據時(shí)間結構中的設定(Discard?)決定是否響應該事件。舉例來(lái)說(shuō),時(shí)間為Panel Close,在事件發(fā)生時(shí)彈出一個(gè)對話(huà)框。如果是通知事件,首先響應事件關(guān)閉了前面板,因此沒(méi)有辦法處理“彈出對話(huà)框”的任務(wù);如果是過(guò)濾事件,首先處理“彈出對話(huà)框”的任務(wù),然后根據事件結構中的Discard的值判斷是否關(guān)閉前面板,若Discard為T(mén),則不關(guān)閉,若為F,則關(guān)閉。
27、LV7.1主程序已經(jīng)完成,想在主程序運行之前,先執行一個(gè)別的界面,當退出該界面的時(shí)候,再顯示主界面,如何實(shí)現?回答:可以在主程序框圖之前,將主程序前面板隱藏,調用子程序,推出子程序后,再顯示主程序前面板。這可以通過(guò)VI屬性節點(diǎn)來(lái)實(shí)現,先調用一個(gè)屬性節點(diǎn),右鍵選擇Select Class/VI Server/VI,然后在屬性中選擇Front Pannel Window/State屬性,分為設為Hide和Standard。Demo程序見(jiàn)項目進(jìn)程管理中AE-01labview編程技術(shù)討論的“主界面隱藏”。
28、將LV7.1前面板控件(graph)的內容保存成圖像文件,在LV中如何編程實(shí)現?回答:右鍵控件創(chuàng )建Invoke Node,選擇方法為“Get Panel Image”;另外,調用Graphics Sound/Graphics Formats下面的VI,將第二步獲得的圖像寫(xiě)入相應格式文件中。
29、在LV程序中使用matlab,生成exe文件以后,發(fā)現文件可以運行但是無(wú)法彈出運行界面?;卮穑涸趌v中如果使用了MATLAB的話(huà),生成EXE文件的時(shí)候需要加一個(gè)名為馬特script.dll的文件作為支持文件,此外在目標PC上必須安裝MATLAB軟件。
30、LV7.1使用VI Server的方式,在一臺機器上調用另一臺機器上的VI并運行,需要做哪些設置?(兩臺機器在同一個(gè)網(wǎng)絡(luò )中)回答:1)在Tools/Options/VI Server:Configurtion下選擇Protocols為T(mén)CP/IP,這樣才能在網(wǎng)絡(luò )中使用VI Server,否則只是在本機上使用VI Server。 2)在Tools/Options/VI Server:TCP/IP Access下設置可以訪(fǎng)問(wèn)的VI Server的主機IP。如果不進(jìn)行設置,遠程機器將無(wú)法調用需要的VI。
31、在LV7.1中如何在運行程序后,前面板上去掉windows的關(guān)閉按鈕回答:可以在LV的前面板FILE/VI properties/windows appearance/customize,去掉allow user to close window對鉤,保存設置,運行后可以實(shí)現效果。
32、LV7.1中如何清除前面板的Graph,即在每次運行時(shí),讓Graph重新顯示數據而不顯示歷史數據?;卮穑涸贕raph里面可以通過(guò)創(chuàng )建Local Varible并對其賦空來(lái)解決。而在Chart里可以通過(guò)創(chuàng )建History Data屬性節點(diǎn)并對其賦空來(lái)解決。
33、LV7.1中怎樣將一個(gè)數組中所有滿(mǎn)足條件的元素的索引值提取出來(lái),保存成一個(gè)新的數組?回答:使用移位寄存器、Build Array和Select函數就可以做到,具體方法:1)使用FOR循環(huán),在循環(huán)邊框上添加一個(gè)移位寄存器,并初始化為一維空數組,類(lèi)型為I32;2)在循環(huán)內部使用Select函數,每次循環(huán)都判斷數組中的一個(gè)元素,并將判斷結果(布爾量類(lèi)型)送入Select的“s”輸入端;3)每次循環(huán)都使用Build Array函數將左端的移位寄存器直接連接到Select函數的“f”輸入端,這樣Select函數的輸入端就是所有滿(mǎn)足條件的元素的索引值;4)將Select函數的輸出端連到右端的移位寄存器上。這樣程序結束后,For循環(huán)的右端移位寄存器的數據就是需要的索引值。
35 移位寄存器和反饋節點(diǎn)的區別?回答:反饋節點(diǎn)箭頭的起始端相當于移位寄存器的右端,箭頭的末端相當于寄存器的左端。區別在于移位寄存器的左端元素可以通過(guò)下拉下拉方式增加,而反饋節點(diǎn)的端口是無(wú)法增加的。
36、如何讓子VI的前面板也顯示出來(lái)?回答:右鍵點(diǎn)擊子VI,選擇SUBVI NODE……然后再選擇第2項SHOW……就是當子VI被調用時(shí),顯示前面板。
37、彈出窗口無(wú)法進(jìn)行任何操作,并且被主界面擋住,如何解決?回答:主界面VI properties中windows appearance里customs設定windows behavior為normal了,因此主界面保持在最前端,應該設為default。
38、在程序中實(shí)現按對應鍵彈出窗口,在窗口已打開(kāi)情況下繼續可打開(kāi)其他窗口?回答:在程序框圖內使用并行循環(huán)。每一個(gè)可能要運行的子VI(打開(kāi)其窗口)及其運行條件(按鍵)各占一個(gè)循環(huán)。各個(gè)循環(huán)相互獨立,互不干擾。在考慮同時(shí)關(guān)閉各個(gè)窗口時(shí),需要使用全局變量。
39、在調度Vi的時(shí)候,經(jīng)常無(wú)意地把面板上的一些控件移動(dòng)了位置。還要花很大功夫去重新布置這些面板控件。有沒(méi)有辦法讓已經(jīng)設計好的控件的位置固定不動(dòng)?回答:首先我們可以通過(guò)Operate菜單中的Change To Run/Edit Mode命令,設置VI為運行或編輯模式。面板控件的移動(dòng)只在編輯模式下有效。在運行模式下是不能移動(dòng)任何控制的位置的。第二種方法是,選擇指定的控件(可多選),然后在菜單的Reorder下拉菜單下,選擇LOCK命令,來(lái)鎖住指定的控件。這樣,除非使用Unlock命令解鎖。否則是無(wú)法移動(dòng)指定控件的位置。
40、為什么子VI節點(diǎn)的輸出端口沒(méi)有數據傳遞出來(lái)?回答:這類(lèi)問(wèn)題的主要原因是子VI中存在著(zhù)循環(huán)。如果子VI中的循環(huán)不能推出,子VI節點(diǎn)就一直在運行。對于LV的數據流編程機制來(lái)講,一個(gè)節點(diǎn)沒(méi)有執行完,它的所有輸出端口就不會(huì )有有效數據輸出。解決方法:一是把子VI中的循環(huán)提出到主VI里來(lái)。二是使用全局變量,并在主VI中使用并行循環(huán)來(lái)控制子VI的結束。
41、怎樣在LABVIEW中實(shí)現全屏顯示?回答: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)擊鼠標右鍵/Create/Properties Node,選擇Visible,并將其改為Change to Read,對Visble設置為T(mén)rue或False就可以控制控件是否顯示了。
42、LV如何對Excel文件作數據續存?回答:使用Excel Get Last Row.vi先將Excel內已有數據的最后一行的行數得出,再于該行開(kāi)始續存數據。
43、LV當用鼠標點(diǎn)擊Graph時(shí),該Graph的大小變化了,當鼠標離去后Graph的大小恢復到原來(lái)情況?回答:可以應用一個(gè)Event Structure來(lái)做,添加兩個(gè)事件(一個(gè)是鼠標點(diǎn)擊,另一個(gè)是鼠標離去)。通過(guò)在這兩個(gè)事件中分別賦給Graph的PlotArearSize屬性節點(diǎn)不同的值,來(lái)改變Graph的大小。
44、如何用LABVIEW編程檢測U盤(pán)?回答:需要調用Windows API函數GetDriveTypeA,其函數返回值盤(pán)符類(lèi)型的數據類(lèi)型為長(cháng)整形,輸入參數為檢測盤(pán)符。調用CLFN.vi選擇windowssystem32kernel32.dll,選擇GetDriveTypeA,設置Return Type為Numeric Signed 32-bit Integer;再添加參數nDrive,設置參數類(lèi)型為STRING和格式為C String Pointer。運行時(shí)在輸入端填上要檢測的U盤(pán)盤(pán)符,返回結果為時(shí)表示為DRIVE_REMOVABLE即為可移動(dòng)的U盤(pán)。
評論