500兆/秒高速A/D系統的實現
4 Windows95下軟件設計的實時性考慮
本系統的軟件運行于Window 95平臺之上的。設計的指標要求每秒能計時200次的操作,每次采集512點,既要求系統在5毫秒內將A/D部分采到的512Bytes傳到計算機并存儲在硬盤上。這個要求對于PCI接口來說是非常低的,實測結果顯示系統的平均反應時間遠小于這個時間。但是結果顯示系統的平均反應時間遠小于這個時間。但是我們發現系統每處理10 000次響應總會有一到兩次的反應時間特別慢,超過5毫秒有時甚至達到40毫秒。而我們的系統要處理的是一個連續有序的事件,要求對每一個事件都必須做反應,否則后面的事件就會被誤處理。經過分析表明,這種現象完全是由于Windows95操作系統本身的原因造成的。Windows95是一種多任務的平臺,它的核心運行在優先級較高的Ring0上,普通的應用程序則運行在優先級低的Ring3上,應用程序靠內核的調度分時運行。Windows95是專門為PC機設計的,主要的用途是處理人們的娛樂以及辦公自動化等事務,考慮的是使用起來如何方便,并沒有對工業控制方面的實時性加以考慮,所以外層的應用程序有可能會隨時被內核打斷,根本沒有什么時間的保障。要想準確無誤地處理對時間要求比較荷刻的事件,必須把處理程序放在運行于內核級的中斷服務程序中去執行,這樣除非有更高級的中斷否則程序就不會被打斷。在編寫中斷服務程序處理函數時我們采用了Windriver提供的Kernal PlugIn功能,將自己編寫的中斷服務程序掛接在系統內核上。用此種方法可以實現每秒10 000次的斷處理而不丟失。我們在編寫中斷服務程序時借用了硬件設計中FIFO的思想,先在內存中開辟一塊共域作緩沖區分別設置讀指針和寫指針,硬件觸發中斷后服務程序先從A/D讀取數據進行處理,然后發了指令控制A/D等待下一次事件,接著向上層應用軟件發出消息請求上層應用程序從緩沖區讀取數據存盤和顯示。中斷服務程序發出的消息有可能不會馬上被上層應用程序響應,但只要緩沖區足夠大,每一次事件產生的數據就不會丟失。整個程序的流程圖如圖8所示。
本數據采集系統成成功地在上海某科研單位得到應用。雖然設計初衷是為了滿足某用戶的需求,但它容易擴展成通用的A/D采樣系統應用于相關的各個領域。
評論