使用Wait(ms),每次不是剛好1000ms,久了導致"重秒"

之前用Wait Until Next ms Multipe會導致原本程式剛開始執行時會重秒,如這樣
image

後來我使用 Wait(ms) 改善了程式剛開始時會重秒的問題 (使用1000ms)
但 程式跑幾小時就會出現實際上其實不是真正剛好1000ms會多一點點
導致跑久了會有誤差大約15分鐘差0.1秒,跑快兩小時會差1秒

下圖是重秒的時刻

若長久下來看來Wait Until Next ms Multipe似乎比較穩定,但缺點是一開始會重秒,Wait(ms)會越跑越快,請問各位高手知道其原因或是更好之解決方法嗎,長久跑下來讓程式不會有重秒或空秒的問題發生。
Wait(ms).vi (11.5 KB)

那就 不要用系統的時間
你自己再迴圈內加 1秒
毫秒歸零迴圈內加1秒

謝謝您的建議,不過因為是要跑程式數據的,若不抓系統時間的話,採用+1秒的方式,跑幾天下來誤差可能會越來越大,可能還是需要抓系統時間為準。

就我個人觀點來說,0.999秒感覺跟1S是差不多的。
如果你覺的數據變化在每0.001秒都很重要,我建議要使用高階示波器等級的作法。
如果只是長時間數據的監控,我認為這些偏差應該部會影響到你的結果。

實際上這可能已經是軟體的極限了。

這很正常呀,電腦很快,但不代表他很穩。

你要確保更穩定的時間控管,要考慮real time架構。

然後我認為要看應用比較好給建議。舉例來說,如果你做的是量測,那其實你只需要處理好time stamp。總之從目前有的資訊,real time有他是你的最佳解,可以參考NI的real time module,硬體有NI的RT PXI, cRIO, sbRIO, WPC的GECO。

喔對了,這篇應該可以解決的你對於兩種wait的疑惑。

藉著延伸一下這話題~
我記得 event structrue 的time out也是能算時間,那也會出現原PO作業時間拉長導致時間偏移嗎?

對時間要求精確的話在桌面系統mS等級內可以使用 time loop 結構來達成
event structrue 就別想了 一樣會有偏差
但就算是使用了time loop 也只是保證相對精確而己
要完全準確請使用 real time system

謝謝各位的解釋,拉長會導致時間偏移,會產生重秒現象