基于Windows CE的便攜式數(shù)據(jù)采集與處理系統(tǒng)
選擇Window CE(以下簡稱CE)作為軟件運行平臺,這主要是基于它的特點[1]考慮的。CE是多線程、多任務、完全搶占式的32位嵌入式操作系統(tǒng)。新的內(nèi)核服務,例如嵌套式的中斷、更好的線程響應、新增的任務特性、信號量等,使得它能對事件和中斷立即響應,能夠滿足數(shù)據(jù)采集中苛刻的實時性要求。它支持的多線程使得數(shù)據(jù)采集和顯示處理等能夠同時進行。它具有強大的存儲和文件處理能力,能夠滿足數(shù)據(jù)存儲的需要。它對通信及網(wǎng)絡的支持,使得它與系統(tǒng)主機的通信變得更加容易。
1 系統(tǒng)的硬件結(jié)構(gòu)
系統(tǒng)硬件的主要組成如圖1所示。本文引用地址:http://butianyuan.cn/article/163210.htm
TPC-650是為CE或其他高級操作系統(tǒng)設計的硬件平臺。它適合于各種工業(yè)應用,包括工業(yè)自動化、自動化生產(chǎn)線、精密加工、生產(chǎn)過程控制、環(huán)境控制、終端信息系統(tǒng)、娛樂管理系統(tǒng)等。它具有高質(zhì)量的6.4“VGA TFT/5.7”QVGA STN液晶顯示器、Intel Pentium 266 MMX微處理器、10/100 Base-T網(wǎng)口、二個串口(RS-232,RS-232/422/485)、一個快閃卡插槽、一個外部16位PC/104模塊擴展槽和觸摸屏。它的核心是微型X86 CPU,但它在圖形顯示和網(wǎng)絡通信方面的性能更優(yōu)。
PCM-3718H是一個高效的多通道數(shù)據(jù)采集模塊,插在TPC-650的PC-104插槽。它支持12位的A/D轉(zhuǎn)換和數(shù)字輸入/輸出,能夠?qū)崿F(xiàn)DMA方式的單/多通道的A/D轉(zhuǎn)換。其DMA轉(zhuǎn)換的采樣頻率可達100kHz。它具有靈活的觸發(fā)選擇,包括軟件觸發(fā)、實時同步觸發(fā)和外部脈沖觸發(fā)。
PCLD-880是通用螺絲端子板,能提供方便的信號接線,并能與數(shù)據(jù)采集卡的20芯扁平電纜相連。它還帶有一個DB-37接口,可以支持帶有DB-37的數(shù)據(jù)采集控制卡。它是能在惡劣的環(huán)境下實現(xiàn)可靠連接的工業(yè)端子塊。
本系統(tǒng)的主要工作過程是用位移/速度/加速度傳感器提取模擬電壓信號,經(jīng)過PCLD-880,輸入到PCM-3718H。通過軟件編程控制PCM-3718H數(shù)據(jù)采集模塊,對模擬電壓信號進行采樣,完成A/D轉(zhuǎn)換和數(shù)據(jù)的存儲及處理。
2 軟件設計
2.1 應用程序執(zhí)行數(shù)據(jù)采集的工作過程
首先,從上位機下載任務文件,打開任務文件,在用戶界面上顯示為任務列表。操作人員將信息鈕只讀器與設備上的信息鈕貼合,程序自動從任務表中找到匹配項,進行數(shù)據(jù)采集。每采集完一個設備,該設備號從任務列表中自動刪除。
采集開始的同時會顯示三種曲線:實時曲線、平均值曲線和FFT曲線。操作人員根據(jù)平均值曲線的平穩(wěn)程度決定是否將采集到的數(shù)據(jù)存儲起來。實時曲線可以反應所測物理量的真實變化情況。FFT曲線體現(xiàn)所測物理量的頻域特征。采集完成后,向上位機發(fā)送數(shù)據(jù)。
2.2 多線程的數(shù)據(jù)采集
因為需要在較短的時間內(nèi)完成數(shù)據(jù)采集、分析、圖形顯示和數(shù)據(jù)存儲等任務,所以采用多線程模型利用多個線程分別完成各項任務。
本系統(tǒng)充分利用CE 操作系統(tǒng)的多線程特點將不同的任務分布到各個線程中,使各個任務同步而協(xié)調(diào)地進行。主線程負責創(chuàng)建用戶界面、接收消息等工作。為了保證數(shù)據(jù)采集不被其他線程中斷,專門開辟一個優(yōu)先級較高的線程來采集數(shù)據(jù)。各個線程(數(shù)據(jù)采集線程、數(shù)據(jù)動態(tài)顯示線程和數(shù)據(jù)存儲線程)中所要完成的工作并行進行。線程間的通信通過消息響應函數(shù)PostMessage 和CEvent對象來實現(xiàn)。
數(shù)據(jù)采集線程和顯示線程之間的同步通過使用線程同步對象Critical Section來實現(xiàn)。它能夠保證在同一時間只有一個線程訪問數(shù)據(jù)緩沖區(qū)。當采集線程向緩沖區(qū)中寫數(shù)據(jù)時,采集線程擁有Critical Section,顯示線程就不能夠訪問緩沖區(qū);只有當采集線程將Critical Section對象釋放之后,顯示線程獲得了Critical Section對象,進而才能讀取緩沖區(qū)中的數(shù)據(jù)。這就保證了顯示線程讀到正確的數(shù)據(jù)。數(shù)據(jù)存儲線程、采集線程及顯示線程三者之間的同步也是如此。
2.3 軟件模塊關系和各個模塊的功能
系統(tǒng)各軟件模塊關系如圖2所示。
2.3.1 通信模塊
通信模塊負責本系統(tǒng)與上位機之間的通信,包括從上位機下載文件和向上位機傳送采集的數(shù)據(jù)。使用CSocket類建立TPC-650上的客戶端和桌面PC上的服務器程序。用CSocket類與CSocketFile和CArchive類一起使用來完成數(shù)據(jù)的發(fā)送和接收。在程序運行時,為了“聽”由客戶端程序發(fā)出的連接請求,服務器程序首先運行。下面是建立服務器和客戶端通信程序的步驟。
(1)構(gòu)造一個CSocket類對象。使用BOOL Create(UINT nSocketPort=0,int nSocketType=SOCK_STREAM,LPCTSTR lpszSocketAddress=NULL)函數(shù)。在服務器程序中使用該函數(shù)時,要指定nSocketPort值。
(2)客戶端CSocket調(diào)用CAsynCSocket∷Connect函數(shù)連接服務器Csocket。服務器端用CAsynCSocket∷Listen函數(shù)“聽”客戶端發(fā)送的連接消息。調(diào)用CAsynCSocket∷Accept函數(shù)接收客戶端發(fā)送的消息。注意,virtual BOOL Accept(CAsynCSocket rConnectedSocket,SOCKADDR*lpSockAddr=NULL,int*lpSockAddrLen=NULL)函數(shù)需要一個新的rConnectedSocket作為參數(shù)。因此在接收之前,要先構(gòu)造一個新的CSocket類。
(3)構(gòu)造一個CSocketFile類對象,它與CSocket類對象相關聯(lián)。
(4)構(gòu)造一個CArchive類對象,它與CSocketFile對象相關聯(lián)。
(5)使用CArchive類對象在服務器和客戶端之間傳遞數(shù)據(jù)。
系統(tǒng)程序中有二部分要用到客戶端和服務器之間的通信。一是從上位機即桌面PC上下載任務文件;二是向上位機發(fā)送采集的數(shù)據(jù)。
在TPC-650上運行的客戶端程序主要完成:(1)連接服務器;(2)向服務器發(fā)送采集到的數(shù)據(jù);
評論