摘要:該文主要介紹了在WinCE環境下實現XBee無線模塊與PDA之間的串口通信。以EVC來設計界面編制程序,文中給出了實現的關鍵技術。結果表明系統可靠穩定。
關鍵詞:WinCE;串口通信;XBee;多線程
中圖分類號:TP393文獻標識碼:A文章編號:1009-3044(2010)03-558-02
Serial Communitication Under WinCE
XIE QU-bo1, XIA Ding-chun2, YANG Dan2
(1. Wuhan University of Science and Engineering, Wuhan 430073, China; 2. Changsha VocationalTechnical College, Changsha 410000, China)
Abstract: The article describes how to achieve serial communication between the PC and XBee Modual under WinCE. Designing the interface and programming according to EVC, and give the key codes of this model. The result proves that reliability and stability of the system.
Key words: WinCE; serial communitication; XBee; multithread
1 概述
在遠程監控和工業自動化領域系統中,串口通信因其具有連接簡單,使用方便,可靠性高的優點,因而得到了越來越廣泛的應用。在工業現場或者是巡檢的過程中,一般會用到嵌入式的設備,WinCE是微軟推出的一個32位的,多線程實時操作系統,可以完美支持嵌入式設備。WinCE以其良好的性能得到了用戶的認可。同時,在監控和自動化領域中,無線發射和接受因其布置簡單,易于維護,被越來越多的用戶接受。
2 系統實現
2.1 系統組成
系統采用2個XBee模塊和1個PDA。一個XBee發送數據,一個接受數據,2片XBee之間通過無線進行傳輸,接受的XBee通過串口與PDA相連接,PDA與接收XBee模塊通信,讀取其中的數據并顯示,也可向其中寫入數據。
2.2 XBee無線模塊
XBee是Digi公司推出的一種由電池供電的長壽命的無線傳感器,易于連接到Drop——in NetWorking網絡應用或ZigBee網絡中。ZigBee技術使低成本、低功耗的設備網絡得以與自配置和自修復的無線Mesh網絡相連接。基于XBee傳感器,使用者可以在ZigBee網絡從多個結點方便地收集實時數據。
2.3 WinCE下串口通信簡介
在WinCE下運行的程序,一般是在Windows環境下開發的,然后下載到嵌入式設備中。系統中是在Windows環境下用EVC去開發應用軟件,然后下載到PDA中去。串口在WinCE中屬于流接口設備,可以像對文件一樣對串口進行打開,關閉,讀寫等操作。WinCE下的串口函數和Windows下的串口函數基本相同,但在以下一些方面有所不同:1.WinCE只支持Unicode;2.WinCE中有一些自己特有的控件,可以方便編程。3.EVC不支持重疊I/ O操作。
2.4 WinCE下串口通信基本方法
在WinCE下開發串口通信包含下面一些步驟:
1) 打開端口并進行初始化。在EVC中把設備當做文件來處理,故使用CreateFile來打開端口。如果打開成功,則會返回打開串口的句柄。成功打開一個端口之后,需要對端口進行初始化。調用串口通信函數SetupComm設置COM4的發送和接受緩沖區的大小。分配好緩沖區后調用GetCommTimeouts函數對讀寫串口進行超時設置。然后調用GetCommState函數獲取當前串口的默認參數并返回一個DCB結構體地址,通過給這個DCB結構體各成員賦值來重新設定串口狀態。最后調用PurgeComm函數清空串口的發送接收緩沖區。
2) 對串口進行讀寫操作。成功配置好串口參數后即可調用函數ReadFile和WriteFile對串口進行讀寫操作。在通信的過程中可能出現通信錯誤導致程序無法繼續進行,一般需要調用ClearCommError清除這些錯誤。
3) 關閉串口。使用完串口后必須關閉串口。串口不能像文件一樣被共享,不釋放別的應用程序就不能使用它。關閉串口只需使用CloseHandle即可。
2.5 串口與XBee通信模型
在串口通訊當中,要做到通信模型吞吐量大,實時性強,能處理并發事件,這就要求使用多線程技術。在主程序中創建2個線程,一個用于讀串口,一個用于寫。其通信的模型圖如圖1所示:在EVC中創建一個工程,在主程序中增加兩個線程,即創建一個讀進程,一個寫進程。用CreateThread創建好進程后,讀線程和寫線程都處于掛起狀態,主進程通過不停的查詢串口狀態,得到相應的事件,根據返回的事件喚醒相應的進程。當喚醒讀進程后,讀進程會調用回調函數接受串口中的數據,對數據進行必要的處理后,進行輸出顯示。也可以向系統中寫入數據,例如像其中一個XBee模塊中寫入API指令,就可以控制另一XBee模塊,這就可以實現遠程控制。各線程間以時間同步對象來實現同步,形成主進程與讀寫進程的協調一致。WinCE系統是可搶占式多線程處理操作系統,故在創建線程的時候,可以給線程規定一個優先級,根據任務時間緊迫性的高低給任務定義一個數值來表示優先級的高低,調度時選擇高者先執行,優先級相等時輪流執行,并且優先級低的線程運行時,優先級高的線程到達后會馬上執行優先級高的線程,這就保證了運行過程中的實時性和高效性。
3 結束語
該文介紹了在WinCE下用EVC編程實現XBee與PDA之間的串口通信,該方法簡單易行,系統穩定,完全實現了系統間的串口通信。該系統可以應用到監控系統及工業現場當中。系統中利用多線程技術處理數據的接受和發送,提高了系統的實時性和吞吐量,達到了預期的目標,并有很大的實用價值。
參考文獻:
[1] 劉偉,劉光斌,余志勇.Windows 95多線程通信應用程序設計[J].計算機系統應用,1999.
[2] Charles Petzold.Windows CE程序設計[M].北京:北京大型出版社,1999.
[3] 陳淑珍,石波.基于Windows多線程環境下的串口通信[J].武漢大學學報(自科版),2000.
[4] 李現勇.Visual C++串口通信與工程實踐[M].北京:人民郵電出版社,2005.
[5] 王莉,陽春華.基于Visual C++串口通信設計及其應用[J].控制工程,2004,11.