智能家居系統(tǒng)的設(shè)計與實現(xiàn)文件_第1頁
智能家居系統(tǒng)的設(shè)計與實現(xiàn)文件_第2頁
智能家居系統(tǒng)的設(shè)計與實現(xiàn)文件_第3頁
智能家居系統(tǒng)的設(shè)計與實現(xiàn)文件_第4頁
智能家居系統(tǒng)的設(shè)計與實現(xiàn)文件_第5頁
已閱讀5頁,還剩86頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、論文摘要:本文討論了基于Windows CE.net 5.0嵌入式操作系統(tǒng),以使用Intel XScale270為CPU的ARM10嵌入式實驗箱為硬件基礎(chǔ),以Visual Studio 2005和Delphi為軟件開發(fā)平臺的智能家居系統(tǒng)的設(shè)計與實現(xiàn)。通過詳細(xì)的系統(tǒng)設(shè)計過程,開發(fā)了相應(yīng)的軟件程序,包括嵌入式操作系統(tǒng)Windows CE 5.0的定制、應(yīng)用程序的界面設(shè)計、程序開發(fā)和單片機系統(tǒng)的底層編程。本設(shè)計融合了嵌入式系統(tǒng)、通訊、單片機、軟件開發(fā)等學(xué)科的知識。系統(tǒng)測試結(jié)果表明,該系統(tǒng)設(shè)計差不多滿足要求,并有一定的功能擴展空間。 1 緒論目前,科學(xué)技術(shù)進(jìn)展迅速,借助飛速進(jìn)展的網(wǎng)絡(luò)和信息技術(shù),人們能

2、夠足不出戶地縱覽全球。為了適應(yīng)信息化的需求,科研機構(gòu)將智能化的理念引入小區(qū) HYPERLINK /class_free/6_1.shtml t _blank 治理,并進(jìn)一步引入家庭,從而產(chǎn)生了智能家居的概念。將手機 HYPERLINK /class_free/147_1.shtml t _blank 通信和以太網(wǎng)通信技術(shù)引入智能家居的設(shè)計,恰好利用了現(xiàn)有的良好的通信條件,使在外的業(yè)主能及時了解家中的安全,提高業(yè)主的安全感,而且通過手機實時操縱家電,提高了業(yè)主生活的舒適度。本文提出了基于嵌入式系統(tǒng)ARM10的智能操縱平臺的設(shè)計,功能包括了短信操縱家電,傳感器探測非正常 HYPERLINK /cl

3、ass_free/153_1.shtml t _blank 環(huán)境同時通過手機短信告知業(yè)主,以及以太網(wǎng)實時視頻監(jiān)控等功能。2 系統(tǒng)設(shè)計方案2.1 硬件總體設(shè)計框圖依照上文的功能需要,設(shè)計出由ARM10為操縱核心,單片機操縱的家電操縱模塊和傳感器報警模塊,同時包含GSM通信模塊的智能家居系統(tǒng),硬件結(jié)構(gòu)框圖如圖2-1所示。SHAPE * MERGEFORMAT 圖2-1 硬件設(shè)計框圖2.2 操縱核心選擇智能家居操縱系統(tǒng)采納如圖2-2所示的XSBase270作為開發(fā)平臺,該平臺基于Intel高性能的PXA270處理器,支持Windows CE和Linux等嵌入式操作系統(tǒng),是針對教學(xué)和實驗的多功能實驗平

4、臺。PXA270處理器的最高主頻可達(dá)520MHz,且該處理器被加入了Wireless MXX技術(shù),大大的提高了多媒體處理能力,而且加入了Intel SpeedStep動態(tài)電源治理技術(shù),在保證CPU性能的前提下,最大限度的降低設(shè)備功耗1。XSBase270配置32M FLASH ROM,64M SDRAM,并配備了觸摸屏、以太網(wǎng)、USB、串口、CF/MMC、PCMCIA等接口。滿足了智能家居系統(tǒng)操縱中心的硬件要求。圖2-2XSBase270實驗箱展開圖2.3家電操縱板家電操縱板采納AT89C51為操縱核心。擴展板的元件布局如圖2-3所示,其上有四盞LED分不模擬四種家電,三個按鈕模擬三種傳感器。

5、其中四盞LED分不連接單片機的P1.0、P1.1、P1.2、P1.3;三個按鈕分不連接P2.0、P2.1、P2.2。圖2-3家電操縱模塊2.3.1 串行端口電路家電操縱板采納串口與XSBase270實驗箱進(jìn)行通信,其采納了經(jīng)典的兼容RS-232標(biāo)準(zhǔn)的MAX232芯片作為串口的電平轉(zhuǎn)換芯片。電路的連接如圖2-4所示:圖2-4家電操縱板串行接口電路如上圖所示,家電擴展板采納的是常用的DB9頭作為串口接口,其針腳定義圖如圖2-5所示:圖2-5RS-232 DB9頭針腳定義圖其中2腳RxD為接收引腳,3腳TxD為發(fā)送引腳,GND為信號地引腳。一般情況下一般串口只接這幾個引腳;專門的串口,如藍(lán)牙串口除接

6、上述的三個腳之外,還接了DSR引腳和CTS引腳,是因為藍(lán)牙串口的數(shù)據(jù)流輸出采納這兩個腳的信號操縱;而其他引腳是跟MODEM相關(guān)的。在智能家居系統(tǒng)中,家電操縱板接一般串口,GSM模塊接藍(lán)牙串口。RS-232信號相關(guān)于信號地而言,在正負(fù)電平之間擺動。發(fā)送數(shù)據(jù)時,發(fā)送端輸出的正電平在+5V到+15V之間,負(fù)電平在-5V和-15V之間。許多據(jù)傳輸時,線上為TTL電平。接收器典型的工作電平在+3V+12V與-3V-12V。由于發(fā)送電平和接收電平的差僅為23V左右,因此其共模抑制能力差,加上雙絞線的分布電容,信號傳輸距離最大為15m,最高速率為20kb/s2。MAX232包含2個驅(qū)動器、2個接收器和一個電

