LabVIEW使用心得和常見錯誤及解決方法

#LabVIEW使用心得和常見錯誤及解決方法


[TOC]

##常見錯誤及解決方法

Q1:一開始拿到題目,一無所知,對於系統的每一個部分,我們都不瞭解,不知如何下手。

  • 這是我們組面對的最首要問題,往往這個問題是大多數人在學習一項新知識時必有的困惑,而解決問題的方法卻是我們必要掌握的,要經歷鍛鍊的。通常我會瀏覽官方論壇,查看NI工程師及其他人的技術文檔,最後發現LabVIEW中有很多經典的範例,非常適合在有課題需要的時候學習掌握,最後在此基礎上進行修改。一方面,範例中都一定是可以運行的正確的程序,還會在關鍵部分有註釋;另一方面,官方往往提供的都是基礎的範例,比較適合初學者掌握學習,進行深度挖掘和改造。在我做地圖調用的時候,我在官方的網站上down到了一個外國人調用google地圖的example,受益匪淺。做工程的人,很多時候並不需要從最原始的東西開始研究,要懂得站在巨人的肩膀上眺望地平面。

Q2:字符串轉換數值時,無法轉換浮點小數。

  • 需要用“分數/指數至字符串轉換” 函數,該控件可從偏移量位置開始,使字符串中的下列字符:0-9、加號、減號、e、E、小數點(通常是句點)解析爲工程、科學或分數格式的浮點數,通過數字返回。

Q3:串口傳輸數據並用波形圖顯示時,波形圖無法實時顯示連續的波形,每個數據都會掉到0再上升。

  • 需要用到反饋節點,連接“數組插入”的n維數組腳和輸出數組腳。如下圖所示。
    這裏寫圖片描述

Q4:我們在做大作業的時候,因爲控件較多,功能較複雜,當一個vi文件中出現多個while循環時,會出現有的部分程序始終不運行的情況。

  • 只有當其中一個while循環中止後纔會進入另一個while循環巡行。如果子vi中的循環不能退出,子vi節點就一直在運行。對於LabVIEW的數據流編程機制來講,一個節點沒有執行完,它的所有輸出端口就不會有有效數據輸出。解決方法:一是把子vi中的循環提出到主vi裏來。二是使用全局變量,並在主vi中使用並行循環來控制子vi的結束。
  • Labview編程的主要特點是數據流形式,這便於VI大量的按照並行方式運行,優化了程序的計算性能。即使是這樣,當出現循環結構時,也會出現部分程序不運行的情況。因爲運行條件是輸入是循環結構中的某部分局部變量。

Q5:當while循環函數內部含有for循環函數時,無法操作停止控件時while循環停止

  • 如果停止控件放在for循環函數外while函數內,當for循環沒有結束時,點擊停止是無法使事件停止運行的。因爲此時for循環沒有結束,即使改變了停止控件的當前狀態,它仍然不起作用。只用將停止控件放入for循環中,從for循環引出來連接到停止while循環的循環條件,纔能有效停止。

Q6:使用串口時發生如下錯誤Unable to open session to “ASRL1::INSTR”

  • 其他軟件佔用了串口,需要關閉其他應用程序。

Q7:每次使用時CPU佔用過高,電腦卡着不能動。

  • 循環裏沒有加延時。

Q8:調試GPS部分,創建數組爲輸入控件時,需要將數組賦特定的初值,發現每次關閉再打開vi文件時,數組中的內容會清空。

  • 數組爲輸入控件時,每次打開vi文件都會初始化各個控件,在初始狀態下,輸入控件的值都會賦0,只有將要賦的定值設置爲默認值,纔會保留輸入控件中想保留的數據,防止關閉軟件造成的賦定值消失,不方便調試。

通過文件或註冊表方式先把控件當前值存下來,再下次打開時再從文件或註冊表把值讀回來。使用VI Server技術在保存控件當前值爲默認值,但這種方法只能處於編輯狀態使用,在生成exe文件後不能使用。

Q9:當程序框圖中程序很多,有的部分可以並行運行,有的部分可以順序運行,如果將這些都放在一個while循環會出現無關的延遲。

  • 建議使用順序結構,按順序結構來規定某些程序的執行順序,這樣不存在競爭。而把初始部分程序放在while循環外,特別是當初始程序中要調用比較複雜的引用時,比如3D模型的調用和初始化。

##學習心得

隧道、移位寄存器、循環隧道、自動索引隧道的關係

  • 隧道——局部變量,隧道相當於每次進來循環體之後把循環體外的值賦予循環體內的局部變量,所以不管循環體內執行幾次,其結果也等同於只執行了一次。
  • 移位寄存器——靜態局部變量,每一次在循環體內執行,都會把右邊移位寄存器出口的值用作左邊入口的值,所以移位寄存器的值能一直保留。移位寄存器的特殊之處在於在循環結構兩端的接線端是強制使用同一內存的。因此,上一次迭代執行產生的某一值,傳給移位寄存器右側的接線端,如果下一次迭代運行需要用到這個數據,從移位寄存器左側的接線端引出就可以了。
  • 循環隧道——while默認下的隧道,數據傳入傳出的值不發生變化,是循環後的最後一直數
  • 自動索引隧道——for循環默認下的隧道,隧道在循環內一側會自動取出數組的元素,依順序每次循環取出一個元素。用索引隧道傳出數據,可以自動把循環內的數據組織成數組,最後輸出的是一個數組的形式。

有的控件的參數可以爲多個,比如0、1、2,且代表不同的意思。如何使用常量定義,使得它們有名字。比如講曲線擬合時,方法選擇上。

這裏寫圖片描述

  • 鼠標移動到相應引腳,點擊創建常量,即可使用該方法下所有的類型,更加方便快捷。
    這裏寫圖片描述
  • 還可以通過製作自定義類型的方法。

在使用簇時,總是出現數據連接類型錯誤。

  • 這是因爲簇中順序可能與連接後端的順序不一致,導致數據連接錯誤。
    爲了避免簇中用可能出現的錯誤,以及讓簇應用起來更方便,使用簇最好遵循以下原則:
  • 凡是用到簇的地方,就爲它造一個類型自定義,在程序所有要用到這個簇的地方,都使用類型定義的實例。這樣一是可以保證所有的簇都完全一致,避免圖4 這種錯誤;二是一旦需要變動簇中的元素,只需在類型定義中更新就可以了,不必挨個 VI 修改。
  • 凡是在需要解綁或捆綁的地方統統使用按名字解綁和按名字捆綁來實現。使用帶名字的解綁和捆綁,可以直觀的顯示出捆綁中元素的名字,這樣不會因爲順序的不同而導致錯誤的連線。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章