標籤:

LabVIEW如何實現計數計時功能?

程序如下,隨機數所輸出的一個值,在乘以100之後,在100和0之間浮動,我通過判斷是否在0到10之間,讓提示燈選擇亮或者不亮。現在我遇到的問題是,如何寫入一個程序可以得到提示燈燈亮的時間?(本人愚笨,希望得到一個具體的實例,或者說一個比較具體的步驟,我在網上看了一些,發現操作起來並不能實現)

不勝感激

(其實燈有多個,我這裡只列出來了兩個。用這個寫法的話,可以確保只有一盞燈亮。我需要的計時,是多盞燈的分別計時。比如燈1亮的時間,和燈2亮的時間,是分別得到的。我想了很久還是不會寫,希望得到大家的幫助,謝謝!)


我寫了一個計數的代碼,外加統計最終的分布概率。如果想要計時的話,可能要根據 wait until next ms 的參數再換算成時間。不過我覺得對於這個問題,可能實現計數就可以了。

判斷 0 到 100 之間的隨機數是否小於10、是否10和20之間、是否20和30之間……要實現這個功能,可以像題主想的那樣用 case structure 判斷,然後對 case structure 的執行次數計數。不過我覺得,也可以直接用這個隨機數除以10,然後根據整除的結果和餘數直接判斷。比如25除以10,等於2,餘5,2 這個結果就可以判斷25位於20和30之間。再比如68,除以10,等於6餘8,根據6就可以判斷64在60和70之間。

實際的執行可以用兩個 array 來實現,一個是統計次數,另一個用指示燈來顯示是或者否。while loop 里每次循環生成一個隨機數,然後這個隨機數除以10,根據相除的結果,更新這兩個 array 的值。比如生成的隨機數是25,除以10的結果是2,所以就更新這兩個 array 的 index 等於 2 的那一項。對於計數的array,更新的結果是這次循環之前的數值再加一。對於顯示指示燈的array,更新的結果是從 false 變成 true。因為用來計數的 array 需要累加,每次循環都不能丟失之間的數據,所以要用 shift register。而顯示是或者否的 array,只需要實時顯示當前的這一個隨機數的狀態,所以不需要累加,每次循環完成都初始化成所有的都是 false,然後再判斷當前循環,給出array 中某一項為 true,然後循環完成,再全部初始化成 false。

當按下 stop 之後,計數 array 存貯的是所有的隨機數的計數,而指示燈的 array 顯示的是最後一次循環的隨機數的情況,只有一個指示燈亮。比如上面這次運行,從開始到按下stop,之間共循環了5751次,每循環一次,某一個指示燈亮起,某一個計數項加一。0到10之間的隨機數有575個、10到20之間有578個……最後一次循環的隨機數是47.7807,所以40到50之間的那個指示燈是亮的。

為了驗證結果,還可以在執行完成之後,把計數的這個 array 轉化為百分比。array 的每一項除以整個 array 的數值的總和,就可以得到每一項所佔的百分比。

最後運行的結果是這樣的,比如循環了 2258039次,最終每一項的百分比都比較接近於10%,說明隨機數真的是比較隨機的。

如果閑的無聊,運行的次數足夠多,每一項的概率就會越接近10%。


這種問題不應該來知乎問。


下午沒啥事,我就回答下吧。根據提問的要求,可以這樣實現:

  1. 寫隨機使LED亮的VI(可重入)

  2. 寫計算某個LED 亮的時間的VI(可重入)

  3. 寫主VI,在同一個loop中調用1、2 中的VI,由於是可重入的,可以多次調用。


推薦閱讀:

TAG:編程 | LabVIEW |