7、壓發(fā)生器電路,提供TIA/EIA-232-F電平。該器件符合TIA/EIA-232-F標(biāo)準(zhǔn),每一個接收器將TIA/EIA-232-F電平轉(zhuǎn)換成5V TTL/CMOS電平。每一個發(fā)送器將TTL/CMOS電平轉(zhuǎn)換成TIA/EIA-232-F電平。圖2-6MAX232引腳圖2.3.2 家電操縱電路圖2-7 模擬家電操縱電路家用電器操縱的接口電路如圖2-7 所示,K1K4 為繼電器,分不操縱四路家電的閉合和斷開,Q1Q4 為繼電器線圈電流驅(qū)動,電路由單片機的P1口進(jìn)行操縱,DD1DD4 發(fā)光二極管用于顯示某路操縱電路的工作情況,要緊為了調(diào)試電路而設(shè)置。2.3.3 傳感器接口電路圖2-8 傳感器接口電路

8、圖煙霧、煤氣泄漏、紅外等這些傳感器的報警信號通過光電耦合接入單片機的P2 口,如圖2-8 所示,在傳感器沒有報警信號時,光電耦合芯片處于截止?fàn)顟B(tài),與之相接的單片機端口為低電平;當(dāng)傳感器有報警,傳感器輸出高電平,現(xiàn)在光電耦合芯片導(dǎo)通,與之相接的單片機端口為高電平,由單片機對報警信號進(jìn)行采集并做出相應(yīng)處理。2-9所示的西門子MC35 GSM/GPRS無線模塊作為 HYPERLINK /class_free/147_1.shtml t _blank 通信工具。它支持EGSM900和GSM1800雙頻,支持?jǐn)?shù)字、語音、短消息和傳真,使用AT指令操縱發(fā)送短消息。它采納9V直流電源供電,通過RS-232串

9、行端口與XSBase270試驗箱連接進(jìn)行通信。 圖2-9 西門子MC352.5 視頻監(jiān)控模塊視頻采集模塊采納使用中星微(Vimicro)公司的ZC0301P芯片的攝像頭, ZC0301P芯片可支持USB 1.1接口,硬件最高支持VGA分辨率(640480)。在VGA模式下可達(dá)到15幀/秒速率,在CIF(352288)和 SIF(320240)模式下可達(dá)到30幀/秒速率。它通過USB接口連接到XSBase270試驗箱。圖2-10301P攝像頭2.6總體軟件設(shè)計方案依照智能家居的硬件設(shè)計方案,設(shè)計出軟件的總體設(shè)計方案如圖2-11所示:圖2-11 軟件設(shè)計框圖其中:、(1)家電操縱系統(tǒng)和GSM網(wǎng)絡(luò)通

10、信各自獨占一個RS-232串口。家電操縱系統(tǒng)接XSBase270的紅外串口,GSM模塊接藍(lán)牙串口。如圖2-12所示。(2)實時視頻監(jiān)控通過USB攝像頭捕捉圖像,圖像數(shù)據(jù)通過以太網(wǎng)發(fā)送到PC客戶端進(jìn)行圖像還原。(3)以太網(wǎng)通信基于TCP/IP協(xié)議,測試 HYPERLINK /class_free/153_1.shtml t _blank 環(huán)境為局域網(wǎng),若投入到因特網(wǎng)的應(yīng)用,則需要在服務(wù)端、客戶端所在的局域網(wǎng)連接到因特網(wǎng)的網(wǎng)關(guān)即路由器上,要進(jìn)行端口映射,才能夠進(jìn)行網(wǎng)絡(luò)的連接。圖2-12 紅外串口與藍(lán)牙串口智能家居系統(tǒng)的軟件基于Windows CE 5.0嵌入式操作系統(tǒng)。Windows CE被設(shè)計成

11、一種分層結(jié)構(gòu),從下而上一共分為了硬件層、OEM層、操作系統(tǒng)層和應(yīng)用層共四個層3。這種層次的結(jié)構(gòu)將硬件和軟件,操作系統(tǒng)和應(yīng)用軟件隔離開,以便于實現(xiàn)系統(tǒng)的移植。智能家居的軟件設(shè)計要緊是集中在應(yīng)用層。3 操作系統(tǒng)的定制Windows CE 5.0嵌入式操作系統(tǒng)的定制依靠Platform Builder5.0完成。Platform Builder是微軟公司設(shè)計的用于嵌入式操作平臺定制與驅(qū)動程序的開發(fā)的工具。推出它的目的之一確實是讓用戶能夠更好的將嵌入式操作系統(tǒng)移植到特定的目標(biāo)平臺上。3.1 BSP的安裝為了讓W(xué)indows CE 5.0能在實驗箱上運行起來,還必須安裝XSBase270的板級支持包(B

12、SP)。板級支持包是介于主板和操作系統(tǒng)中驅(qū)動程序之間的一層,一般認(rèn)為它屬于操作系統(tǒng)的一部分,要緊是對操作系統(tǒng)的支持,為上層的驅(qū)動程序提供訪問硬件設(shè)備寄存器的函數(shù)包。在PC上安裝好Windows CE.net5.0和Platform Builder5.0后,打開實驗箱附帶光盤中的BSP文件夾,運行XSBase270_V010106.msi文件,安裝XSBase270的BSP。如圖3-1所示。圖3-1 BSP安裝程序文件安裝好BSP后,進(jìn)入Platform Builder5.0中定制基于“EMDOOR SYSTEMS XSBASE270:ARMV4I”的因特網(wǎng)應(yīng)用類型的系統(tǒng)鏡像設(shè)計4。如圖3-2所

