為什麼在非即時作業系統中Timed Loop的週期會有誤差

更新 Dec 11, 2018

產品資訊

Software

  • LabVIEW
  • LabVIEW Real-Time Module

問題敘述

我想以特定的速率 (50毫秒為一週期) 運行一個迴圈,為此,我創建了一個Timed Loop,並將其週期設置為50毫秒。 但是,當我將數據與時間戳記一起記錄到文件時,我注意到其執行速率並非相同,而是有些差異。舉例來說:我看到所記錄的時間戳間隔為45毫秒,47毫秒,53毫秒等,從不剛剛好為50毫秒。請問為什麼會這樣?

解決方案

出現這種情況的原因為作業系統不允許LabVIEW去完全控制調度程式。由於作業系統允許多工處理(multitasking)和多執行續(multiple threads),因此在記憶體中運行的不同應用程式必須共享處理器時間。當一個程式正在運行時,其他程式必須等待。這就是為什麼迴圈的執行速率不是恆定的原因。

想獲得穩定且準確的速率,解決方法是減少在記憶體中運行的程序數目。然而,能準確執行(deterministic execution)的最佳方法是切換到包含LabVIEW Real-Time module的即時作業系統。

本文是否有幫助?

無幫助