2017-04-08 929 views
2

我正在爲Uni做一個項目,我需要while循環在6s後停止。所以我通常設置wait(ms)等待6000ms,然後將它與6000const進行比較,以獲得一個TRUE的布爾值,這應該會阻止我的循環,但事實並非如此。所以我想知道你是否知道這個問題會是什麼?如何使用計時器在LabView中停止While循環

+0

發佈當前代碼的圖片始終有助於解決問題。選擇圖中的所有代碼,然後選擇「編輯>>從選擇創建VI片段」。這會爲您提供一個PNG文件,其中包含其他人可用來拖放到其框圖並重新創建代碼的元數據。 – srm

回答

2

你不想要一個「等待」函數 - 該函數會暫停執行,直到該節點完成,這意味着你的While循環只執行一次,而這一次將持續6000毫秒。

你想要的是Tick Count功能。

您可以將此圖片從瀏覽器中拖出(某些瀏覽器可能會要求您先將PNG保存到磁盤),以重新創建代碼(如果您有LV 2016或更高版本,數字在右上角)。此圖像是使用「編輯>>從選擇創建VI片段」創建的。

enter image description here

0

另一個選項來解決你的問題可以使用定時循環。這些是專門爲時間任務而設計的。定時循環的好處是,您可以更準確地控制何時停止。建議的while循環(從srm開始)將在6秒+它需要完成代碼的時間後停止。在一個定時循環的「缺點」是,它更像一個循環,每個循環需要一個特定的時間間隔,ussualy我覺得這更多的是比下跌的好處:

while loop and timed loop VI snippet

我也把以前建議的解決方案(來自srm)進行比較。在我的電腦上,定時循環以ms精度停止,而while循環延遲幾十毫秒。

+0

我喜歡這個修改方法,因爲它有很大的靈活性。但是限制是,如果循環中有很多「代碼」,並且它比循環時間長,那麼計算循環的次數將不再有效,並且總運行時間將比用戶指定的時間長。如果我能找出考慮實際循環時間的改進,我會將其添加到此線程。 – SolarBrian

+0

感謝您的誇獎。關於上面提到的限制,定時循環可以選擇這個選項。有一個「完成遲到」的聲明讓你檢查循環是否在指定的時間內完成。您也可以在「模式」選項中指定循環應該如何處理延遲執行。請參閱:http://zone.ni.com/reference/en-XX/help/371361H-01/glang/timed_loop/ –

0

你的bool值爲false的實際原因是Wait(ms)VI的輸出不是VI等待的毫秒數,而是「毫秒計時器」,它是自Windows啓動以來的毫秒數,那種效果。如果您在等待VI完成後立即運行Tick Count(ms)VI,則會得到相同的數字。

其他人指出,循環中等待6秒會阻止循環完成執行並重復,直到6秒結束。

相關問題