13、示。圖3-2 定制系統(tǒng)時選擇BSP種類3.2 添加平臺特征和配置平臺為了使系統(tǒng)在定制后能夠滿足差不多的應(yīng)用,并保證對某些設(shè)備的支持,就要向所設(shè)計的平臺中添加必要的特征。(1)添加USB Active Sync(File Sync)組件。只有添加此組件,才能使用PC的USB接口與Windows CE進(jìn)行文件同步。這也是在應(yīng)用軟件調(diào)試過程中所必須的條件。 (Catalog-Core OS-Windows CE devices-Applications-End User-ActiveSync-File Sync)(2)添加ChineseSimplified Font。安裝中文簡體字體后,才能正常顯示

14、中文。(Catalog-Core OS-Windows CE devices-International-Locale Specific Support-ChineseSimpified-Fonts)(3)添加文件系統(tǒng)支持。(Catalog - Core OS - Windows CE devices - File Systems and Data Store - Storage Manager - FAT File System)(4)添加分區(qū) HYPERLINK /class_free/6_1.shtml t _blank 治理(Catalog - Core OS - Windows CE

15、 devices - File Systems and Data Store - Storage Manager -Partition Driver) (5)添加操縱面板中的存儲器治理組件(Catalog - Core OS - Windows CE devices - File Systems and Data Store - Storage Manager - Storage Manager Control Panel Applet)(6)添加基于軟件的輸入系統(tǒng)(軟鍵盤等)(Catalog - Core OS - Windows CE devices - Shell and User In

16、terface - User Interface - Software Input Panel - Software-based Input Panel (SIP) (Choose 1 or more) - SIP for Large Screens)(7)添加平臺治理器(Platform Manager)(Catalog - Platform Manager - Platform Manager)(8)添加Usb ActiveSync(USB Function)(Catalog - Third Party - BSPs - Emdoor Systems XSBase270: ARMV4I -

17、 Device Drivers - USB Function-USB Function Bus Drivers -PXA27x USB Function) 完成特性的添加后,設(shè)置平臺的屬性。在“Platform”菜單下單擊“Setting”,在Configuration下拉菜單中選擇“Emdoor Systems XSBase270:ARMV4I Release”項,選擇Locale選項卡,進(jìn)行系統(tǒng) HYPERLINK /class_free/119_1.shtml t _blank 地理位置和環(huán)境 HYPERLINK /class_free/135_1.shtml t _blank 語言支持

18、的設(shè)置。Locales列表中,為最下端的“中文(中國)”項打勾。在Default Language下拉菜單里選擇“中文(中國)”為系統(tǒng)的默認(rèn) HYPERLINK /class_free/135_1.shtml t _blank 語言。如圖3-3所示。 圖3-3 選擇操作系統(tǒng)默認(rèn)語言在Build Option列表中,只選擇Enable Eboot Space in Memory(IMGEBOOT=1)和Write Run-time Image to Flash Memory(IMGFLASH=1)兩項。如圖3-4所示。圖3-4 程序組建選項設(shè)置單擊“Build OS”菜單下的“Sysgen”開始

19、組建操作系統(tǒng)。如圖3-5所示:圖3-5 生成操作系統(tǒng)鏡像3.3 紅外串口與藍(lán)牙串口的打開經(jīng)測試,在默認(rèn)配置下生成的系統(tǒng)鏡像,只打開了位于XSBase270模塊板上的全功能調(diào)試串口,而位于接口擴展板上的紅外串口和藍(lán)牙串口并沒有被打開。為了能夠與家電操縱板和GSM模塊連接,實現(xiàn)完整的智能家居系統(tǒng)的功能,必須將它們打開。(1)查找中斷號中斷號的定義是在試驗箱所提供的板級支持包中被配置的。打開C:WINCE500PlatformXSBase270Srcincbsp_cfg.h文件。能夠看到調(diào)試串口和 HYPERLINK /class_free/147_1.shtml t _blank 通信串口的中斷號

20、的定義,如圖3-6所示。圖3-6 BSP中的串口中斷定義能夠看到調(diào)試串口BFUART的中斷號是28,轉(zhuǎn)化為16進(jìn)制為0 x1c;通信串口SFUART中斷號27,轉(zhuǎn)換為16進(jìn)制是0 x1b。(2)修改注冊表打開以下文件夾,其中“F:platform270”是在新建操作系統(tǒng)平臺時所存儲它的磁盤位置。F:Platform270RelDirXSBase270_ARMV4I_Release打開platform.reg注冊表文件,在此文件中包含了對一些硬件的初始化的代碼。在“IF BSP_NOSERIAL!”與“END BSP_NOSERIAL!”兩句代碼之間,能夠看到藍(lán)牙串口的注冊表初始化代碼,下面只需

21、要添加初始化紅外串口的代碼:;Open the IR Serial PortHKEY_LOCAL_MACHINEDriversBuiltInSerialIR Irq=dword:14 ; 20 IRQ_STUART SysIntr=dword:1b ; 27 SYSINTR_SFUART MemBase=dword:40700000 ; STUART Register MemLen=dword:40 DeviceArrayIndex=dword:82 ; STUART object Prefix=COM Index=dword:3 Order=dword:1 IClass=CC5195AC-B

22、A49-48a0-BE17-DF6D1B0173DD ; Dll=ms2_serial.dllHKEY_LOCAL_MACHINEDriversBuiltInSerialIRUnimodem Tsp=Unimodem.dll DeviceType=dword:0 FriendlyName=IRSerial Cable on COM3: DevConfig=hex: 10,00, 00,00, 05,00,00,00, 10,01,00,00, 00,4B,00,00, 00,00, 08, 00, 00, 00,00,00,00修改好注冊表代碼以后,保存platform.reg文件。打開剛才建

