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