丁香婷婷网,黄色av网站裸体无码www,亚洲午夜无码精品一级毛片,国产一区二区免费播放

現(xiàn)在位置:范文先生網(wǎng)>理工論文>電子通信論文>基于USB和多線程的實時數(shù)據(jù)采集系統(tǒng)

基于USB和多線程的實時數(shù)據(jù)采集系統(tǒng)

時間:2022-08-06 14:43:10 電子通信論文 我要投稿

基于USB和多線程的實時數(shù)據(jù)采集系統(tǒng)

摘要:說明基于USB技術的實時數(shù)據(jù)采集系統(tǒng)的硬件、軟件實現(xiàn);重點介紹PDIUSBD12帶并行總線的USB接口器件以及基于多線程思想設計應用程序的方法。
  關鍵詞:USBPDIUSBD12多線程實時數(shù)據(jù)采集
  
  1問題的提出
  
  隨著信息技術的飛速發(fā)展,各種數(shù)據(jù)的實時采集和處理在現(xiàn)代工業(yè)控制中已成為必不可少的。這就為我們的設計提出了兩個方面的要求:一方面,要求接口簡單靈活且有較高的數(shù)據(jù)傳輸率;另一方面,由于數(shù)據(jù)量通常都較大,要求主機能夠?qū)崟r數(shù)據(jù)做出快速響應,并及時進行分析和處理。
  
  傳統(tǒng)的外設與主機的通信接口難以滿足上述第一個方面的要求。這些接口一般采用PCI部線或RS-232串行總線。PCI總線雖然有很高的傳輸率(可達132Mbps),還能“即插即用”,但是它們的擴充槽相當有限,且插拔并不方便。RS-232串行總線雖然連接方便,可是它的帶寬非常有限,傳輸速度太慢,而且1條RS-232串口通信電纜只能連接1個物理設備。USB技術正是順序這一要求提出的,它集PCI和RS-232的優(yōu)點于一身:具有較高的傳輸速率(USB協(xié)議1.1支持最高傳輸速度達12Mbps,USB協(xié)議2.0支持最高傳輸速度可達148Mbps),實現(xiàn)了真正意義上的“即插即用”(Plug&Play),同時USB上最多可以連接127個外設。因此,將USB技術應用于數(shù)據(jù)的實時采集是非常適合的。
  
  實時系統(tǒng)對多任務的要求比較普遍。往往在后臺采集數(shù)據(jù)、進行數(shù)據(jù)顯示的同時,還要在前臺界面對用戶的操作做出響應。在實時系統(tǒng)中,對實時數(shù)據(jù)做出及時而準確的反應是十分重要的。由于受A/D采集速度等因素的限制,從硬件上采用USB接口技術的確可以提高速度,但畢竟?jié)摿τ邢,因此在現(xiàn)有硬件設計基礎上充分發(fā)揮軟件的作用就能進一步提升速度。使用傳統(tǒng)的單線程編程技術效率較低,無法及時處理,必須充分利用Windows的多任務處理功能,采用多線程編程技術來處理數(shù)據(jù)。
  
  在這個實時采集系統(tǒng)的設計上,我們將這兩種技術結(jié)合起來:在硬件上采用USB技術;軟件用VC++進行開發(fā),采用多線程編程,使系統(tǒng)的效率從這兩方面都得到提升。
  
  2系統(tǒng)體系結(jié)構
  
  2.1硬件結(jié)構
  
  整個系統(tǒng)硬件結(jié)構如圖1所示。
  
  實時數(shù)據(jù)采集系統(tǒng)主要由多路選擇開關、A/D轉(zhuǎn)換、單片機系統(tǒng)、PDIUSBD12、微機組成。多路選擇開關對多路信號進行選擇,使其分時輸入;A/D轉(zhuǎn)換實現(xiàn)模擬信號的數(shù)字化;單片機系統(tǒng)主要完成信號采集、數(shù)據(jù)通信;PDIUSBD12實現(xiàn)USB接口;微機完成數(shù)據(jù)接收、存入數(shù)據(jù)庫、數(shù)據(jù)處理、計算、顯示等功能。
  
  其中PDIUSBD12是系統(tǒng)USB技術得以實現(xiàn)的關鍵。它是Philips公司的一個帶并行總線的USB接口器件,支持本地的DMA傳輸。它完全符合USB1.1版的規(guī)范,同時集成了SIE(串行接口引擎)、FIFO存儲器、收發(fā)器以及電壓調(diào)整器。其主端點的雙緩沖配置增加了數(shù)據(jù)吞吐量并輕松實現(xiàn)實時數(shù)據(jù)傳輸,功能框圖如圖2所示。
  
  在這個系統(tǒng)中,單片機采用的是80C52。PDIUSBD12與80C52的接口有2種方式:多路地址/數(shù)據(jù)總線方式、單地址/數(shù)據(jù)總線方式。我們采用的是前一種方式:使用了80C52的INT0、ALE、WR、RD和P0口,當PDIUSBD12接收到主機的有效信息時,會產(chǎn)生一個中斷通知80C52進行處理。在此種方式下,PDIUSBD12在ALE下降沿的時候,對單片機的輸出地址進行鎖存。若輸出地址為奇數(shù),則表示對PDIUSBD12發(fā)送指令;若輸出地址為偶數(shù),則表示對PDIUSBD12進行數(shù)據(jù)傳輸。接口電路如圖3所示。
  
  80C52將A/D采集的數(shù)據(jù)經(jīng)PDIUSBD12的并行接口送入FIFO存儲器。當USB的傳輸速率達到12Mbps時,MMU(存儲器管理單元)和集成RAM作為USB之間速度差異的緩沖區(qū),這就允許單片機以它自己的速率對USB信息包進行讀寫。若FIFO中數(shù)據(jù)已滿,SIE會立即對數(shù)據(jù)做處理:同步模式的識別、并行/串行轉(zhuǎn)換、位填充/解除填充、CRC校驗/產(chǎn)生、PID校驗/產(chǎn)生、地址識別和握手評估/產(chǎn)生。SIE實現(xiàn)了全部的USB協(xié)議層,完全由硬件實現(xiàn)而不需要固件的參與。數(shù)據(jù)經(jīng)處理后由收發(fā)器通過數(shù)據(jù)線D+、D-傳送到主機。對一個單片機而言,PDIUSBD12看起來就像1個帶8位數(shù)據(jù)總線和1個地址位的存儲器件。
  
  2.2軟件結(jié)構
  
  USB的軟件系統(tǒng)包括三部分:客戶應用軟件、設備固件以及USB設備驅(qū)動程序。其中,設備固件和USB設備驅(qū)動程序又被稱為主機軟件。軟件層次如圖4所示。
  
  
  
  
  2.2.1固件設備
  
  設備固件(firmware)是儲存在程序內(nèi)存中的代碼。它使得USB接口芯片與主機和外設中其它電路能夠通信。固件由USB驅(qū)動程序(USBD)、主控制器驅(qū)動程序(HCD)兩部分組成。USBD的功能可以概括為:配置管理、總線管理、數(shù)據(jù)傳輸管理、提供客戶服務。USBD把IRP劃分為USB和設備需要大小的塊,確保每一個設備能分配到它所要求的USB資源,這樣它就可以支持USB設備配置。USBD提供了一個編程接口USBDI(USB驅(qū)動程序接口),給客戶驅(qū)動程序一種方式,用于傳輸請求,傳輸?shù)姆较蚩梢允莵碜曰虬l(fā)往USB的功能單元。大量的客戶服務是由USB的驅(qū)動程序提供的,它幫助USB的客戶控制和訪問它們的功能單元。HCD提供了對USB的低級支持,通過把IRP轉(zhuǎn)換成為單獨的事務處理后在USB上執(zhí)行。
  
  本系統(tǒng)固件設計的目標是使PDIUSBD12達到最高的傳輸速度。微處理器主要忙于多路數(shù)據(jù)的采集及處理,PDIUSBD12的固件設計成完全的中斷驅(qū)動。USB的傳輸可在后臺進行,這確保了最佳的傳輸速率和更好的軟件結(jié)構,同時簡化了編程和調(diào)試。它的基本思想是:后臺ISR(中斷服務程序)和前臺主程序循環(huán)之間的數(shù)據(jù)交換通過事件標志和數(shù)據(jù)緩沖區(qū)來實現(xiàn)。當PDIUSBD12從USB收到一個數(shù)據(jù)包時,就對單片機產(chǎn)生一個中斷請求,單片機立即響應中斷。在ISR中,固件將數(shù)據(jù)包從FDIUSBD12內(nèi)部緩沖區(qū)移到循環(huán)數(shù)據(jù)緩沖區(qū),并在隨后請求清零PDIUSBD12的內(nèi)部緩沖區(qū),以使其能接收新的數(shù)據(jù)包。然后返回到主循環(huán),檢查循環(huán)緩沖區(qū)內(nèi)是否有新的數(shù)據(jù)并開始其它的前臺任務。
  
  基于這種結(jié)構,主循環(huán)不關心數(shù)據(jù)是來自USB、串口還是并口,只檢查循環(huán)緩沖區(qū)內(nèi)需要處理的新數(shù)據(jù)。這樣,主循環(huán)程序?qū)W⒂跀?shù)據(jù)的處理而ISR能夠以盡可能高的可能高的速度進行數(shù)據(jù)的傳輸。
  
  這部分程序結(jié)構可包括:
  
  主循環(huán)程序——發(fā)送USB請求,處理USB總線事件和用戶功能處理等;
  
  硬件提以層——對單片機的I/O口、數(shù)據(jù)總線等硬件接口進行操作;
  
  PDIUSBD12命令接口——對PDIUSBD12器件進行操作的模塊子程序集;
  
  請求處理程序——對USB的標準設備請求進行處理和對用戶添加的廠商請求進行處理;
  
  中斷服務程序——當PDIUSBD12向單片機發(fā)出中斷請求時,讀取PDIUSBD12的中斷傳輸來的數(shù)據(jù),并設定事件標志和Setup包數(shù)據(jù)緩沖區(qū),傳輸給主循環(huán)。
  
  2.2.2USB設備驅(qū)動設計
  
  在Windows下,與USB外設的任何通信必須通過USB設備驅(qū)動,這個驅(qū)動知道如何與系統(tǒng)的USB驅(qū)動和訪問設備的應用程序通信。設備驅(qū)動是保證應用程序訪問硬件設備的軟件組件,使得應用程序不必知道物理連接、信號和與一個設備通信需要的協(xié)議等的細節(jié),可以保證應用程序代碼只通過外設名字訪問外設或端口目的地。應用程序不需要知道外設連接端口的物理地址,不需要精確監(jiān)視和控制外設需要的交換信號。
  
  設備驅(qū)動通過在應用層和硬件專用代碼之間的轉(zhuǎn)化來完成它的任務。應用層代碼一般使用一套操作系統(tǒng)支持的函數(shù),硬件代碼則處理那些訪問外設電路的必要協(xié)議。設備驅(qū)動能與應用程序之間相互通信是通過Windows提供的API函數(shù),這些函數(shù)使應用程序能夠控制顯示器、處理信息、訪問存儲器、讀寫磁盤和其它設備。對于一些標準設備,Windows提供通用驅(qū)動;不過,這個實時數(shù)據(jù)采集系統(tǒng)是自定義的設備,對此Windows并不提供通用的驅(qū)動,需要對設備編寫自定義的驅(qū)動,并且必須遵循微軟在Windows98和更新版本中為用戶定義的Win32驅(qū)動模式。Windows98和Windows2000中,USB總線驅(qū)動是WDM驅(qū)動,擴展名為.sys。編寫USB設備驅(qū)動需要使用VisualC++,此外還需要Windows98或2000設備開發(fā)包(98DDK/NTDDK)。USB設備驅(qū)動的編寫通常不是一項簡單的任務,驅(qū)動開發(fā)包就提供一種途徑,通過做盡可能多的工作為跳過驅(qū)動開發(fā),這些開發(fā)庫有BlueWaterSystems的WinDK和CompuwareNuMega的DriverWorks。這些工具包能夠集成到VisualC++編程環(huán)境中。運用這些工具包只需很少的時間就能生成一個高效的驅(qū)動程序。
  
  這一部分可以包括4個模塊:初始化模塊、即插即用管理模塊、電源管理模塊和I/O功能模塊。初始化模塊提供一個DriverEntery入口點來執(zhí)行大量的初始化函數(shù)。即插用模塊實現(xiàn)USB設備的動態(tài)插拔及配置。當硬件檢測到USB設備接入時,Windows查找相應的驅(qū)動程序,并且調(diào)用它的DriverEntery例程,PnP(即插即用)管理器調(diào)用驅(qū)動程序的AddDevice例程,通知它添加了一個設備。驅(qū)動程序會收到一個包含有設備分配資源信息的啟動設備的IRP,在對設備進行正確配置后,開始與硬件的對話。在運行過程中,如果設備被拔除,PnP會發(fā)出相應的IRP,驅(qū)動程序會進行盯應處理。USB設備的掛起和喚醒是由電源管理模塊進行管理的。I/O功能模塊完成I/O請求的工作。
  
  2.2.3應用程
  
  
  
  序設計
  
  固件程序和USB設備驅(qū)動程序的設計是USB設備開發(fā)者的工作,對于廣大用戶而言,與系統(tǒng)的交互是通過應用程序?qū)崿F(xiàn),而且整個實時采集系統(tǒng)的主要數(shù)據(jù)處理都是在這里完成的。因此,運行效率高、界面友好、具有強大數(shù)據(jù)分析和處理的應用程序的設計,也是系統(tǒng)設計上一個不容忽視的關鍵因素。應用程序的主要功能有:啟動/關閉USB設備,檢測USB設備,設置USB數(shù)據(jù)傳輸管道/端口,設置A/D,采集數(shù)據(jù),顯示/分析數(shù)據(jù)。這里,我們采用VisualC++6.0作為程序的開發(fā)環(huán)境,并且充分運用了多線程的編程思想。
  
  在這個設備中,設置4個線程:首先是1個主線程,負責用戶界面,并保持中樞地位。它的生存周期也就是整個用戶程序的主存期,用戶的動作(例如鼠標事件、鍵盤事件)都會觸發(fā)主線程的消息機制,從而完成對用戶的響應;而3個分離的輔助線程分別負責數(shù)據(jù)的采集、數(shù)據(jù)的分析處理以及數(shù)據(jù)的顯示這3個不同的任務。輔助線程是在主線程運行過程中產(chǎn)生的,它的生命就是線程函數(shù)本身,函數(shù)一旦return,線程就結(jié)束了。因此,輔助線程的生存周期只是整個程序生存期的一部分。
  
  MFC程序只會有一個CwinApp對象,而CwinApp派生自CwinThread,即產(chǎn)生了應用程序的主線程。每當需要一個額外的線程時,應先產(chǎn)生一個CwinThread對象,再調(diào)用全局函數(shù)AfxBeginThread(),將線程產(chǎn)生出來。
  
  對于輔助線程(workerthread),要為它準備一個線程函數(shù),然后調(diào)用AfxBeginThread()。例如:CWinThread*pThread=AfxBeginThread(ThreadFunc,&param);
  
  UINTThreadFunc(LPVOIDpParam);//線程函數(shù)
  
  對于用戶界面線程(UIthread),不能夠光由一個線程函數(shù)來代表,因為它要處理消息,它需要一個消息循環(huán)。應該先從CWinThread派生一個自己的類,再調(diào)用AfxBeginThread()產(chǎn)生一個CWinThread對象。  
  結(jié)語
  
  基于USB技術的實時數(shù)據(jù)采集系統(tǒng),在編程上運用了多線程思想;從硬件和軟件兩方面錄求較佳的解決途徑,并將二者結(jié)合起來,在實際中取得了良好的運行效果。
  
  
  
  

【基于USB和多線程的實時數(shù)據(jù)采集系統(tǒng)】相關文章:

基于USB和多線程的實時數(shù)據(jù)采集系統(tǒng)08-09

基于Verilog HDL設計的自動數(shù)據(jù)采集系統(tǒng)04-12

基于Small RTOS51的數(shù)據(jù)采集器設計04-12

提高實時操作系統(tǒng)的實時性能和可靠性策略08-19

基于Vxworks實時操作系統(tǒng)的串口通信程序設計與實現(xiàn)08-19

基于數(shù)據(jù)庫技術的實驗室管理系統(tǒng)的研究08-18

利用Delphi 3.0開發(fā)微機數(shù)據(jù)采集與處理軟件系統(tǒng)04-12

基于校園一卡通數(shù)據(jù)系統(tǒng)的學生行為分析研究08-19

基于試題庫的試卷管理和自動排版系統(tǒng)的設計和實現(xiàn)08-20

嵌入式實時系統(tǒng)開發(fā)的正確選擇08-19