23、立的操作系統(tǒng)設(shè)計工程,選擇Build OS菜單下的Make Run-Time Image命令,生成新的內(nèi)核文件NK.bin。3.4 操作系統(tǒng)的生成與下載定制并組建Windows CE后,將會生成BootLoaderEBOOT.nb0文件和NK內(nèi)核nk.bin,將它們燒寫進(jìn)入XSBase270實驗箱。4 應(yīng)用軟件設(shè)計4.1 應(yīng)用程序編寫 HYPERLINK /class_free/153_1.shtml t _blank 環(huán)境開發(fā)環(huán)境:Microsoft Visual Studio 2005開發(fā)語言:Microsoft Visual C+ 2005軟件開發(fā)包:XSBase270 SDK智能家居系

24、統(tǒng)的應(yīng)用程序采納Visual Studio 2005進(jìn)行開發(fā)。Visual Studio是微軟公司開發(fā)的Windows平臺上的應(yīng)用程序開發(fā)環(huán)境。Visual Studio能夠創(chuàng)建Windows 下的Windows應(yīng)用程序和網(wǎng)絡(luò)應(yīng)用程序,也能夠用來創(chuàng)建網(wǎng)絡(luò)服務(wù)、智能設(shè)備應(yīng)用程序和Office插件5。Visual Studio 2005面向.net框架(2.0版本),同時能夠開發(fā)跨平臺的應(yīng)用程序。圖4-1 Visual Studio 20054.2 智能家居人機接口設(shè)計打開Visual Studio 2005,創(chuàng)建一個基于MFC Smart Device Application的VC+程序。如圖4

25、-2所示:圖4-2 新建智能家居的應(yīng)用程序到選擇平臺步驟時選擇XSBase270平臺,刪除默認(rèn)的Pocket PC 2003平臺。如圖4-3所示。圖4-3 選擇軟件開發(fā)包支持單擊“Next”按鈕進(jìn)入選擇應(yīng)用程序類型和資源語言程序界面上采納的語言的畫面。如圖4-4所示,選擇“Dialog based”(基于對話框)類型,資源語言選擇“中文(中國)”。其他項目保留默認(rèn)的選項。圖4-4 選擇應(yīng)用程序種類保持默認(rèn)的設(shè)置,一直到完成新建項目向?qū)?。進(jìn)入IDE環(huán)境。集成環(huán)境的窗口分布如圖4-5所示:圖4-5 Visual Studio 2005集成環(huán)境將對話框設(shè)計成如圖4-6所示:圖4-6 智能家居操作界面

26、設(shè)計表4-1 智能家居應(yīng)用軟件界面控件配置控件類型控件名稱功能按鈕控件初始化GSM初始化GSM模塊開始攝像打開攝像頭,開始視頻捕捉停止攝像停止攝像頭視頻捕捉開始監(jiān)聽打開ARM的9000號端口,打開網(wǎng)絡(luò)通信停止監(jiān)聽關(guān)閉端口,停止TCP通信冰箱打開家中的冰箱設(shè)備燈光打開家中的燈光設(shè)備微波爐打開家中的微波爐設(shè)備空調(diào)打開家中的空調(diào)設(shè)備關(guān)于我們查看軟件作者版權(quán)聲明信息退出程序關(guān)閉未關(guān)閉的線程,退出程序列表控件消息窗口用來顯示用戶發(fā)回的短信記錄圖片控件煤氣煤氣傳感器報警信號,報警時紅色,常態(tài)時綠色煙霧煙霧傳感器報警信號,報警時紅色,常態(tài)時綠色紅外紅外傳感器報警信號,報警時紅色,常態(tài)時綠色編輯框信息框?qū)崟r顯

27、示系統(tǒng)運行情況4.3串口 HYPERLINK /class_free/147_1.shtml t _blank 通信功能設(shè)計 4.3.1 串口通信協(xié)議串口通信協(xié)議采納CCESeries類實現(xiàn),通過對此類的成員函數(shù)的調(diào)用,完成對串口的初始化、讀寫操作等,在不用串口的情況下,還能夠關(guān)閉串口。4.3.2 軟件的實現(xiàn)在Visual Studio的解決方案視圖里添加類CCESeries,如圖4-7所示。CCESeries類的成員函數(shù)如表4-2所示。圖4-7 在VS2005中建立CCESeries類表4-2 串口操作類CCESeries的成員函數(shù)函數(shù)作用函數(shù)名稱打開串口BOOL OpenPort(HWND

28、 pPortOwner, UINT portNo = 1, UINT baud= 9600,UINT parity= NOPARITY, UINT databits= 8,UINT stopbits= 0 );關(guān)閉串口Void ClosePort();設(shè)置串口超時BOOL SetSeriesTimeouts(COMMTIMEOUTS CommTimeOuts);讀串口線程Static DWORD WINAPI ReadThreadFunc(LPVOID lparam);寫串口BOOL WritePort(LPCTSTR lpString);BOOL WritePort(char *buf,in

29、t nSize);BOOL WritePort(char *buf);關(guān)閉讀線程Void CloseReadThread();表4-3 串口操作類CCESeries的成員變量變量類型變量名稱作用HANDLEm_hComm已打開的串口句柄HWNDm_hWnd此串口類所屬的窗口句柄HANDLEm_hReadThread讀串口線程句柄HANDLEm_hWriteThread寫串口線程句柄DWORDm_dwReadThreadID讀串口線程IDDWORDm_dwWriteThreadID寫串口線程IDHANDLEm_hReadCloseEvent讀串口線程退出事件HANDLEm_hWriteClose

