我的程式是讀取NI采集卡的14路AI資料,并顯示到C#界面上的chart控制元件里,同時還有6個串口以每秒1次的頻率讀取其他傳感器并顯示到界面的chart控制元件上。界面上共13個chart控制元件,總共顯示26條曲線,每秒鐘重繪一次。同時將各種資料存入到sql資料庫中,存入資料庫的頻率是每秒鐘存20條記錄。
現在出現的問題是:
attempted to read samples that are no longer available.the requested sample was previously available,but has since been overwritten.increasing the buffer size ,reading the data more frequently,or specIFying a fixed number of samples to read instead of reading all available samples might correct the problem.
百度翻譯后是:試圖讀取不再可用的示例。請求的示例以前可用,但后來被覆寫。增加緩沖區大小、更頻繁地讀取資料或指定固定數量的要讀取的示例,而不是讀取所有可用的示例可能會更正此問題。
錯誤提示的圖片如下:

結合測驗情況,發現問題的根源是整個程式中讀取NI采集卡的程式在運行時,從NI采集卡的自帶記憶體中讀取資料并處理時,這些資料已經被NI采集卡新的資料覆寫了,所以出錯。簡單說就是讀取并處理NI采集卡資料的程式運行的慢了或者晚了。
我使用的采集卡是NI6229,作業頻率是250kS/s,我在程式中設定NI采集卡的采樣率是2000,即每個通道每秒鐘獲得2000個采樣值,一共14個通道,每秒獲得的資料量就是28000個采樣值,即28kS/s,速度應該很安全。
讀取采集卡的程式使用的方式是回呼方式,即只要得到2000個數就產生回呼中斷,處理資料。
當然,這個錯誤并不是每次采集處理資料都會出錯,它有一定概率,系統作業時有六路測驗通道,如果全開,大概2000-3000秒會第一次出錯。如果只開1路,大概20000多秒才會第一次出錯。
目前程式已經盡量優化,但問題仍存在,請大家不吝賜教,謝謝
uj5u.com熱心網友回復:
接著優化,或降低采樣頻率。一種有效的優化方向,就是不要把資料和UI直接掛鉤。
資料按采樣頻率更新;UI按它能處理的速度來重繪。
uj5u.com熱心網友回復:
不需要資料庫的。資料可以放在記憶體里。一個簡單的比擬就是:
1、每50ms更新資料。
2、每2秒,UI重繪一次,展示當前資料。
uj5u.com熱心網友回復:
謝謝你的回復和建議。如果不把資料和UI直接掛鉤,那就需要把資料先存入資料庫,顯示時再調資料庫的資料,這樣會導致UI顯示曲線的效率會變低。不知道我這樣想對不對?
如果不存入資料庫,直接放在記憶體里,就會導致顯示時資料與時間對不齊的問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/74822.html
標籤:C#
上一篇:初學mvc5,遇到了一個問題
