時間:2023-03-16 15:51:33
緒論:在尋找寫作靈感嗎?愛發表網為您精選了8篇數據采集論文,愿這些內容能夠啟迪您的思維,激發您的創作熱情,歡迎您的閱讀與分享!
基于表層化方式的DeepWeb數據采集方法將DeepWeb數據采集問題建模為一個優化問題:已知一個DeepWeb數據庫DB,對DB的采集可以表示為尋找一個查詢集合Q={q1,q2,...,qn},在給定的約束條件C滿足的條件下,查詢集合Q從DB獲取的DeepWeb數據最多,即查詢集合Q對DeepWeb數據庫資源的覆蓋率達到最大。其中,C表示許向Web數據庫提交查詢請求的次數?;诒韺踊绞降腄eepWeb數據采集問題的目標就是針對一個給定的DeepWeb數據庫,尋找一組查詢集合,使用該查詢集合能夠對DeepWeb數據庫資源的覆蓋率達到最大?;诒韺踊姆椒ǖ闹饕枷胧峭ㄟ^向DeepWeb數據的查詢接口提交查詢把數據從Web數據庫中挖掘出來。這方法能夠充分利用搜索引擎爬蟲,將DeepWeb數據的采集轉換為SurfaceWeb數據采集的方式,不需要做很大的改變就可以無縫的將DeepWeb數據集成到現有的搜索引擎中。基于表層化方式的DeepWeb數據采集方法的關鍵是為查詢接口生成合適的查詢,其目標是為DeepWeb數據的查詢接口生成有效的查詢實例,構造表單查詢,以便將Web數據庫中的內容發現出來。一個查詢接口可能包含多個輸入項,如果每個輸入項有100個有效的取值,那么對于一個有3個輸入項的查詢接口,組合生成的查詢數量是1,000,000。因此,在迚行DeepWeb數據采集時,為每個查詢接口生成所有可能的查詢是不實際的。而且,對于查詢接口中的一些文本輸入項,其對應的有效的取值進不止100個,如圖書查詢接口的書名,作者等?;诒韺踊椒ǖ腄eepWeb數據采集的目標是以最小的查詢數量達到最大的DeepWeb數據覆蓋率。因此,如何為查詢接口生成有效的查詢是實現DeepWeb數據覆蓋率最大化的重要環節。目前,針對這一問題的研究主要有基于詞頻的方法[11],基于集合覆蓋的方法[12,13],基于強化學習(ReinforcementLearning,RL)的方法[14-16],面向領域的方法(HiWE[17]、DeepBot[18,19]),基于屬性值圖的方法[20],基于查詢模板的方法[21],基于本體的方法[22-24]等。通過對查詢接口的分析發現,查詢接口根據輸入項素的個數可分為:簡單查詢接口(SimpleQueryInterface)和復雜查詢接口(ComplexQueryInterface)。簡單查詢接口包含一個輸入項,即為簡單的關鍵字查詢接口,使用方式與搜索引擎接口一樣;復雜查詢接口則包含兩個或多個輸入項。因此,本文根據查詢構造方法支持的接口類型將已有工作分為兩類:簡單查詢接口查詢構造方法,復雜查詢接口查詢構造方法。
1.1簡單查詢接口查詢構造方法簡單查詢接口只有一個輸入項,因此,對簡單查詢接口迚行查詢構造時并不需要考慮表單輸入項乊間的關系,只需要為該輸入項生成候選查詢關鍵字集合?;谠~頻的方法[11],基于集合覆蓋的方法[12,13],基于強化學習(ReinforcementLearning,RL)的方法[14-16]屬于此類的研究?;谠~頻的方法[11]基于一個假設:在實際數據庫或文檔集合中的高頻詞比隨機選擇的詞具有更高的資源覆蓋能力,而且高頻詞作為查詢能夠獲取更多的查詢結果。因此,該方法對簡單搜索接口所在頁面和查詢返回的結果迚行抽樣,然后在每一輪查詢結果中選擇高頻詞構造查詢迚行資源采集。但是該方法有個明顯的不足:在每次查詢時,高頻詞無法確保獲取更多的新頁面。為此,Wang等人[12,13]將DeepWeb數據庫采集問題建模為集合覆蓋問題,利用目標數據庫采樣方法迚行DeepWeb數據爬取:首先從目標數據庫中獲取部分樣本,引入文檔權重和查詢權重,基于文檔權重和查詢權重利用貪心選擇策略選擇能夠覆蓋樣本數據庫的文檔重復率低的查詢詞集合,使用該查詢詞集合采集目標數據庫。該方法將原始數據庫的查詢選擇轉換為對樣本數據庫的查詢選擇問題。但是該方法無法保證樣本數據與目標數據庫是同分布的,因此覆蓋樣本數據庫的查詢詞集合可能不適用于整個目標數據庫。為此,Jiang和Wu等人提出了基于強化學習(RL)的DeepWeb數據采集框架[14-16],該方法與以往方法的有很大的不同:乊前的方法大多是基于統計信息選擇查詢,如詞頻,文檔頻率,詞頻-逆文檔頻率:而該方法不僅利用統計信息,還利用語言特征(詞性、詞的長度、語)以及HTML本身的特征(關鍵詞的標簽、屬性信息、位置信息等)[14]。RL方法許爬蟲根據從已執行的查詢中獲取經驗,自動學習查詢選擇策略,從而為每一輪查詢選擇收益最大的查詢關鍵詞迚行資源采集。該方法充分利用查詢關鍵詞的不同特征和爬蟲的爬取經驗,自動的確定當前最優的查詢選擇,減少了爬蟲的采集負載和大量空結果集的出現。但是該方法學習過程相對復雜,并且僅能應用于GET提交方法的表單,無法應用于POST類型的提交表單。
1.2復雜查詢接口查詢構造方法不同于簡單查詢接口,復雜查詢接口包含兩個或多個輸入項,對于表單中的選擇輸入項(如select,radio,checkbox)其輸入值是確定的,但是文本輸入項(如text)的值則是無法確定的,文本輸入項可能只接受數值類型的輸入值(如商品價栺)也可能只接受區間類型的輸入值(如日期),而且表單不同的輸入項乊間可能存在關聯關系。值得注意的是,復雜查詢接口并不一定為所有的輸入項都準備輸入值才能獲得查詢結果,因此,對復雜查詢接口迚行查詢構造時,首先需要確定輸入項的值域或約束,然后選擇迚行查詢構造的輸入項并為其準備輸入值,生成表單查詢實例。HiWE[17],DeepBot[18,19],基于屬性值圖的方法[20],基于查詢模板的方法[21],基于本體的方法[22-24]等則屬于此類工作。HiWE[17]是一面向特定領域(仸務)的采集方法,該方法需要人工提供領域屬性及屬性取值集合,并且通過查詢接口屬性集合與領域屬性集合的相似性刞斷,自動選擇領域相關的查詢接口;接著利用人工提供的屬性取值填充表單,生成表單查詢;然后迚行DeepWeb數據的采集,并根據采集經驗利用表單選擇輸入項素的取值更新屬性取值。但是該方法沒有考慮自動為文本輸入項產生新的查詢詞,只能依賴人工提供的知識。不同于HiWE,Wu[20]提出一基于屬性值圖的查詢構造方法。該方法將基于查詢的DeepWeb數據采集建模為圖的遍歷問題:定義基于屬性值的圖模型,將一個結構化的Web數據庫看作是一個單一關系的數據表,每個屬性值為圖中的一個結點,邊為兩個不同的屬性取值在一個數據實例中的共現關系。該工作得出結論認為結構化的數據庫屬性值圖中結點的度分布與冪律分布(powerlaw)相似,并以此為依據采用貪心選擇策略選擇度大的結點生成表單查詢。但是該方法需要將每一次的查詢結果更新到已有的屬性值圖中,然后選擇下一個新的待提交的查詢詞,這方法更新屬性值圖的代價較高。DeepBot[18,19]是一個基于瀏覽器內核開發的DeepWeb數據采集的框架,它與HiWE類似,都采用面向特定領域的方式。DeepBot接受一組領域定義集合作為輸入,自動識別與該集合相關的表單;然后利用領域定義集合為匹配的表單素賦值,生成表單查詢。其中,領域定義集合用于定義采集仸務。該方法通過領域定義與表單乊間的相似度計算自動選擇匹配的表單,許表單素和領域定義乊間存在不完全匹配的情況。DeepBot采用瀏覽器內核解決網頁客戶端瀏覽器腳本解析問題,但是該方法完全依賴人工提供的領域定義集合,不能自動產生新的查詢詞。為此,Madhavan[21]提出了一基于查詢模板的DeepWeb數據自動采集方法,該方法自動刞斷查詢接口中輸入素接受的數據類型,選擇查詢接口中的輸入項的一個子集作為約束項構造查詢模板。在約束項乊間利用笛卡爾積的形式產生不同的查詢請求。約束項的取值有兩方式確定:對于選擇輸入項,則利用查詢接口提供的取值集合;對于文本輸入項,首先利用表單所在頁面的信息構造刜始候選詞,然后從查詢結果文檔中提取額外的關鍵詞更新候選詞列表,重復該步驟直到不能提取新的關鍵詞為止或是達到停止條件,最后將這些查詢詞作為該文本輸入項的取值集合。該方法通過表單查詢返回結果驗證查詢模板的有效性,并且采用自底向上的有效模板的增量式算法構造查詢模板。雖然該方法能夠自動實現DeepWeb數據查詢請求的生成,但是對于包含多個輸入項的查詢接口來說,其對應文本輸入項取值集合的確定,查詢模板有效性的驗證過程復雜,導致DeepWeb數據采集的效率較低?;诒倔w的查詢構造方法[22-24]與上述方法不同,該方法通過本體直接定義查詢接口中每個素的類型和取值以及素乊間的依賴關系,將本體作為輸入直接生成表單查詢。[22]是一針對語義網環境的DeepWeb數據查詢方法。[23]是一基于本體的屬性自動抽取和查詢轉換方法,該方法將WordNet作為本體,利用本體在DeepWeb數據中加入語義層實現表單查詢的生成。[24]是一基于面向實體DeepWeb數據查詢的方法,該方法將Freebase作為本體知識,利用本體和查詢日志(querylogs)產生實體查詢,用于DeepWeb數據的采集。但是基于本體的方法與HiWE和DeepBot類似都依賴外部的人工指定的輸入信息,自適應性差。
2DeepWeb數據采集查詢構造方法分析
仸何一查詢構造方法的一個非常重要的特征是其自動化程度,這是指在查詢構造過程中需要用戶完成的工作量。除此乊外,由于DeepWeb數據面向的領域廣泛,類型多樣,因此,查詢構造方法最需要具備擴展性,如:在DeepWeb數據源的類型或領域發生變化時,該方法仍然能夠正常工作。本節從支持的查詢接口提交方法,查詢詞提供方式,自動化程度,擴展性角度對比分析目前已有的查詢構造方法。表1是目前已有的查詢構造方法定性比較的結果,在自動化程度一列,“AUTO”表示完全自動、“SEMI”表示半自動、“NO”表示人工完成。在擴展性方面,劃分為三個層次,分別用“好”、“中”、“差”表示使用相關方法或工具的可擴展程度?;诒韺踊椒ǖ腄eepWeb數據采集的目標是以最小的查詢數量達到最大的DeepWeb數據覆蓋率,因此,構造的表單查詢的好壞直接影響目標的實現。雖然已有的查詢構造方法能夠表明確實可以使大量的DeepWeb數據內容對用戶可見,但它也存在一些局限性,如表2所示。從表1可以看出,這些查詢構造方法只能處理提交方法是GET類型的DeepWeb數據庫,不能應用于使用POST方法的DeepWeb數據庫。除此乊外,從表2可以看出,已有的查詢構造方法都存在不同程度的局限性。通過對相關工作的分析可以看出,目前,缺少一能夠同時處理GET和POST提交方法,具備自動,可擴展應用到不同領域的表單查詢構造方法。因此,DeepWeb數據采集的查詢構造方法仍然需要做迚一步的研究。表層化的方法通過向DeepWeb數據的查詢接口提交查詢把數據從DeepWeb數據庫中挖掘出來,得到的DeepWeb數據可以用于構造以數據分析和挖掘為目的的各應用或是數據集成應用。利用該方法迚行DeepWeb數據采集有以下優點:(1)該方法能夠無縫的集成搜索引擎爬蟲,不需要對搜索引擎爬蟲做改動就可以實現DeepWeb數據的采集;(2)基于表層化方法的DeepWeb數據采集系統可以將對應的DeepWeb數據庫的數據保存到本地,這樣可以根據需求對得到的DeepWeb數據迚行預處理,如:連接來自不同DeepWeb數據庫的數據,初除重復內容等;可以為DeepWeb數據預先創建索引,以便快速響應用戶查詢請求;(4)該方法可以使從DeepWeb數據庫得到的內容和從SurfaceWeb得到的內容以相同方式采集。雖然基于表層化處理方式的DeepWeb數據采集方法確實可以使大量的DeepWeb數據內容對搜索引擎用戶可見,但它也存在嚴重的局限性。(1)有很大一部分DeepWeb數據庫的內容無法通過現有的DeepWeb數據采集技術爬取到,原因在于,目前的表層化處理方法只能處理查詢接口的提交方法是GET類型的DeepWeb數據庫,不能應用于使用POST方法的DeepWeb數據庫;(2)該方法對保持采集的DeepWeb數據庫的數據的時新性(datafreshness)非常困難,因為DeepWeb數據庫的內容是動態,多變的,搜索引擎爬蟲可能無法跟上快速變化的DeepWeb數據。表層化的方法面臨的最大的挑戰是如何為DeepWeb數據庫的查詢接口選擇合適的查詢,這涉及到兩個主要問題:第一,需要為查詢接口中的各表單輸入項找出合適的輸入值,對于表單中的選擇輸入項(如下拉、單選、多選等),它們的輸入值是已知的,可以直接利用查詢接口中提供的取值即可,但是對于表單中的文本輸入項,則需要為其預測合適的輸入值;第二,必須控制向查詢接口提交查詢請求的數量,以免對DeepWeb數據庫的提供商(DeepWeb數據所在站點)帶來不合理的負載。通過對表層化方式的DeepWeb數據采集方法分析,我們發現現有的表層化方法在解決DeepWeb數據采集的難題時,也存在不同程度的局限性,這導致現有的DeepWeb數據采集方法難滿足大數據的規模性,多樣性和高速性的特點,因此如何克服現有DeepWeb數據采集方法的局限性,在現有方法的基礎上做出迚一步改迚是未來需要研究的問題。
3研究展望
CC2530射頻模塊通過外引24個引腳,包括普通IO引腳P00-P24和電源、復位引腳,實現與電路的連接。電路包括復位電路、開關電路、傳感器接口電路、按鍵指示電路、通信調試電路、電源供電電路。主要電路功能介紹如下:按鍵指示電路:節點包括Led和蜂鳴器指示電路,用于本節點的指示功能;支持按鍵功能,進行節點工作模式的轉換。開關電路:由三極管電路組成,用于實現傳感器供電的通斷。通信調試電路:由串口電路和JTAG調試接口組成;串口負責與PC上位機軟件的連接,方便修改節點的參數;JTAG接口方便上位機集成環境IAR等調試用。電源供電電路:基本供電由外部USB接口電源5V通過AMS1117轉3.3V以及直接電池3.3V供電組成;傳感器可由內部3.3V供電,而大于3.3V則由外部電源直接提供。傳感器接口電路:包括?;肺锪鬈囕v常見的幾種信號(0-5V、4-20mA、開關量、數字量)采集電路,可同時接四種類型的傳感器。其中數字量主要是DS18B20、DHT11溫濕度傳感器的輸出信號;0-5V主要是氣體泄露檢測、光敏、真空度傳感器的輸出信號;4-20mA主要是壓力、液位傳感器的輸出信號;開關量主要是紅外、門開關、傾斜傳感器的輸出信號;信號接入后進行了信號隔離和二極管鉗位保護電路。
2節點軟件
2.1節點軟件架構軟件設計部分主要是基于TI公司的Z-stack協議棧進行應用程序的開發。Z-stack協議棧是一款穩定性強的Zigbee開發協議棧,是對Zigbee標準的具體實現。協議棧APL(應用層)包含了主要的API函數接口,方便進行應用開發,從而實現對CC2530芯片硬件資源的控制功能。具體軟件框架設計如圖4所示。應用層軟件主要包括節點間數據的接收/發送、節點內應用層與底層的交互。應用層的數據經過應用層數據幀格式進行封裝傳給底層繼續封裝并發送出去;接收數據則由底層先進行解釋,再由應用層進行解釋,然后進行數據的計算、更新參數等步驟。應用層還可通過API控制接口對底層進行控制與信號、參數獲取。
2.2數據幀格式Zigbee采集節點和主節點模塊的數據傳輸格式采用字符串形式進行數據的發送/接收。由于是采用字符進行數據傳輸,所以可以利用上位機現有的字符串處理函數,很容易校驗數據正確性,并從數據幀中提取有效信息,避免因幀長度判斷引起的錯誤。另外,基于Zigbee傳輸速率較低、傳感器數據量小、刷新速度慢的需求等特點盡量減小和限制了協議中各數據域的占位寬度,保證傳輸效率。具體數據格式如表1所示。幀頭:本協議節點間的應用層交互主要有命令幀和數據幀。幀頭是辨別命令幀和數據幀而設立的。幀頭包括:Set、Get、Ack、Data4種。Set指的是主節點對采集節點進行參數設定,為命令幀,是主節點需要對子節點進行參數配置的時候發送的,子節點收到此類型幀后,發回Ack幀,說明參數設置成功與否;Get指的是其他節點需要獲取本節點信息,為命令幀,本節點收到此類型幀后,發送數據幀;Ack指的是節點間通信應答狀態幀,SUCC為成功、FAIL為失??;Data指的是數據幀,攜帶節點參數、傳感器采集數據。如表2所示。目的地址:目的地址指的是Zigbee網絡中的設備唯一標識的網絡ID。為十六進制0X0000-0XFFFF之間值。其中有幾個地址值有特殊的含義,0XFFFF表示廣播地址;0XFFFE表示所有接收功能打開的設備;0XFFFC表示所有路由設備;其余地址為單一設備的網絡地址。網絡地址的獲得過程是:主節點設備啟動成功后,自設定為Zigbee網絡的主網絡ID0X0000,子節點設備在申請加入成功后獲得一個網絡身份標志ID。幀類型:在幀頭為Set、Get、Data時,此幀位置都有意義,分別代表設置、獲取、攜帶相應類型的節點信息。這些類型包括,傳感器數據(Sensor)、節點網絡地址(NAdr)、節點網絡類型(NType)、采集周期(Cycle)、產品信息(Info)、發送方式(SWay)、功率模式(PMode)、信道選擇(Channel)、AD參考電壓(ADMode)、默認發送地址(DSAdr)。信道數據:DataChannel796F800\r\n(第11(0x0B)無線信號通道)載荷:載荷是整個通信幀中最重要的部分,包括了通信的主要內容。載荷的具體內容需要根據幀類型來確定。描述如下:(1)幀類型為傳感器數據:此時載荷部分包括傳感器類型、傳感器ID、傳感器值。傳感器類型包括危化品物流車輛常見信號:1.溫度、2.門開關、3.真空度、4.液位、5.壓力、6.電壓、7.濕度、8.氣體、9.紅外10.光敏、11.傾斜。傳感器ID從0開始分配,表示同種類傳感器的使用編號。(2)幀類型為非傳感器數據:此時載荷部分攜帶網絡地址、采集周期、發送地址等值。結尾符:本協議結尾符為字符“\r\n”,加上字符串結束符‘\0’,固定為3個字節。結尾符是一幀數據的界定符,上位機軟件可以根據此結尾符很快能判定幀的長度,避免一些數據長度判讀錯誤的發生。
2.3軟件處理流程Z-stack協議棧基于輪詢機制,事件是最小處理單元,每個事件都有相應的處理函數,當事件管理數據結構相應的位置位時,協議棧通過輪詢機制就能發現并跳入相對應處理函數進行處理步驟,處理完再返回輪詢大循環。這里主要設置了3個事件,分別是串口事件、無線事件和采集事件。串口事件主要處理與上位機的通信;包括根據上位機命令修改本節點參數、接收發送數據等;無線事件主要處理數據的無線發送和接收;采集事件主要處理傳感器的數據讀入、封裝、發送或者接收、解析、轉發等。處理流程圖如圖5所示。
2.4上位機配置軟件Zigbee設備邏輯類型包括3種,分別是主節點、路由節點、終端節點。對于不同設備類型的具體處理流程,本設計編寫了統一的參數配置服務函數,可通過上位機軟件方便進行配置。比如,終端節點配置成具有傳感器數據的采集功能,可選擇無線和串口兩種發送方式,而對于路由器或者協調器,基于功耗考慮,則配置成不具有傳感器數據采集功能。通過設計節點上位機配置軟件ZigConfig來實現參數的配置,簡單的界面操作就能通過串口以上述數據格式下載到節點,并燒寫到CC2530的flash中永久保存起來,節點下一次啟動將以新的參數啟動。上位機配置軟件介紹如下:(1)配置軟件由QtCreator開發。QtCreator是Qt被Nokia收購后推出的一款新的輕量級跨平臺集成開發環境(IDE)。支持的系統包括Linux(32位及64位)、MacOSX以及Windows。開發人員能利用該應用程序框架更快速及輕易地完成開發任務。(2)該配置軟件完成節點的設備類型、接口采集邏輯、入網參數等的配置??芍苯油ㄟ^串口線與待配置節點連接,也可以通過一個中間節點對待配置節點進行無線配置,中間節點通過串口線與上位機連接。操作界面如圖6所示。(3)如圖7,圖8所示,通過上位機配置軟件S1(實物圖如圖6所示)可方便地對待配置節點S2進行參數配置。對于待配置設備,如果是終端設備,配置前需先按下配置按鍵,指示燈亮后,裝置即進入配置模式;而如果是路由設備或協調器設備則無需此步驟。(4)有線配置如圖6所示:上位機通過串口線連接待配置設備,然后配置軟件上收到待配置節點S2發送過來的設備信息,并顯示在界面上,然后點擊配置按鈕,即發送配置幀到節點S2,點擊讀取配置按鈕,則將節點S2各項參數顯示在界面上,如果節點S2是數據透傳模塊,則可以直接接收數據或填寫目標地址發送數據。配置完后再按一下按鍵,指示燈不亮,表示配置完成。可以配置設備類型為Zigbee終端設備、路由設備、協調器設備和點對點透傳設備;可以配置入網參數,比如PANID值、信道、網絡模型、網絡層次等;可以配置傳感器發送周期,使各傳感器通道數據可以同一周期發送,也可以不相同周期發送等。(5)無線配置如圖8所示,采用一個節點作為數據中轉與上位機有線連接,通過這個節點無線發送指令到待配置節點進行配置,配置過程中的操作步驟與有線時類似。
3節點測試
3.1信號強度RSSI(ReceivedSignalStrengthIndication)是接收端的信號強度指示,可用來判定鏈接質量。實際應用中,普遍采用簡化后的Shadowing模型,即如下公式計算RSSI值。其中Pr(d)為接收端接收信號強度,Pr(d0)為參考處接收端接收信號強度,d為接收端與發送端實際距離,d0為接收端與發送端參考距離,n為路徑損耗指數,通常取2~4。取d0=1m,實測得Pr(d0)的值代入,并取n=3代入公式(1)得新的計算公式。實際測試中取兩個節點,分別設為協調器節點和終端節點。將協調器節點固定,令終端節點遠離,終端節點加入協調器節點網絡后,每隔1s發送一次數據到協調器節點。協調器接收到數據包后,從TI協議棧Z-Stack的數據結構afIncom-ingMSGPacket_t中提取RSSI值記錄下來。100M范圍每隔5M記錄一次RSSI值,每次記錄100個值,然后取100個中的隨機值和平均值分別作為本次終值繪制曲線。
3.1.1空曠環境下測得Pr(d0)=-28dbm,按照公式(2)與實際數據,繪制對比曲線。從圖9和圖10對比曲線可以看出,隨著兩節點間距離增大,RSSI值會逐漸衰減,符合一般規律。0-20m范圍內,RSSI衰減較快,之后較為平緩。40m后信號質量普遍較理論值平緩,可能是受硬件條件影響,誤差增大。圖9由于每次記錄取的隨機值,存在較大誤差,圖10每次記錄取100個數據的平均值,曲線較為平緩。誤差因素包括硬件設計、周邊環境影響等。
3.1.2危化品物流車輛環境下采用深圳市中集集團液化氣罐(空罐)?;肺锪鬈囕v進行實地測試,測試車輛長度14m,寬度2.5m。將協調器節點放置在車駕駛座,終端節點自由放置于車廂體內部,加入網絡并發送數據到協調器節點。測得Pr(d0)=-44dbm,根據公式(2)和實際數據的結果曲線如下:由圖11和圖12可以看出,在車輛環境下,節點信號普遍較空曠環境下差,這主要是因為接收節點被放進車輛箱體內部,信號一定程度上受到廂體衰減。大于40m距離后信號變得不穩定,通信斷續和重連情況發生頻繁,此時RSSI值普遍>82dbm,80m后多次測試接收端均接收不到數據。
3.2數據傳輸將協調器節點放置在車駕駛座,終端節點自由放置于車輛廂體內部,加入網絡并發送數據到協調器節點。在協調器端統計接收數據包個數,并計算丟包情況和最大穩定通信距離(即數據通信情況良好,極少發生重連情況),結果如下。由表3可以看出,主節點在車駕駛室情況下,車正前方和側面信號要好于車后方信號,節點丟包率較低,通信距離>=25M,滿足一般?;肺锪鬈囕v要求。另外,通信的最大穩定傳輸RSSI值是極少斷網重連情況發生下的統計值,所以普遍低于信號強度曲線中的極限值。隨著距離增大,節點間的網絡傳輸也會變得不穩定,常常發生斷網重連,甚至無法重連狀況。實際數據包傳輸受節點間不同阻擋物、不同車型、車體電磁干擾、程序執行等因素影響。
3.3功耗通過萬用表、示波器和在程序中設計測試模塊的結合進行功耗測試,測試結果如下。從表4的測試結果可以看出,節點滿足低功耗要求,休眠情況下,節點功耗低至0.33uA。
4結語
NI-PCI6221是一款低價位多功能M系列數據采集板卡,具有單端16路/差分8路模擬輸入,分辨率高達16bit,采樣速率為250KS/s,輸入最小電壓范圍為±200mV,最大電壓范圍為±10V,板上自帶4095字節內存.
2系統軟件設計
2.1系統功能設計軟件設計是整個系統設計的核心,軟件設計部分采用層次化和模塊化思想,將整個系統劃分分若干模塊,模塊化的程序結構不但使整個系統清晰明了,而且方便進行程序維護.基于LabVIEW的數據采集系統軟件結構如圖2所示.該系統軟件部分包含了系統啟動、用戶登錄、系統菜單、數據采集、數據處理、數據回放6個功能模塊.
2.2系統界面設計本文針對6個功能模塊分別開發了相應的界面.
2.2.1系統啟動界面系統啟動界面如圖3所示.它包含了簡單個人信息,綠色橫條是系統啟動條,顯示啟動進度,系統100%加載成功后,單擊進入登錄界面按鈕可以跳轉到用戶登錄界面,單擊退出啟動界面按鈕則直接退出系統.
2.2.2用戶登錄界面用戶登錄界面如圖4所示.它要求輸入用戶名和密碼,功能是進行身份認證,認證通過后顯示登錄成功,一旦登錄成功會自動進入到系統菜單界面,如果不能通過認證,只能通過退出按鈕來退出系統.
2.2.3系統菜單界面系統菜單界面如圖5所示.它由一列按鈕構成,菜單程序運行后按鈕被激活,分別單擊數據采集、數據處理、數據回放按鈕可跳轉到對應界面,單擊退出按鈕返回到菜單按鈕被激活前狀態.
2.2.4數據采集界面數據采集界面如圖6所示.它模擬實現了兩路信號的采集,一路是電壓信號,一路是溫度信號.信號選擇開關用于進行信號選擇,通過信號選擇開關既可以采集單路信號數據,也可以同時采集雙路信號數據.針對溫度信號設計了溫度表盤,可精確顯示溫度值,另外還設定了溫度下限和上限值,將溫度限定在一個范圍內,一旦超出這個范圍,報警指示燈就會亮起來.數據采集界面包含了一些基本參數設置,此外還有返回和暫停兩個按鈕,單擊暫停按鈕,系統暫停連續采集數據,暫停中狀態表現為數據信息停留在某一刻,單擊返回按鈕,可返回至系統菜單界面.李琳芳等院基于LabVIEW的數據采集與處理系統設計
2.2.5數據處理界面數據處理界面如圖7所示.它包含了電壓和溫度兩路信號,對電壓信號分別進行了濾波、頻譜分析、峰值壓縮,對溫度信號進行了均值壓縮.此外還有溫度表盤、一列選擇開關、系統參數配置信息、暫停和返回按鈕.濾波處理是信號處理中常用的一種手段,對于濾波處理,觀察圖7,可發現濾波后的電壓信號清晰平滑,便于觀察.頻譜分析主要是求出信號的頻域描述,有助于更全面地認知信號信息,進行信號特征提取.根據奈奎斯特準則,信號帶寬小于采樣頻率的1/2,便能防止出現頻譜混疊現象,恢復出原始信號,本文設置采樣頻率為1000Hz.觀察圖7發現電壓幅度譜主要集中在0~50Hz,這是因為在實際工程中,為了恢復出高保真信號,要求信號帶寬小于采樣頻率的1/10,加之軟件仿真環境理想,因此信號幅度譜主要處于50Hz頻段內.壓縮采樣是利用算法在保留信號信息的同時進行壓縮處理,壓縮處理可縮減數據體積,有利于傳輸.本文對電壓信號進行了峰值壓縮,對溫度信號進行了均值壓縮,設置壓縮因子均為10,即對于電壓信號,每10個采樣值中標記出最大值,對于溫度信號,每10個采樣值中標記出平均值.電壓信號峰值壓縮后方便獲取峰值信息,溫度信號均值壓縮后方便獲取平均溫度.
2.2.6數據回放界面數據回放界面如圖8所示.可以讀取之前存儲的數據,實現數據再現.通過文件路徑找到之前數據所在位置,并通過選擇開關按鈕選擇回放的信號,接著運行系統回放程序,便可觀察回放的數據.數據回放界面包含了電壓和溫度兩路信號的回放,回放的數據結果以波形和表格數值兩種形式呈現.觀察圖8發現在電壓和溫度波形始端有段空白區域,這是由于之前存儲的文件中包含一些非數值的說明信息,是不能夠被讀取的.
3小結
關鍵詞:USBLabVIEW數據采集
通用串行總線USB(UniversalSerialBus)作為一種新型的數據通信接口在越來越廣闊的領域得到應用。而基于USB接口的數據采集卡與傳統的PCI卡及ISA卡相比具有即插即用、熱插拔、傳輸速度快、通用性強、易擴展和性價比高等優點。
USB的應用程序一般用VisualC++編寫,較為復雜,花費的時間較長。由美國國家儀器(VI)公司開發的LabVIEW語言是一種基于圖形程序的編程語言,內含豐富的數據采集、數據信號分析分析以及控制等子程序,用戶利用創建和調用子程序的方法編寫程序,使創建的程序模塊化,易于調試、理解和維護,而且程序編程簡單、直觀。因此它特別適用于數據采集處理系統。利用它編制USB應用程序,把LabVIEW語言和USB總線緊密結合起來的數據采集系統將集成兩者的優點。USB總線可以實現對外部數據實時高速的采集,把采集的數據傳送到主機后再通過LabVIEW的功能模塊順利實現數據顯示、分析和存儲。
1USB及其在數據采集設備中的應用
USB自1995年在Comdex上亮相以來,已廣泛地為各PC廠家所支持?,F在生產的PC幾乎都配置了USB接口,Microsoft的Windows98、NT以及MacOS、Linux等流行操作系統都增加對USB的支持。USB具有速度快、設備安裝和配置容易、易于擴展、能夠采用總線供電、使用靈活等主要優點,應用越來越廣泛。
一個實用的USB數據采集系統硬件一般包括微控制器、USB通信接口以及根據系統需要添加的A/D轉換器和EPROM、SRAM等。為了擴展其用途,還可以加上多路模擬開關和數字I/O端口。系統的A/D、數字I/O的設計可沿用傳統的設計方法,根據采集的精度、速率、通道數等諸元素選擇合適的芯片,設計時應充分注意抗干擾性,尤其對A/D采集更是如此。在微控制器和USB接口的選擇上有兩種方式:一種是采用普通單片機加上專用的USB通信芯片;另一種是采用具備USB通信功能的單片機。USB的另一大優點是可以總線供電,在數據采集設備中耗電量通道不大,因此可以設計成總線供電。
一個USB設備的軟件一般包括主機的驅動程序、應用程序和寫進ROM里面的Firmware。Windows98提供了多種USB設備的驅動程序,但還沒有一種專門針對數據采集系統,所以必須針對特定的設備編制驅動程序。盡管系統已經提供了很多標準接口函數,但編制驅動程序仍然是USB開發中最困難的一件事。通常采用WindowsDDK實現,但現在有許多第三方軟件廠商提供了各種各樣的生成工具,如Compuware的DriverWorks、BlueWaters的DriverWizard等軟件能夠輕易地生成高質量的USB驅動程序。單片機程序的編制也同樣困難,而且沒有任何一家廠商提供了自動生成的工具。編制一個穩定、完善的單片機程序直接關系到設備性能,必須給予充分的重視。以上兩個程序是開發者所關心的,而用戶卻不太關心。用戶關心的是如何高效地通過鼠標操作設備,如何處理和分析采集進來的大量數據。因此還必須有高質量的用戶軟件。用戶軟件必須有友好的界面、強大的數據分析和處理能力以及提供給用戶進行再開發的接口。
2LabVIEW及其外部動態鏈接庫的調用
LabVIEW是美國國家儀器(NI)公司開發的一種基于圖形程序的虛擬儀表編程語言,其在測試與測量、數據采集、儀器控制、數字信號分析、工廠自動化等領域獲得了廣泛的應用。LabVIEW程序稱為虛擬儀器程序(簡稱VI),主要包括兩部分:前面板(即人機界面)和方框圖程序。前面板用于模擬真實儀器的面板操作,可設置輸入數值、觀察輸出值以及實現圖表、文本等顯示??驁D程序應用圖形編程語言編寫,相當于傳統程序的源代碼。其用于傳送前面板輸入的命令參數到儀器以執行相應的操作。LabVIEW的強大功能在于層次化結構,用戶可以把創建的VI程序當作子程序調用,以創建更復雜的程序,而且,調用階數可以是任意的。LabVIEW這種創建和調用子程序的方法使創建的程序模塊化,易于調試、理解和維護。LabVIEW編程方法與傳統的程序設計方法不同,它擁有流程圖程序設計語言的特點,擺脫了傳統程序語言線形結構的束縛。LabVIEW的執行順序依方塊圖間數據的流向決定,而不像一般通用的編程語言逐行執行。在編寫方框圖程序時,只需從功能模塊中選用不同的函數圖標,然后再以線條相互連接,即可實現數據的傳輸。
LabVIEW雖有接口卡的驅動和管理程序,但主要是針對NI公司自己生產的卡。對于普通的I/O卡,還不能直接被LabVIEW所應用,必須采取其他方法。其中可以用LabVIEW的PortIn和PortOut功能,但此法應用簡單,無法實現較復雜的接口功能。而采用動態鏈接庫,可以根據具體需要編寫適當的程序,靈活利用LabVIEW的各項功能。用戶可以自己編寫DLLs實現LabVIEW與硬件的鏈接。用VC++6.0編制動態鏈接庫,首先生成DLL框架,AppWizard將自動生成項目文件,但不產生任何代碼,所有代碼均需用戶自己鍵入。DLL需要的文件有:①h函數聲明文件;②c源文件;③def定義文件。H文件的作用是聲明DLL要實現的函數原型,供DLL編譯使用,同時還提供應用程序編譯使用。C文件是實現具體文件的源文件,它有一個入口點函數,在DLL被初次調用的運行,做一些初始化工作。一般情況下,用戶無須做什么初始化工作,只需保留入口點函數框架即可。def文件是DLL項目中比較特殊的文件,它用來定義該DLL項目將輸出哪些函數,只有該文件列出的函數才能被應用函數調用。要輸出的函數名列在該文件EXPORTS關鍵字下面。
3基于AN2131Q的單光子采集系統
該采集系統由筆者自行開發并用于單光子計數種子活性快速檢測儀中。它主要由將光子信號轉為電信號的光電倍增管(PMT)及其輔助電路和基于AN2131Q的USB采集卡組成。PMT及其前置放大器、放大器、甄別器等輔助電路能將微弱的光子信號轉換為15ns的標準TTL脈沖信號,脈沖信號經過分頻處理后再被USB采集,USB將采集的結果實時地傳給主機處理。
3.1USB采集卡的硬件組成
該采集卡由微控制器、USB通信接口、主機以及數字I/O端口組成,如圖1所示。
筆者設計了一種同步傳輸方式的單片方案,應用了內置微處理器的USB設計——EZ-USBAN2131Q。它是Cypress公司的一種內嵌微控制器的80腳USB芯片,包含三個8位多功能口,8位數據端口,16位地址端口,二個USB數據端口,二個可定義16位的定時/計數器和其他輸入輸出端口。其采用一種基于內部RAM的解決方案,允許客戶隨時不斷地設置和升級,不受端口數、緩沖大小和傳輸速度及傳輸方式的限制。片內嵌有一個增強型8051微控制器,其4個時鐘的循環周期使它比標準8051的速度快3倍。采用同步傳輸方式將單片機的計數值實時傳送給主機,而主機對計數器的控制信號則采用塊傳輸方式傳送。EZ-USB是Cypress公司推出的USB開發系統,它為USB外設提供了一種很好的集成化解決方案。EZ-USB在其內核已做了大量繁瑣的、重復性的工作,這樣就簡化了開發代碼,進而縮短了開發周期。此外,開發商還提供了配套的開發軟件(包括編譯軟件uVision51、調試軟件dScope51、控制軟件EZUSBControllPanel)以及驅動程序GPD(GeneralPurposeDriver)接口,以便于用戶進行開發使用。
圖2開啟設備和獲取采集數據的流程圖
3.2USB采集卡的軟件構成
在USB的Firmware中,采取同步傳輸(IsochronousTransactions)和塊傳輸(BulkTransactions)兩種傳輸方式。同步方式用來實時傳送采集的數據,塊傳輸主要用來傳輸主機命令信號和USB的狀態信息。塊傳輸中利用端點(Endpoint)2。兩種傳輸方式的核心中斷程序如下:
voidISR_Sutok(void)interrupt0//塊傳輸方式
{
//initializethecoutersinthe8051
TMOD=0x05;
TCON=0x10;
TH0=0;
TL0=0;
Thb=0,
TH0=0;
TL0=0;
thb=0;
EZUSB_IRQ_CLEAR();
USBIRQ=bmSUTOK;//ClearSUTOKIRQ
}
voidISR_Sof(void)interrupt0//同步傳輸方式
{
if(TCON&0x21){//Dealwiththecounteroverflow
TH0=0;
Tl0=0;
THB++;
TCON&=0xdf;}
IN8DATA=TH0;//3Bytescounterresult
IN8DATA=TL0;
IN8DATA=THB;
EZUSB_IRQ_CLEAR();
USBIRQ=bmSOF;//ClearSOFIRQ
}
在LabVIEW應用程序中設計了一Usb.dll文件作為LabVIEW與USB的驅動程序。由于EZ-USB開發系統中已經提供了底層驅動程序(GPD)接口函數,用戶只需調用這些函數即可與USB設備連接。因此在DLL的編制中只需調用它提供的函數,大大節約了開發時間,提高了開發速度。創建的Usb.dll文件中包含了如下五個輸出函數,功能說明如表1所示。
表1Usb.dll包含函數的功能說明
Control主機對USB設備的控制
ReadResult獲取USB發送到主機的數據
StartIsoStream啟動設備的同步傳輸流
StartThread得到標準設備的設備描述符
StopThread關閉設備的同步傳輸流
其定義如下:
LPSTR_declspec(dllexport)_stdcallControl(intinput);
int_declspec(dllexport)_stdcallReadResult(void);
int_declspec(dllexport)_stdcallStartIsoStream(void);
int_declspec(dllexport)_stdcallStartThread(void);
int_declspec(dllexport)_stdcallStopThread(void);
開啟設備和獲取采集數據的過程如圖2所示。它的主要功能有:開啟或關閉USB設備、檢測USB設備、設置USB數據傳輸管道(pipe)和端點(endpoint)、實時從USB接口采集數據、顯示并分析數據。
硬件設計包括溫度與磁場探頭、供電電源、多通道數據采集儀器、PC上位機的選型以及機柜設計。
1.1溫度檢測溫度探頭類型為熱電阻,熱電阻測溫原理是給熱電阻通小電流,測量電阻上的電壓,得出熱敏電阻的阻值,對照熱敏電阻的參數曲線得出溫度。溫度探頭需要恒流源提供穩定的電流才可以保證讀取電壓的準確性,選擇lakeshore公司生產的121系列恒流源可滿足精度要求。該恒流源既提供固定檔位電源供電也可以通過編程實現連續可調電流輸出。由于超導線圈采用過冷液氮浸泡冷卻[2],根據液氮溫區(70K~77K)對探頭型號進行選擇。對于需要在30K~800K之間對溫度測量的場合,可選擇PT100系列鉑電阻溫度計[3],其額定電流為1mA。在這個溫度范圍內,鉑電阻溫度計具有很好的重復性和較高靈敏度,同時滿足在電抗器的磁場環境下使用的要求。70K以上鉑電阻溫度計具有通用的標準曲線,如圖2所示。相比較于其他種類溫度探頭具有更好的通用性,而且具有互換性。另外,在溫度測量中,探頭需要貼近超導帶材,薄膜型的鉑電阻溫度計滿足設計要求。探頭的接線方式有二線制和四線制。采用二線制接線方法,會引入線路電阻,造成測量誤差。因此在35kV電抗器的數據采集系統中,均采用四線制接線方法。
1.2磁場檢測測量磁場強度的原理是霍爾效應,在半導體薄片兩端通以控制電流,并在薄片的垂直方向施加勻強磁場,則在垂直于電流和磁場的方向上,將產生霍爾電壓,根據產生的電壓就可以知道磁場的大小[4]。在實際測量中需要在兩個方向(軸向場與垂直場)對磁場進行測量。在35kV電抗器設計中,根據電磁設計仿真得到磁場的最大值約為2000高斯,并且該磁場探頭的工作環境為液氮溫區。Lakeshore公司生產的HGCA3020的軸向磁場探頭與HGCT3020的徑向磁場探頭,可滿足使用要求,其額定電流為100mA。
1.3數據采集系統數據采集系統還需要對探頭電壓進行記錄以及處理顯示等一系列后續工作[5]。實驗過程中實驗對象需要監測的信號比較多,采用數據采集儀器對各個數據進行采集記錄,節約人力成本而且可以減少由于人工錄入所導致的錯誤。在該套數據采集系統中,采集的信號有54路,溫度采集精度為1K,電壓精度為10mV。吉時利公司生產的3706數字開關萬用表作為數據采集儀器滿足使用要求。數據采集儀器采集數據以后,把數據傳輸到主機中通過程序對其進行處理,然后顯示在顯示器上供人員監測電抗器的工作情況。在電抗器實際運行過程中,主機工作環境可能較為惡劣,對工控機的穩定性和數據的安全性有一定要求,需要對主機進行加固、防潮、防輻射、防塵等特殊設計。研祥工控機IPC-810E滿足使用要求。
1.4硬件布局及搭建(1)溫度探頭布點方案35kV超導可控電抗器超導線圈分為內外兩圈,各由32個雙餅組成。工作在交流工況下,超導線圈存在交流損耗,根據仿真結果顯示端部線圈交流損耗功率最大,需要對線圈端部重點監控。單個超導線圈上布點25個,總計50個鉑電阻。鉑電阻在安裝時需要對其進行加固,防止被快速流動的液氮損壞。(2)磁場探頭布點方案電抗器中,帶材受垂直磁場影響較大,端部的帶材最易受到磁場的干擾,磁場探頭安裝在電抗器的端部。由于磁場探頭受到液氮的沖刷,磁場探頭需要通過夾子進行固定。通過對端部磁場兩個垂直方向數據的讀取,得到磁場強度的實時數據,為監測電抗器運行狀態提供數據支持。各個設備的集成布局以及安裝需要以機柜的形式實現。機柜的設計原則是整套裝置的實用性和外在的美觀性。機柜上主要安裝的設備和儀器有:吉時利3706數據采集儀、工控機(包括工控機主機、液晶顯示屏、鍵盤和鼠標)、探頭供電電源,同時在機柜下部預留一部分空間用于放置實驗過程中常用的一些工具和儀表等,如納伏表、波形記錄儀、鎖放和功率分析儀等,設計方案如圖4所示。
2軟件開發
軟件開發即控制界面開發,通過界面控制各種數據采集儀器的工作,并將采集到的數據傳輸到電腦上進行處理、顯示和保存等[6]。圖5所示的為軟件搭建流程示意圖,首先調試設備,完成工控機與3706數據采集儀器之間的通信,使數據能夠進入主機進行處理,然后對數據進行分類處理,實現多通道數據處理以及數據的分類顯示?;贚abVIEW開發的程序主要包含后臺程序以及操作界面。后臺程序(1)數據采集系統主程序數據采集系統主程序實現對數據采集儀器中的電壓數據讀取的功能[7]。通過在主程序中對數據進行通道選擇可以實現不同的處理功能,包括3706儀器的通訊設置和數據初始化。(2)數據傳輸程序數據傳輸是指將數據從數據采集儀器上傳輸到工控機上。LabVIEW中提供了多種通訊協議,如串口、并口和以太網傳輸協議,此處選擇以太網作為傳輸方式,數據采集儀器發送數據,工控機接收發送過來的數據,進行處理。(3)數據記錄程序LabVIEW中可以將數據保存為多種格式,其中就包括常見的Excel表格,“寫入電子表格.vi”可以將數據保存為Excel格式,并且該VI不需要啟動Excel,寫入速度較快、使用較為簡單,所以使用該VI進行數據保存。由于EXCEL是目前比較通用的數據處理軟件,所以保存數據的格式選為EXCEL表格,方便處理數據。程序中可以設定將EXCEL文件保存在某個文件夾下,分別將磁體溫度、磁場強度保存在兩個文件夾下,并且為方便查找數據,每個文件的文件名以日期和時間命名,這樣方便日后查找數據。對于不同類型數據也可以直接分開存儲,方便以后查詢使用。在以上程序的實現中,主要以子VI形式完成。子VI是指將特定的程序封裝,完成特定的功能的模塊。通過對程序的封裝既可以實現原有功能,并且使得主程序更加簡潔,便于查找錯誤,又增加了程序的可移植性,提高了程序的整體質量。操作界面該系統的操作界面首先確保了所有數據的顯示以及后臺記錄,另外對電抗器內部環境參數(杜瓦內部壓強)以及外部輔助設備的工作狀態(液氮制冷機流量)也進行了監控。針對溫度監控,單獨設置了更加直觀的波形顯示,更利于觀察超導體的溫度變化,如圖6所示。在35kV電抗器數據采集及監控系統的設計方案中,界面中沒有需要用戶設置的參數,在前面板中分列鉑電阻顯示控件來顯示數據。開始運行后,3706開始采集數據,并且將這些數據儲存到表格當中。在前面板中,同一個波形圖中可以顯示多個通道的數據,每個通道的數據有顏色不同,這樣就可以比較實驗磁體不同部分的溫度或不同超導雙餅的電壓等。
3總結
多路視頻數據實時采集的軟件實現
常永亮(飛行試驗研究院測試所陜西西安710089)
【摘要】介紹了視頻數據的采集、多路視頻數據間的切換、視頻數據的保存及基于C/S結構的實時視頻數據傳輸與顯示,在對四路飛行視頻數據進行實時采集的運行時,各項需求已達到要求。
【關鍵詞】視頻數據、Divx編碼、RTP/RTCP協議、TCP/UDP協議、媒體流、幀
1引言
隨著信息技術的不斷發展,人們將計算機技術引入視頻采集、視頻處理領域,用計算機處理視頻信息和用數字傳輸視頻數據在很多領域已有廣泛的應用,在我們的飛機試飛中也被大量的應用。
視頻圖像采集的方法較多,基本可分為2大類:數字信號采集和模擬信號采集。前者采用圖像采集芯片組完成圖像的采集、幀存儲器地址生成以及圖像數據的刷新;除了要對采集模式進行設定外,主處理器不參與采集過程,我們只要在相應的幀存儲器地址取出采集到的視頻數據即可得到相應的視頻數據,這種方法,無論在功能、性能、可靠性、速度等各方面都得到了顯著的提高,但成本高。后者采用通用視頻A/D轉換器實現圖像的采集,其特點是數據采集占用CPU的時間,對處理器的速度要求高,成本低、易于實現,能夠滿足某些圖像采集系統的需要。
此系統要求每秒采最大25幀(設為可調),客戶端實時顯示最大25幀(設為可調),保存為MPEG4格式,畫面要求為最大分辯率為1024X768。
多路視頻實時采集使用的是VisionRGB-PRO卡(英國Datapath公司),此卡可同時實時采集兩路視頻數據,基本達到了本系統的要求,再用一臺VGA矩陣切換器將前端數據源的四路視頻數據進行人為切換采集。
2硬件環境的構建(硬件框架)
圖一系統硬件框架圖
上圖為整個采集系統的硬件框架。
此采集系統主要實現對前端四路視頻數據的人為切換式實時采集,在服務器端可同時采集和儲存兩路視頻數據(在此只用一個視頻采集卡),也可以一次只采集一路視頻數據,再經網絡實時傳輸到客戶端顯示,服務器端也實時顯示所采集的視頻。
在進行視頻切換方面可在服務器端或客戶端自行切換,在服務器端可通過串行口操作VGA矩陣切換進行相應的視頻輸入輸出口的切換,在客戶端可通過網絡-服務器程序相應模塊-串行口-VGA矩陣切換進行相應的視頻輸入輸出口的切換。
3軟件實現概述
3.1服務器端的實現
圖二服務器端程序流程圖
上圖為服務器端實時采集視頻的程序流程圖。視頻數據量較大,這就要求視頻數據處理系統具有實時采集,大容量存儲和實時處理的特點。在服務器端的實現是整個系統的關鍵,在此也承擔了大量的工作,因此對軟件和硬件方面要求也很高就成為必然。
軟件要實現對視頻數據的實時采集(最多兩路)、控制視頻接口、把視頻數據實時編碼保存并發送到多個客戶端。以上就是要在服務器上實現的主要功能。
在采集方面最主要的是要有實時性,在此以事件驅動的方法從端口獲取數據,采集到視頻數據流在桌面顯示的同時再編碼保存,視頻采集的數據要經軟件的相應模塊將其設為位圖型式的視頻幀,以利于在服務器端的顯示和編碼保存,在此采用Divx編碼,Divx編碼后形成以幀為格式的MPEG4流。Divx解碼也是以幀的格式解壓,因此有利于向客戶端發送數據時以幀為單位發送視頻數據流。
此處用到Divx編碼就不得不把Divx編碼作簡要的介紹。
DivX由DivXNetworks公司開發的,即為我們通常所說的DVDrip格式,它采用了MPEG4的壓縮算法同時又綜合了MPEG-4與MP3各方面的技術,也就是使用DivX壓縮技術對DVD盤片的視頻圖像進行高質量壓縮,同時用MP3或AC3對音頻進行壓縮,然后再將視頻與音頻合成并加上相應的外掛字幕文件而形成的視頻格式。其畫質直逼DVD并且體積只有DVD的數分之一。這種編碼對機器的要求也不高,所以DivX視頻編碼技術可以說是一種對DVD造成威脅最大的新生視頻壓縮格式,實際上Divx=(視頻)MPEG4+(音頻)MP3。
媒體流分為四個流:視頻流、音頻流、文本流、MIDI流,用視頻卡采集的是兩路視頻流,保存時每路視頻流多加了一個文本流,文本流主要應客戶要求加入的服務器時間和一些人為輸入的文本信息,在記錄兩個媒體流時一般有兩種記錄方法,在此采用的是將視頻流和文本流記到一個文件中的方式,這樣有利于文件以后的保存和查閱。
在采集軟件實現方面主要應用了相應的SDK(Softwaredevelopmentkit)和API(應用編程接口),還可用VFW(VideoforWindows)。但后一種方法實現簡單單路視頻采集卡可以,對于多路視頻的采集用第一種方法更加靈活,但實現比第二種復雜的多。在服務器實現軟件方面主要有以下幾大塊:一是采集;二是保存;三是向客戶端發送;四是串口的通行;五圖像的形成;六是桌面顯示;七是對圖像亮度、顏色、位置等的調整;采集通道、采樣率、采集時間的選擇;等等。
在服務器端各方面協調工作是關鍵,程序啟動首先默認上次設定的視頻采集卡通道,如有視頻數據就顯示、保存,如果沒有視頻數據就等待,如果要調整視頻采集卡通道可用串口給VGA矩陣切換器發送相應的命令讓VGA矩陣切換器進行相應的輸入輸出通道切換。也可經客戶端經網絡到服務器串口到VGA矩陣切換器進行VGA矩陣切換器相應的輸入輸出通道切換(在后面介紹客戶端時再介紹)。每次切換后將自動保存原視頻文件,如切換后有視頻數據將自動重新生成一個新的視頻文件。
在服務器桌面顯示的畫面是沒經任何編碼處理的,但網絡傳輸和保存的視頻數據是經Divx編碼的,這樣有力的減輕了網絡間傳輸和服務器的負擔。
用局域網實時傳輸視頻數據已在一些領域大量的應用,局域網以有線局域網居多,因為有線局域網技術成熟、傳輸速度快,但是長時間傳輸大量視頻數據時也會引起傳輸速率不穩定,引起數據堵塞,會導致視頻傳輸的質量大幅度下降,容易引起畫面的重影、抖動、花屏、延遲等現象。
為了在局域網上有效的、高質量的實時傳輸媒體流,需要多種技術的支持,包括網絡傳輸層協議的選擇、編(解)碼技術,網絡傳輸層質量控制技術等等。
實時傳輸協議RTP是針對Internet上多媒體數據流的一個傳輸協議,實時傳輸控制協議RTCP負責管理傳輸質量在當前應用進程之間交換控制信息,RTP/RTCP協議只適合服務器端和客戶端相對動態的實時多媒體數據流傳輸。但是,對于圖像采集速度固定的實時視頻采集,有時會引起采集的數據來不及壓縮而直接丟棄而達不到實時的要求,所以沒有采用RTP/RTCP協議,而是從發送端出發,實時判斷網絡狀況,采用暫停發送的控制策略進行實時傳輸。
網絡傳輸層質量控制技術采用的是TCP/UDP協議,UDP是一種不可靠的、無連接的協議,UDP適用于一次只傳送少量數據、對可靠性要求不高的應用環境。它不提供檢錯和糾錯功能,一旦網絡出現堵塞時,大量的數據報文會丟失。對于Divx編解碼技術,是以幀為單位進行編解碼的,分為關鍵幀和非關鍵幀。在傳輸過程中,由于壓縮率比較高,只要一幀中錯一比特位,將影響其后的更多的比特位,直接造成圖像的模糊、花屏等現象。只有等到下一次關鍵幀的到來才有可能恢復圖像的清晰。為了保證傳輸的正確性,自己需要在應用層制定協議。如此一來,只能選擇使用TCP來進行網絡通信,TCP的目的是提供可靠的數據傳輸,并在相互進行通信的設備或服務之間保持一個虛擬連接。TCP在數據包接收無序、丟失或在交付期間被破壞時,負責數據恢復。它通過為其發送的每個數據包提供一個序號來完成此恢復。再輔助以暫停發送的控制策略,較好的解決局域網中實時視頻傳輸容易引起的重影、抖動、花屏的問題。
為了達到視頻傳輸的實時性,總的思想是最少的發送冗余信息,最大程度上發送最新的視頻。
在服務器端視頻采集采用從VisionRGB視頻采集卡捕獲視頻圖像,得到的是位圖型式的視頻幀,然后用Divx編碼進行壓縮,通過Winsock實現壓縮后的視頻數據在局域網中的實時傳輸,在客戶端接收完的數據交給Divx解碼器解壓,最后實現視頻顯示。如圖三所示:
圖三網絡間傳輸流程圖
如果局域網通信速率很高且狀態穩定,則進行實時視頻傳輸就可以達到非常好的效果。但是在網絡出現異常時會導致數據傳輸率不穩定或明顯下降,造成發送端數據積壓。此時就要采取一定的策略來控制發送端(服務器端),以達到實時性的要求,暫停發送策略很好的解決了這一現象。使用此策略有時會有丟幀的現象(100M局域網沒有發現丟幀現象),但就客戶端的要求是滿足的,在服務器端的采集、顯示、保存不受暫停發送策略的影響,也就是不會有丟幀的現象,雖然應用了暫停發送策略,但已經能夠滿足在客戶端實時監控需求了。
3.2客戶端的實現
在上面講服務器端的實現時已經大概講到客戶端的實現,因為只要把服務器端實現好客戶端實現難點就小的多。如圖四所示:
圖四客戶端程序流程圖
在客戶端也可以自行選擇要采集的通道,但對服務器端的采樣率等都不能通過客戶端進行設置,實現客戶端時主要是要實時監聽和服務器網絡連接狀態和判斷接受的視頻數據是否正常是否啟用暫停發送策略等。每秒接收的幀數可自行調節,但不能大于服務器端每秒采集的幀數。
在客戶端還要實時Divx解碼,如果不解碼就無法顯示,Divx解碼速度是完全可以達到實時顯示的要求。Divx解碼和顯示在不同的兩個線程中實現的,這樣做主要是為了顯示流暢??梢栽趦蓚€不同客戶端顯示兩個不同的視頻通道采集的數據。
4結論
本系統作為電視跟蹤系統的一部分,負責多路視頻數據的實時采集、存儲和視頻編解碼算法的實現、基于C/S結構的實時視頻數據傳輸顯示,在通過各種測試后在試運行期間已達到本系統的預期要求,本系統還支持事后的視頻回放。
本系統的開發難點和重點在服務器端,服務器端的開發直接影響到整個系統開發。
參考文獻
[1]《Windows核心編程》Microsoft公司〔美〕著
基于通用信號處理開發板,利用FPGA技術控制AD9233芯片對目標模擬信號采樣,再將采樣量化后的數據寫入USB接口芯片CY7C68013的FIFO中,FIFO寫滿后采用自動觸發工作方式將數據傳輸到PC機。利用VC++6.0軟件編寫上位機實現友好的人機交互界面,將傳輸到PC機上的數據進行儲存和實時回放。本系統主要實現以下兩大功能:1)ADC模塊對目標模擬信號進行采樣,利用FPGA技術將采樣后的數據傳輸到USB接口芯片CY7C68013的FIFO中存儲。2)運用USB2.0總線數據傳輸技術,將雷達回波信號數據傳輸到PC機實時回放。分為應用層、內核層和物理層3部分。應用層和內核層主要由軟件實現。應用層采用VC++6.0開發用戶界面程序,為用戶提供可視化操作界面。內核層基于DriverWorks和DDK開發系統驅動程序,主要起應用軟件與硬件之間的橋梁作用,把客戶端的控制命令或數據流傳到硬件中,同時把硬件傳輸過來的數據進行緩存。物理層主要以FPGA為核心,對USB接口芯片CY7C68013進行控制,通過USB2.0總線實現對中頻信號采集。系統設計采用自底向上的方法,從硬件設計開始逐步到最終的應用軟件的設計。
2硬件設計
FPGA在觸發信號下,控制ADC采樣輸入信號,并存入FIFO中。當存滿時,將數據寫入USB接口芯片CY7C68013,同時切換另一塊FIFO接收ADC轉換的數據,實現乒乓存儲,以提高效率。FPGA模塊的一個重要作用是控制USB接口芯片CY7C68013。當ADC采樣后,數據進入FPGA模塊,FPGA控制數據流將其寫入CY7C68013的FIFO中,以便于USB向PC機傳輸。CY7C68013的數據傳輸模式采用異步slaveFIFO和同步slaveFIFO切換模式。通過實測,前者傳輸速度約為5~10Mbit/s,后者傳輸速度最高可達20Mbit/s,傳輸速度的提高可通過更改驅動程序的讀取方式實現。
3軟件設計
3.1USB驅動程序設計
USB2.0總線傳輸技術最高速率可達480Mbit/s。本系統采用批量傳輸的slaveFIFO模式。CY7C68013芯片內部提供了多個FIFO緩沖區,外部邏輯可對這些端點FIFO緩沖區直接進行讀寫操作。在該種傳輸模式下,USB數據在USB主機與外部邏輯通信時無需CPU的干預,可大大提高數據傳輸速度。Cypress公司為CY7C68013芯片提供了通用的驅動程序,用戶可根據需求開發相應的固件程序。
3.2FPGA模塊程序設計
系統中FPGA模塊的核心作用是控制AD9233芯片進行采樣。AD9233作為高速采樣芯片,其最高采樣速率達125Mbit/s,最大模擬帶寬為650MHz。通過改變采樣速率可使該系統采集不同速率需求的信號,擴展了該系統的應用范圍。描述FPGA控制USB數據寫入接口芯片FIFO的狀態機如圖6所示。狀態1表示指向INFIFO,觸發FIFOADR[1:0],轉向狀態2;狀態2表示若FIFO未滿則轉向狀態3,否則停留在狀態2;狀態3表示驅動數據到總線上,通過觸發SLWR寫數據到FIFO并增加FIFO的指針,然后轉向狀態4;狀態4表示若還有數據寫則轉向狀態2,否則轉向完成。
3.3上位機設計
為實現人機交互,利用VC++MFC在PC機上編寫了可視化操作界面,即上位機。上位機既用于數據采集的控制,同時也用于采集數據的實時回放。上位機界面如圖7所示。上位機主要功能:1)按下“檢測USB”按鈕,可檢測USB是否連接正常,并顯示USB基本信息。2)按下“開始采集”按鈕,可將采集的數據傳輸到PC機并實時回放數據波形;再次按下“開始采集”按鈕,可暫停數據波形回放。3)按下“保存數據”按鈕,可將采集的數據以*.dat文件的形式存儲到PC機硬盤。4)按下“結束采集”按鈕,可關閉采集系統并退出界面;或按下“確定”和“取消”按鈕,也可直接退出界面。
4系統實測
為了測試數據采集與回放系統,利用通用信號處理開發板設計了DDS模塊。該DDS模塊產生一個正弦波作為測試信號,通過AD9744芯片轉換后變為模擬信號輸出,并將此輸出信號接至示波器以便驗證系統。數據采集與回放系統的實物圖及系統實測波形與回放波形。
5結束語
關鍵詞:MCF5249uClinuxWeb數據采集
引言
現在嵌入式系統的應用越來越廣泛。隨著網絡技術發展和市場需求的變化,工業設備實現網絡化管理控制已經成為一種必然趨勢。M2M(MachinetoMachine)的網絡通信已成為國內外研究熱點,而Web技術為工業設備實現網絡化管理提供了一種解決方案。本文從硬件和軟件設計兩個方面討論了摩托羅拉MCF5249處理器在數據采集方面的應用,并實現了采集數據的遠程Web表征。
由于這一系統面向廣義的過程,所以只要可獲得過程參數,就能實現過程行業的遠程在線表征。特別是基于Web完成實時數據庫生成,真正實現遠程集群系統的數據資源無人工干預自動獲取。其應用將會不斷地延伸。
本文描述的摩托羅拉MCF5249是以ColdFire32位微處理器為基礎的高性能處理器,該處理器內部集成了一個片內12位ADC,可用于工業數據采集。且數據采集系統基于嵌入式操作系統uClinux。由于uClinux是為沒有MMU的微處理器設計的。且源泉代碼公開,為降低成本和獲取軟件的自有產權提供了方便。當然,uClinux不是一個強實時系統,為支持一般過程系統,可以通過一些補丁程序來提高其實時性,所以本文討論的數據采集系統主要應用于一些實時性要求不高的場合。
1數據采集系統的硬件設計
摩托羅拉MCF5249處理器內部集成了一個片內12位∑—ΔADC,它有四路輸入(ADIN0~ADIN3),任一時刻只允許一路輸入,由多路選擇器決定。ADC的數字部分在MCF5249的內部,而模擬電壓比較器由電路提供。A/D轉換的輸出引腳以脈寬調制的格式提供參考電壓,因此,該輸出需要一個的阻容電路,將其轉換成直流電壓,以備外部的電壓比較器電路使用。數據采集系統的硬件原理圖如圖1所示。
由于微處理器不可承受負電壓,所以必須將輸入電壓限制在0~+3V之間。Motorola公司不建議使用外部箝位二極管直接在模擬輸入端進行過壓保護,而在輸入端引入1~10kΩ的限流電阻和低通濾波器,在低通濾波器的輸入端連接二極管對輸入電壓進行箝位。
2數據采集系統的軟件設計
數據采集系統的軟件設計主要分為兩大模塊,即數據采集模塊與數據顯示模塊。
2.1數據采集模塊的設計
數據采集模塊是系統的核心模塊,為了提高數據采集的實時性,應采用中斷方式完成數據采集。其流程圖如圖2所示。
MCF5249微處理器為其內部ADC提供了一個控制寄存器ADCONFIG,其地址是MBAR2_ADDR+0x402,在初始化程序中需要指定MBAR2_ADDR地址。
通過ADCONFIG寄存器可以設置A/D轉換器工作方式、采樣頻率、是否采用中斷方式等。下面給出設置ADCONFIG寄存器實例。
#defineMBAR2_ADDR0x8000000
#defineAD_CONFIG0x402
#defineAD_VALUE0x406
…………
//設置ADC
*(volatileunsignedshortint*)(MBAR2_ADDR+AD_CONFIG)=0x442;
該設置確定ADIN0作為模擬信號輸入通道,采樣頻率設置為1/4系統總線時鐘頻率。當時鐘產生4095次翻轉時,系統產生一個軟件中斷(中斷號為63)。一次采樣結束,并將采樣結果存于ADVALUE寄存器(其地址為MBAR2_ADDR+0x406)。A/D轉換值可以用如下公式計算:
Vi=(X/(2n-1))×Vfullscate
其中,Vi為ADC的輸入電壓;Vfullscate為滿量程輸入電壓;
X為ADC輸出的數字量;
n為ADC的位數。
A/D轉換的結果在中斷處理程序中讀取。讀取一次轉換的程序代碼如下:
Volatileunsignedshortintm;
m=*(volatileunsignedshortint*)(MBAR2_ADDR+AD_VALUE);
通常,A/D轉換需要連續采樣。采樣結果應存放在一個多訪問循環隊列MACQ(MultipleAccessCircularQueue)中。
MACQ是一個定長有序的數據結構。源進程(生產者,ADC采樣程序)將數據存入MACQ,一旦初始化,MACQ總是滿的。當有新的數據被存入(PUT)MACQ,舊數據即被丟棄(如圖3)。應用進程(消費者)可以從MACQ中讀取任何數據。讀功能是非破壞性的,即讀操作不會改變MACQ。
在uClinux中,A/D轉換中斷程序的編寫方法是將A/D轉換器作為一個字符設備來處理。中斷程序是在linux/drivers/char目錄下編寫,其結構如下:*file:m5249_adirq.c
#include<linux/interrupt.h>
#include<asm/irq.h>
#defineADC_IRQ(128+63)//定義中斷號
#defineMBAR2_ADDR0x8000000
#defineAD_CONFIG0x402
#defineAD_VALUE0x406
/*定義中斷處理函數*/
voidadirq_interrupt(intirq,void*d,structpt_regs*regs){
在此讀取A/D轉換的值并存入隊列中。
}
/*設備初始化函數*/
intadirq_init(){
intresult;
unsignedshortadc_irq;
adc_irq=ADC_IRQ;
result=request_irq(adc_irq,&adirq_interrupt,SA_INTERRUPT,5249_adirqNULL);//注冊中斷
if(result==-1)
{printk(“Can''''tgetassigned%d”adc_irq);
returnresult;}
return0;
}
中斷服務程序的添加方法如下:
①編輯uClinux/drivers/char目錄下的mem.c,添加“adirq_init();”;
②編輯此目錄下的Makefile加入“obj-y+=m5249_adirq.o”;
③編譯(make)。
2.2數據顯示模塊的設計
為了實現采集到的數據以Web方式顯示,需要選擇一個Web服務器。本文采用的Web服務器是BOA。在CGI程序中編寫一個函數讀取MACQ隊列中的數據并顯示。
主要有以下顯示模塊。
(1)編寫一個CGI程序
*編寫一個讀取MACQ隊列中數值的函
readFromMacq()。
*編寫一個生成動態HTML頁面的函數show()。
Voidshow_t(){
……
printf("Content-type:text/html");
prinft{"
<html>
<head>
<metahttp-equiv=pragmacontent=no-cache><metahttpequiv=expirecontent=now>
<title></title>
</head>
<body>");
在此將MACQ中的數據讀出,假設值賦給變量n
prinft("<center")Thevalueis%x!</center>
</body>
</html>",n);
}
*編寫一個CGI的主程序main_cgi。
在主程序中需要讀取HTML頁面中的字符,并判斷應執行那一個CGI程序。
(2)用HTML語言編寫一個主頁
在主面中應包含:
<ahref=/cgi-bin/main_cgi.cgi?flag=10target=main>鍵接字符</a>.
其中,flag的值是main_cgi用于判斷應執行哪一個CGI程序的標志。