30、Event寫串口線程退出事件 打開串口與配置串口在Windows CE中,驅(qū)動程序分為本地設(shè)備驅(qū)動和流設(shè)備驅(qū)動兩種6。本地設(shè)備如鍵盤、觸摸屏等,一般在設(shè)備生產(chǎn)后是可不能再更換的,相應(yīng)的驅(qū)動這些設(shè)備的驅(qū)動程序也是必需的。而流接口設(shè)備驅(qū)動程序能夠由第三方提供,支持另外添加到系統(tǒng)中的設(shè)備。而串口就屬于流接口設(shè)備之一。流設(shè)備驅(qū)動在系統(tǒng)中是以三位字符串后跟一位數(shù)字表示的,關(guān)于串口而言,這三位字符是“COM”(不包括引號)。當(dāng)引用一個流接口驅(qū)動程序時,除了三位字符后跟一位數(shù)字以外,還要緊跟一個冒號“:”(英文半角冒號),冒號是必需的,是為了區(qū)不桌面Windows的設(shè)備驅(qū)動程序的命名規(guī)則。該函數(shù)的流程圖如圖

31、4-8所示:圖4-8 OpenPort函數(shù)流程圖(1)串口的打開所有的流驅(qū)動程序都將采納CreateFile函數(shù)打開串口設(shè)備。在Windows CE下,系統(tǒng)不支持設(shè)備的重疊I/O,因此不能在參數(shù)dwFlagsAndAttributes中傳遞FILE_FLAG_OVERLAPPED標(biāo)志,返回的句柄要么是已打開的串口端口的句柄,或者是INVAILID_HANDLE_VALUE。CreateFile與大多數(shù)Windows函數(shù)不一樣,打開失敗時,不返回0。CreateFile函數(shù)的原型如下:HANDLE CreateFile(LPCTSTR lpFileName, / 對象路徑名DWORD dwDes

32、iredAccess, /操縱模式DWORD dwShareMode, / 共享模式LPSECURITY_ATTRIBUTES lpSecurityAttributes, /安全屬性(也即銷毀方式)DWORD dwCreationDisposition, / 創(chuàng)建的方式DWORD dwFlagsAndAttributes, / 對象屬性HANDLE hTemplateFile / 一個文件模板句柄);在CCESeries類中, HANDLE類型全局變量m_hComm存儲CreateFile函數(shù)打開串口成功時的返回值,憑借此句柄能夠操縱打開的串口對象;以讀寫的方式打開串口。(2)串口的設(shè)置打開串

33、口后,還必須對端口配置好正確的波特率、字符長度、停止位等等。在OpenPort函數(shù)中,使用兩個函數(shù)GetCommState和SetCommState來配置串口。函數(shù)原型如下:BOOL SetCommState(HANDLE hRle, LPDCB lpDCB);BOOL GetCommState(HANDLE hFile, LPDCB lpDCB);這兩個函數(shù)都包含了同樣的參數(shù),即已打開的串口的句柄和指向DCB結(jié)構(gòu)的指針。DCB結(jié)構(gòu)的設(shè)置如表4-4所示。表4-4 OpenPort函數(shù)中的串口DCB配置DCB定義項目設(shè)置值備注BaudRateBaud設(shè)置波特率為傳入型參baud的值fBinary

34、TRUE二進(jìn)制模式有效fParityTRUE支持奇偶校驗ByteSizeDatabits設(shè)置數(shù)據(jù)位為傳入型參databits,范圍48ParityNOPARITY校驗?zāi)J接行topBitsStopbits設(shè)置停止位為傳入型參stopbitsfOutxCtsFlowTRUE串口輸出由端口的CTS線操縱fOutxDsrFlowTRUE串口輸出由端口的DSR線操縱fDtrSensitivityDTR_CONTROL_ENABLE續(xù)表4-4 OpenPort函數(shù)中的串口DCB配置DCB定義項目設(shè)置值備注fDsrSensitivityFALSEfTXContinueOnXoffTRUE串口接收緩沖區(qū)已

35、滿時,且驅(qū)動程序已傳送了XOFF字符,則驅(qū)動程序停止傳送字符fOutXFALSEXON/XOFF操縱不用于操縱串行輸出fInXFALSEXON/XOFF操縱不為輸入串行流使用fErrorCharFALSEfNullFALSE串行驅(qū)動不忽略接收到的空字節(jié)fRtsControlRTS_CONTROL_ENABLEfAbortOnErrorFALSE串口發(fā)生錯誤時,并不終止串口讀寫來源: HYPERLINK / t _blank 論文天下論文網(wǎng) HYPERLINK / t _blank (3)串口超時設(shè)置 設(shè)置好串口驅(qū)動操作的配置后,一個必要的步驟是,設(shè)置端口的超時值。所謂超時,是指Windows

36、CE.net在讀串口和寫串口的自動返回前等待讀或?qū)懖僮鞯臅r刻長度。在程序中,用以下兩個函數(shù)操縱串行超時。BOOL GetCommTimeouts(HANDLE hFile, LPCOMMTIMEOUTS lpCommTimeouts);BOOL SetCommTimeouts(HANDLE hFile, LPCOMMTIMEOUTS lpCommTimeouts);這兩個函數(shù)都包含了對應(yīng)的串行設(shè)備的句柄和COMMTIMEOUTS結(jié)構(gòu)的指針,COMMTIMEOUTS結(jié)構(gòu)定義為:typedef struct _COMMTIMEOUTSDWORD ReadIntervalTimeout;DWORD

37、ReadTotalTimeoutMultiplier;DWORD ReadTotalTimeoutConstant;DWROD WriteTotalTimeoutMultiplier;DWORD WriteTotalTimeoutConstant;COMMTIMEOUTS;(4)其他的函數(shù)設(shè)置串口的輸入輸出緩沖區(qū)。原型如下BOOL SetupComm(HANDLE hFile, DWORD dwInQueue, DWORD dwOutQueue);設(shè)置串口檢測的事件集。SetCommMask(HANDLE hFile,DWORD dwEvtMask);通過那個函數(shù),能夠使線程等待如表4-5中的

