本站小編為你精心準備了上位機接口設計論文參考范文,愿這些范文能點燃您思維的火花,激發您的寫作靈感。歡迎深入閱讀并收藏。
1串口通信設計
1.1接口描述當傳感器網絡的Zigbee網關節點不斷地將網絡節點中監測到的溫度、煙霧等信息發送給上位機時,上位機的通信模塊必須及時響應接收數據。數據監測上位機通信接口采用VB6.0中MSComm控件,利用串行端口傳輸和接收數據,為應用程序提供串行通信功能,具體包括2種處理通訊方式,一種是事件驅動通訊,利用OnComm捕獲并處理通訊時間;另一種是通過檢查CommEvent的值,來查詢事件和錯誤[5]。設計中采用第1種方式,在用戶界面設置好相應的控制參數,如波特率為38400bps、無校驗位、8數據位、1位停止位等。當傳感器網絡節點監測的的溫度、煙霧等信息發送給上位機時,將觸發監測程序中MSComm控件的OnComm事件,進而改變ComEvent的值,程序根據ComEvent的值執行相應的操作,如解析數據、發送數據、錯誤分析等,然后更新內存節點樹中當前節點的實時數據、采集信息(如溫度、煙霧等)存入數據庫。
1.2實現方法MSComm控件可以設置以二進制或者以文本方式接收,若設置為二進制接受,控件會自動將其轉變成十進制。在該系統中,數據幀的數據是十六進制的,設置以二進制方式進行接收,從接收緩存中獲取到的是十進制的數據。
2數據結構與數據解析
2.1內存中節點多叉樹的建立圖2節點數據結構圖通信監測模塊接收數據后,為了便于以圖形方式實時顯示網絡拓撲和節點監測信息,以及提高查詢數據的運行速度,需要在內存中構建一個動態多叉樹,用于存儲節點最新的數據信息。節點數據結構圖如圖2所示。在內存中建立一個關于節點的動態多叉樹,節點的唯一標識是它的自身ID,根據數據幀中包含的父子關系可構建出一棵多叉樹。首先定義一個名為treeNode的類,它的每一個實例都代表著一個節點,里面包含節點的屬性(例如ID、溫度、煙霧等)和方法(例如獲取類中節點數據的getData方法)。為了將節點間的父子關系表現出來,可在類treeNode中定義一個類型為treeNode的動態數組NodeChild(),用于存放子節點。如某節點ID為0000,子節點ID為0001,將子節點0001存放在節點0000的NodeChild()數組中,即可完成節點間的連接。當需要找某個節點時,從根節點開始查找,若根節點的孩子沒有要找的節點,則查找根節點的孩子的孩子,直到遍歷完所有節點。當某數據幀發送到上位機時,解析出來的原始數據分別放在相應的變量,假設原始的溫度數據是3F4A,數據結構中溫度變量名為Temperature,類型為String,則直接將3F4A轉換為String類型存在Temperature中。按上述方法構建的動態多叉樹能夠適應網絡拓撲動態變化的應用場景,相比于定長的數組,其更為節省內存,不足之處是查詢算法較復雜。
2.2數據解析通信監測模塊接收到Zigbee網關節點發送來的一組數據(數據幀)后,需要對收到的數據進行協議解析,然后根據解析數據建立當前動態多叉樹。由于通信中難以避免數據幀出錯、截斷、丟失等情況,故數據解析部分根據數據幀的格式制定了一套協議,丟棄異常數據幀。數據幀的部分格式如下:FFXXXXXXXXFF01XXXX02XXXX2FF之間,開頭2個字節為節點ID,緊跟的2個字節節點的父ID01代表溫度類型,后面2個字節是溫度數值02代表煙霧類型,后面2個字節是煙霧值,依次類推…。2個FF后的字節都是數據,其格式如下:數據類型(01,溫度類型)+2個字節的數據(XXXX)。具體操作流程如圖3所示。首先檢驗從串口進來的數據幀開頭一個字節是否FF,若是,則開始解析。直到下一個FF,則節點ID部分解析結束,后面都是數據。繼續讀取下一個字節,若為01,則將后面緊跟的兩個字節存進相應的溫度變量,讀取下一個字符;若該字節所表示的數據類型未定義則跳過該字節及后面緊跟的兩個字節,繼續讀取下一個字符。該過程一直執行直到解析完整個數據幀。由于數據幀是不定長的,而且沒有結束字符,所以每收到一個數據幀程序便立即從緩存中讀取并解析,以避免多個幀合并為一個數據幀導致解析錯誤。當出現多個數據幀并合情況時,則丟棄后繼的幀。在幀解析完畢后,可以對解析出來的監測數據信息進行處理,將數據信息一份存進內存中節點多叉樹,一份存進數據庫,實現實時更新數據和記錄當前信息。以下是有關串口通信事件響應及數據解析的部分代碼:
3數據庫的構建與連接
3.1數據庫關系數據庫關系圖如圖4所示。由于每個節點都有大量歷史數據,所以每一個節點都創建一個表;USERS表用于保存監測系統的用戶信息;NodeTran用于保存數據幀轉發路徑;Nodelist用于保存節點列表;Limit用于保存監測系統的閾值管理設置值;Node_XXXX為節點XXXX的歷史數據表。除了用戶表,所有數據都采用varchar類型。
3.2存儲過程的創建為了提高通信監測模塊與數據庫之間通信的效率,將一些常用且較為復雜的SQL語句存放在數據庫中,使用時只需要調用存儲過程,輸入必要的參數即可完成相應的SQL語句操作,這樣可以大大減少程序與數據庫之間的通信量。
3.3使用ADO將VB6.0與SQL2005連接ADO是為Microsoft最新和最強大的數據訪問范例OLEDB而設計的,擁有一個易于使用的應用程序層接口。通過使用ADO2.0對象模型中的Recordset和Connection對象實現兩者連接和數據的存取。Connection對象包含關于某個數據提供程序的信息,如數據庫用戶、密碼、數據庫名等;Recordset對象包含某個查詢返回的記錄,可以創建一個Connection對象,在同一個連接上打開多個Recordset對象[8]。操作流程圖如圖5所示。
4結語
由于實時性數據需要快速、頻繁訪問的應用,應在內存中建立一棵多叉樹存儲最新數據,而對于訪問速度要求不高、數據量比較大的應用,則用數據庫管理。基于Zigbee進行了數據監測上位機通信接口設計。這種設計方法既能滿足實時性要求,又能增強系統的穩定性,因而具有可行性。
作者:鄒學玉吳君彥單位:長江大學電子信息學院