38、常見的串口驅(qū)動程序事件。表4-5 串口驅(qū)動程序事件事件標(biāo)志表達(dá)意義EV_BREAK檢測到中斷EV_CTSCTS更改狀態(tài)EV_DSRData Set Ready信號更改狀態(tài)EV_ERR串行驅(qū)動程序檢測到錯誤EV_RKSDReceive Line Signal Detect 行更改狀態(tài)EV_RXCHAR接收到一個字符EV_RXFLAG接收到一個事件字符EV_TXEMPTY傳輸緩沖區(qū)為空關(guān)閉串口調(diào)用CloseHandle能夠關(guān)閉一個串行端口,用關(guān)閉在打開串口時創(chuàng)建的那個句柄即可關(guān)閉串口了。方法如下CloseHandle(m_hComm);關(guān)閉線程函數(shù):BOOL TerminateThread(HAN

39、DLE hThread, DWORD dwExitCode); 其中,hThread為要關(guān)閉的線程的句柄。dwExitCode一般為0。若成功關(guān)閉,則返回一個非零值。關(guān)閉串口函數(shù)的工作流程如圖4-9所示。SHAPE * MERGEFORMAT 圖4-9 ClosePort函數(shù)流程圖 串口讀線程讀串口ReadFile函數(shù)原形:BOOL ReadFile(HANDLE hFile, /文件的句柄LPVOID lpBuffer, /用于保存讀入數(shù)據(jù)的一個緩沖區(qū)DWORD nNumberOfBytesToRead, /要讀入的字符數(shù)LPDWORD lpNumberOfBytesRead, /從文件中實

40、際讀入的字符數(shù)LPOVERLAPPED lpOverlapped /異步讀取描述,在Windows CE中為NULL);在該線程中,若串口讀完一條信息,則發(fā)送一個系統(tǒng)消息到系統(tǒng)窗體,該消息的名稱為WM_RXCHAR_ALL,是一個用戶自定義消息。發(fā)送給系統(tǒng)窗體的附帶消息包含收到的消息的內(nèi)容和消息的長度。發(fā)送系統(tǒng)消息的API函數(shù)SendMessage的原型如下:LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam);圖4-10 串口讀線程流程圖 寫串口在CCESeries類中,一共編寫了三個寫串口的函數(shù),為的是方便不

41、同情況下的調(diào)用。如要向?qū)懸阎L度的字符串,能夠采納WritePort(char *buf,int nSize)函數(shù)。寫未知長度字符串時,采納WritePort(char *buf)函數(shù),字符串的長度將在函數(shù)內(nèi)部進(jìn)行計算。前者提高了寫串口的時刻效率。這三個函數(shù)中,采納了一個共同的API函數(shù)WriteFile(),它的函數(shù)原型如下:BOOL WriteFile(HANDLE hFile, / 文件句柄LPCVOID lpBuffer, / 數(shù)據(jù)緩存區(qū)指針DWORD nNumberOfBytesToWrite, / 要寫的字節(jié)數(shù)LPDWORD lpNumberOfBytesWritten, / 用于

42、保存實際寫入字節(jié)數(shù)的存儲區(qū)域的指針LPOVERLAPPED lpOverlapped / OVERLAPPED結(jié)構(gòu)體指針,CE里設(shè)為NULL); 串口類的調(diào)用在主程序中,必須調(diào)用此CCESeries類,以達(dá)到操作串口的目的。在定義智能家居的窗口行為的CSmartHomeDlg類的頭文件CSmartHomeDlg.h文件中,添加CCESeries.h頭文件。同時新建一個public HYPERLINK /class_free/10_1.shtml t _blank 公共型變量m_BTSerial(藍(lán)牙串口)和m_IRSeries進(jìn)行對CCESeries類的實例化。CCESeries m_BTSe

43、rial;CCESeries m_IRSerial;在用于CSmartHomeDlg類成員函數(shù)的定義的文件CSmartHomeDlg.cpp文件中,采納形如m_BTSerial.OpenPort(this-m_hWnd,1,9600)的方式進(jìn)行串口類成員函數(shù)的調(diào)用。 串口的監(jiān)聽在讀串口線程中,讀完串口的一條信息后發(fā)送名為WM_RXCHAR_ALL的系統(tǒng)消息給系統(tǒng)窗體。在窗體程序中,必須對其進(jìn)行響應(yīng)。在CSmartHomeDlg.cpp文件中,添加一條消息響應(yīng)的聲明:ON_MESSAGE(WM_RXCHAR_ALL,OnComRecvMsg)其中OnComRecvMsg為對其消息響應(yīng)的函數(shù),函數(shù)

44、的聲明如下:afx_msg long OnComRecvMsg(WPARAM wParam, LPARAM lParam);其中“afx_msg”講明該函數(shù)是一消息響應(yīng)函數(shù)。4.4 GSM HYPERLINK /class_free/147_1.shtml t _blank 通信模塊 智能家居以GSM網(wǎng)絡(luò)作為數(shù)據(jù)的無線傳輸網(wǎng)絡(luò),利用基于GSM網(wǎng)絡(luò)上的短信息服務(wù),完成智能家居的遠(yuǎn)程安全監(jiān)控和無線報警的功能。4.4.1 設(shè)計差不多原理 PDU編碼規(guī)則自短信息技術(shù)被開發(fā)到現(xiàn)在,對短信息的操縱方式包含了Block Mode、基于AT的Text Mode基于AT指令的PDU Mode。 使用Block模

45、式需要廠家驅(qū)動的支持,隨著技術(shù)的進(jìn)展,后兩種模式將其取代。Text模式比較簡單,但不能發(fā)送中文短信息。在智能家居的軟件設(shè)計中,采納的是基于PDU模式,該模式支持各個國家 HYPERLINK /class_free/135_1.shtml t _blank 語言,因此也包括中文。在智能家居中,采納中文報警和中文指令。PDU數(shù)據(jù)包格式,是手機發(fā)送短信的一個數(shù)據(jù)單位7。其中的發(fā)送源手機號碼、短消息服務(wù)中心號碼(SMSC)、時刻戳等差不多上用壓縮BCD碼表示,低位在前,高位在后。在PDU模式中,可采納Bit7、Bit8和UCS2編碼方式對短消息發(fā)送內(nèi)容進(jìn)行編碼。這三種編碼方式能夠發(fā)送的最大字符數(shù)分不為

46、160,140和70。其中Bit7編碼發(fā)送一般ASCII字符,從0 x00到0 x7f,共能夠表示128個字符。而短消息的報文是以8位字節(jié)傳輸?shù)?,因此就必須?位碼壓縮成7位碼。實現(xiàn)方法是: 將第二個字符的最后一位, 補充到第一個字符的前面第一位, 第三個字符的后兩位, 補充到第二個字符的前兩位, 依次類推, 就可得到相應(yīng)的字符串。最后轉(zhuǎn)換成十六進(jìn)制。Bit8編碼通常用于發(fā)送任何二進(jìn)制數(shù)據(jù)。UCS2編碼用于發(fā)送Unicode字符。它固定使用16位共兩個字節(jié)來表示一個字符,共能夠表示65535個字符。圖4-11和圖4-12分不是接收和發(fā)送短信的報文格式。圖4-11 接收短信的報文格式圖4-12

47、發(fā)送短消息的報文格式實例一、發(fā)送短信時的PDU碼:08 91 68 31 08 20 01 05 F0 11 00 0B 91 31 58 81 27 64 F8 00 00 00 06 C8 32 9B FD 0E 01表4-6 發(fā)送PDU包解析分段含義講明08SMSC地址信息的長度共8個八位字節(jié)(包括91)91SMSC地址格式(TON/NPI)用國際格式號碼(在前面加+)68 31 08 20 01 05 F0SMSC地址8613800250500,補F湊成偶數(shù)個11差不多參數(shù)(TP-MTI/VFP)發(fā)送,TP-VF用相對格式00消息基準(zhǔn)值(TP-MR)00B目標(biāo)地址數(shù)字個數(shù)共11位,不包

48、括補足的F91目標(biāo)地址格式(TON/NPI)用國際格式號碼(在前面加+)68 31 18 48 31 46 F9目標(biāo)地址(TP-DA)8613818413649,補F湊成偶數(shù)個00協(xié)議標(biāo)識(TP-PID)是一般GSM類型,點到點方式00用戶信息編碼方式(TP-DCS)7-bit編碼00有效期(TP-VP)5分鐘06用戶信息長度(TP-UDL)實際長度6個字節(jié)C8 32 9B FD 0E 01用戶信息(TP-UD)“Hello!”結(jié)合發(fā)送短信的報文格式,明白短消息中心號碼是:+8613800210500,對方號碼是消息內(nèi)容是“Hello!”。實例二、接收短信時的PDU碼

49、08 91 68 31 08 20 01 05 F0 84 0D 91 68 31 58 81 27 64 F8 00 08 3030 21 80 63 54 80 06 53 4E 4E 1C 00 21表4-7 接收短消息PDU包解析分段含義講明08SMSC地址信息的長度共8個八位字節(jié)(包括91)91SMSC地址格式(TON/NPI)用國際格式號碼(在前面加+)68 31 08 20 05 05 F0SMSC地址8613800250500,補F湊成偶數(shù)位84差不多參數(shù)(TP-MTI/MMS/RP)接收,無更多消息,有回復(fù)地址0B回復(fù)地址數(shù)字個數(shù)共11個十進(jìn)制數(shù)(不包括F)91回復(fù)地址格式(

50、TON/NPI)用國際格式號碼(在前面加+)68 31 58 81 27 64 F8回復(fù)地址(TP-RA)8613851872468,補F湊成偶數(shù)位00協(xié)議標(biāo)識(TP-PID)是一般GSM類型,點到點方式08用戶信息編碼方(TP-DCS)UCS2編碼30 30 21 80 63 54 80時刻戳(TP-SCTS)2003-3-12 08:36:45 +8時區(qū)06用戶信息長度(TP-UDL)實際長度6個字節(jié)53 4E 4E 1C 00 21用戶信息(TP-UD)“華東!”短消息中心號碼是:+8613800210500,對方號碼消息內(nèi)容是“華東!”。 AT指令在智能家居中

51、,操縱中心通過串口給MC35模塊發(fā)送AT指令以達(dá)到操縱它的目的。表4-8中是一些系統(tǒng)中采納的AT指令。表4-8 系統(tǒng)采納的AT指令A(yù)T指令功能AT+CMGF=0選擇短消息信息格式,等于0時為PDU格式,等于1時為文本模式,AT+CNMI=1,1,0,0,1設(shè)置為短信到達(dá)時自動提醒AT+CMGS=?發(fā)送短消息,發(fā)送成功則返回OK字符串AT+CMGR=?讀取短消息,讀取成功則返回+CMGR: 0,idcontentAT+CMGD=?刪除短消息4.4.2 軟件的實現(xiàn) PDU編碼解碼短信的PDU解碼和編碼的功能由智能家居軟件工程中的CEncode類實現(xiàn)。CEncode類的成員函數(shù)如表4-9所示:表4-

52、9 CEncode類的方法方法備注Int gsmString2Bytes(const char* pSrc, unsigned char* pDst, int nSrcLength)可打印字符串轉(zhuǎn)換為字節(jié)數(shù)據(jù)如:C8329BFD0E01 - 0 xC8, 0 x32, 0 x9B, 0 xFD, 0 x0E, 0 x01int gsmBytes2String(const unsigned char* pSrc, char* pDst, int nSrcLength)字節(jié)數(shù)據(jù)轉(zhuǎn)換為可打印字符串如:0 xC8, 0 x32, 0 x9B, 0 xFD, 0 x0E, 0 x01 - C8329BF

53、D0E01int gsmEncode7bit(const char* pSrc, unsigned char* pDst, int nSrcLength)7bit編碼int gsmDecode7bit(const unsigned char* pSrc, char* pDst, int nSrcLength)7bit解碼int gsmEncode8bit(const char* pSrc, unsigned char* pDst, int nSrcLength)8bit編碼int gsmDecode8bit(const unsigned char* pSrc, char* pDst, int

54、nSrcLength)8bit解碼int gsmEncodeUcs2(const char* pSrc, unsigned char* pDst, int nSrcLength)UCS2編碼int gsmDecodeUcs2(const unsigned char* pSrc, char* pDst, int nSrcLength)UCS2解碼int gsmInvertNumbers(const char* pSrc, char* pDst, int nSrcLength)正常順序的字符串轉(zhuǎn)換為兩兩顛倒的字符串,若長度為奇數(shù),補F湊成偶數(shù)。如:8613851872468 - 683158812

55、764F8int gsmSerializeNumbers(const char* pSrc, char* pDst, int nSrcLength)兩兩顛倒的字符串轉(zhuǎn)換為正常順序的字符串。如:683158812764F8 - 8613851872468Int gsmDecodePdu(const char* pSrc, SM_PARAM* pDst)PDU解碼,用于接收、閱讀短消息int gsmEncodePdu(const SM_PARAM* pSrc, char* pDst)PDU編碼,用于編制、發(fā)送短消息來源: HYPERLINK / t _blank 論文天下論文網(wǎng) HYPERLINK

56、 / t _blank 在該類中,關(guān)鍵的函數(shù)為gsmDecodePdu函數(shù)與gsmEncodePdu函數(shù),它們將在智能家居中的對話框類CSmartHomeDlg中被調(diào)用。調(diào)用方法將在下文給予介紹。gsmDecodePdu函數(shù)與gsmEncodePdu函數(shù)分不用來在發(fā)短信時依照PDU規(guī)范進(jìn)行編碼,以及對串口收到的PDU編碼進(jìn)行解碼。編碼與解碼依照在頭文件中定義的短消息結(jié)構(gòu)體進(jìn)行取值或填充。以下是定義的關(guān)于編碼方式的常量和填充短消息的數(shù)據(jù)結(jié)構(gòu)。這些在接收與發(fā)送短信時是共用的。 #define GSM_7BIT 0 /7Bit編碼方式#define GSM_8BIT 4 /8Bit編碼方式#defi

57、ne GSM_UCS2 8 /UCS2編碼方式typedef struct char SCA16; / 短消息服務(wù)中心號碼(SMSC地址) char TPA16; / 目標(biāo)號碼或回復(fù)號碼(TP-DA或TP-RA) char TP_PID; / 用戶信息協(xié)議標(biāo)識(TP-PID) char TP_DCS; / 用戶信息編碼方式(TP-DCS) char TP_SCTS16; / 服務(wù)時刻戳字符串(TP_SCTS), 接收時用到 char TP_UD161; / 原始用戶信息(編碼前或解碼后的TP-UD) char index; / 短消息序號,在讀取時用到 SM_PARAM; CEncode類各成

58、員函數(shù)的作用和工作流程:gsmDecodePdu()函數(shù)用于接收、閱讀短消息。輸入源PDU串的指針,目標(biāo)PDU參數(shù)指針,并返回用戶信息長度。源PDU串是可打印字符串,如“C8329BFD0E01”,目標(biāo)PDU參數(shù)是字節(jié)數(shù)據(jù),如“0 xC8, 0 x32, 0 x9B, 0 xFD, 0 x0E, 0 x01”,在那個函數(shù)中,較多的采納了同在一個類中的可打印字符串轉(zhuǎn)換為字節(jié)數(shù)據(jù)的函數(shù)gsmString2Bytes;在短消息服務(wù)中心(SMSC)和回復(fù)號碼的字符處理過程中,依照PDU串的編碼規(guī)范,需要對描述SMSC的字符串段進(jìn)行兩兩顛倒,同時去掉經(jīng)顛倒后的字符串后的最后一個字符“F”,那就采納了同在

59、一個類中的gsmSerializeNumbers函數(shù);通過數(shù)據(jù)分離,將PDU串中的描述短信編碼位TP-DCS跟規(guī)定的數(shù)值進(jìn)行對比,如表示7位碼的數(shù)值為0,8位碼為4,UCS2編碼為8等。對比完成后,將用戶信息進(jìn)行對應(yīng)方式的解碼如7位解碼。它的工作流程如圖4-13所示。SHAPE * MERGEFORMAT 圖4-13 CEncode類gsmDecodePdu函數(shù)工作流程gsmEncodePdu()函數(shù)用于編制、發(fā)送短消息,輸入源PDU參數(shù)指針,輸出目標(biāo)PDU串指針,并返回目標(biāo)PDU串長度。源PDU參數(shù)是字節(jié)信息,如“0 xC8, 0 x32, 0 x9B, 0 xFD, 0 x0E, 0 x0

60、1,目標(biāo)PDU參數(shù)是字節(jié)數(shù)據(jù),如“C8329BFD0E01”,在那個函數(shù)中,較多的采納了同在一個類中的字節(jié)數(shù)據(jù)轉(zhuǎn)換為可打印字符串的函數(shù)gsmBytes2String;在短消息服務(wù)中心(SMSC)和回復(fù)號碼的字符處理過程中,依照PDU串的編碼規(guī)范,需要對描述SMSC號碼進(jìn)行兩兩顛倒,同時在經(jīng)顛倒后的字符串后加上一個字符“F”,那就采納了同在一個類中的gsmInvertNumbers函數(shù);依照描述短信編碼的TP-DCS跟規(guī)定的數(shù)值進(jìn)行對比,如表示7位碼的數(shù)值為0,8位碼為4,UCS2編碼為8等。對比完成后,將用戶信息進(jìn)行對應(yīng)方式的編碼如7位編碼。它的工作流程如圖4-14所示。SHAPE * MER

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論