智能家居系統(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頁,還剩71頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

論文核心詞:智能家居嵌入式系統(tǒng)WindowsCEVisualC++Delphi論文摘要:本文討論了基于WindowsCE.net5.0嵌入式操作系統(tǒng),以使用IntelXScale270為CPUARM10嵌入式實驗箱為硬件基本,以VisualStudio和Delphi為軟件開發(fā)平臺智能家居系統(tǒng)設(shè)計與實現(xiàn)。通過詳細(xì)系統(tǒng)設(shè)計過程,開發(fā)了相應(yīng)軟件程序,涉及嵌入式操作系統(tǒng)WindowsCE5.0定制、應(yīng)用程序界面設(shè)計、程序開發(fā)和單片機(jī)系統(tǒng)底層編程。本設(shè)計融合了嵌入式系統(tǒng)、通訊、單片機(jī)、軟件開發(fā)等學(xué)科知識。系統(tǒng)測試成果表白,該系統(tǒng)設(shè)計基本滿足規(guī)定,并有一定功能擴(kuò)展空間。1緒論當(dāng)前,科學(xué)技術(shù)發(fā)展迅速,借助飛速發(fā)展網(wǎng)絡(luò)和信息技術(shù),人們可以足不出戶地縱覽全球。為了適應(yīng)信息化需求,科研機(jī)構(gòu)將智能化理念引入社區(qū)管理,并進(jìn)一步引入家庭,從而產(chǎn)生了智能家居概念。將手機(jī)通信和以太網(wǎng)通信技術(shù)引入智能家居設(shè)計,正好運用了既有良好通信條件,使在外業(yè)主能及時理解家中安全,提高業(yè)主安全感,并且通過手機(jī)實時控制家電,提高了業(yè)主生活舒服度。本文提出了基于嵌入式系統(tǒng)ARM10智能控制平臺設(shè)計,功能涉及了短信控制家電,傳感器探測非正常環(huán)境并且通過手機(jī)短信告知業(yè)主,以及以太網(wǎng)實時視頻監(jiān)控等功能。2系統(tǒng)設(shè)計方案2.1硬件總體設(shè)計框圖依照上文功能需要,設(shè)計出由ARM10為控制核心,單片機(jī)控制家電控制模塊和傳感器報警模塊,并且包括GSM通信模塊智能家居系統(tǒng),硬件構(gòu)造框圖如圖2-1所示。

SHAPE

圖2-1硬件設(shè)計框圖2.2控制核心選取智能家居控制系統(tǒng)采用如圖2-2所示XSBase270作為開發(fā)平臺,該平臺基于Intel?高性能PXA270解決器,支持WindowsCE和Linux等嵌入式操作系統(tǒng),是針對教學(xué)和實驗多功能實驗平臺。PXA270解決器最高主頻可達(dá)520MHz,且該解決器被加入了WirelessMXX技術(shù),大大提高了多媒體解決能力,并且加入了IntelSpeedStep動態(tài)電源管理技術(shù),在保證CPU性能前提下,最大限度減少設(shè)備功耗[1]。XSBase270配備32MFLASHROM,64MSDRAM,并配備了觸摸屏、以太網(wǎng)、USB、串口、CF/MMC、PCMCIA等接口。滿足了智能家居系統(tǒng)控制中心硬件規(guī)定。圖2-2XSBase270實驗箱展開圖2.3家電控制板家電控制板采用AT89C51為控制核心。擴(kuò)展板元件布局如圖2-3所示,其上有四盞LED分別模仿四種家電,三個按鈕模仿三種傳感器。其中四盞LED分別連接單片機(jī)P1.0、P1.1、P1.2、P1.3;三個按鈕分別連接P2.0、P2.1、P2.2。圖2-3家電控制模塊2.3.1串行端口電路家電控制板采用串口與XSBase270實驗箱進(jìn)行通信,其采用了典型兼容RS-232原則MAX232芯片作為串口電平轉(zhuǎn)換芯片。電路連接如圖2-4所示:圖2-4家電控制板串行接口電路如上圖所示,家電擴(kuò)展板采用是慣用DB9頭作為串口接口,其針腳定義圖如圖2-5所示:圖2-5RS-232DB9頭針腳定義圖其中2腳RxD為接受引腳,3腳TxD為發(fā)送引腳,GND為信號地引腳。普通狀況下普通串口只接這幾種引腳;特殊串口,如藍(lán)牙串口除接上述三個腳之外,還接了DSR引腳和CTS引腳,是由于藍(lán)牙串口數(shù)據(jù)流輸出采用這兩個腳信號控制;而其她引腳是跟MODEM有關(guān)。在智能家居系統(tǒng)中,家電控制板接普通串口,GSM模塊接藍(lán)牙串口。RS-232信號相對于信號地而言,在正負(fù)電平之間擺動。發(fā)送數(shù)據(jù)時,發(fā)送端輸出正電平在+5V到+15V之間,負(fù)電平在-5V和-15V之間。無數(shù)據(jù)傳播時,線上為TTL電平。接受器典型工作電平在+3V~+12V與-3V~-12V。由于發(fā)送電平和接受電平差僅為2~3V左右,因此其共模抑制能力差,加上雙絞線分布電容,信號傳播距離最大為15m,最高速率為20kb/s[2]。MAX232包括2個驅(qū)動器、2個接受器和一種電壓發(fā)生器電路,提供TIA/EIA-232-F電平。該器件符合TIA/EIA-232-F原則,每一種接受器將TIA/EIA-232-F電平轉(zhuǎn)換成5VTTL/CMOS電平。每一種發(fā)送器將TTL/CMOS電平轉(zhuǎn)換成TIA/EIA-232-F電平。圖2-6MAX232引腳圖2.3.2家電控制電路圖2-7

模仿家電控制電路家用電器控制接口電路如圖2-7所示,K1~K4為繼電器,分別控制四路家電閉合和斷開,Q1~Q4為繼電器線圈電流驅(qū)動,電路由單片機(jī)P1口進(jìn)行控制,DD1~DD4發(fā)光二極管用于顯示某路控制電路工作狀況,重要為了調(diào)試電路而設(shè)立。2.3.3傳感器接口電路圖2-8

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

西門子MC352.5視頻監(jiān)控模塊視頻采集模塊采用使用中星微(Vimicro)公司ZC0301P芯片攝像頭,ZC0301P芯片可支持USB1.1接口,硬件最高支持VGA辨別率(640×480)。在VGA模式下可達(dá)到15幀/秒速率,在CIF(352×288)和SIF(320×240)模式下可達(dá)到30幀/秒速率。它通過USB接口連接到XSBase270實驗箱。圖2-10301P攝像頭2.6總體軟件設(shè)計方案依照智能家居硬件設(shè)計方案,設(shè)計出軟件總體設(shè)計方案如圖2-11所示:圖2-11軟件設(shè)計框圖其中:、(1)家電控制系統(tǒng)和GSM網(wǎng)絡(luò)通信各自獨占一種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合同,測試環(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)軟件基于WindowsCE5.0嵌入式操作系統(tǒng)。WindowsCE被設(shè)計成一種分層構(gòu)造,從下而上一共分為了硬件層、OEM層、操作系統(tǒng)層和應(yīng)用層共四個層[3]。這種層次構(gòu)造將硬件和軟件,操作系統(tǒng)和應(yīng)用軟件隔離開,以便于實現(xiàn)系統(tǒng)移植。智能家居軟件設(shè)計重要是集中在應(yīng)用層。3操作系統(tǒng)定制WindowsCE5.0嵌入式操作系統(tǒng)定制依托PlatformBuilder5.0完畢。PlatformBuilder是微軟公司設(shè)計用于嵌入式操作平臺定制與驅(qū)動程序開發(fā)工具。推出它目之一就是讓顧客可以更好將嵌入式操作系統(tǒng)移植到特定目的平臺上。3.1BSP安裝為了讓W(xué)indowsCE5.0能在實驗箱上運營起來,還必要安裝XSBase270板級支持包(BSP)。板級支持包是介于主板和操作系統(tǒng)中驅(qū)動程序之間一層,普通以為它屬于操作系統(tǒng)一某些,重要是對操作系統(tǒng)支持,為上層驅(qū)動程序提供訪問硬件設(shè)備寄存器函數(shù)包。在PC上安裝好WindowsCE.net5.0和PlatformBuilder5.0后,打開實驗箱附帶光盤中BSP文獻(xiàn)夾,運營XSBase270_V010106.msi文獻(xiàn),安裝XSBase270BSP。如圖3-1所示。圖3-1BSP安裝程序文獻(xiàn)安裝好BSP后,進(jìn)入PlatformBuilder5.0中定制基于“EMDOORSYSTEMSXSBASE270:ARMV4I”因特網(wǎng)應(yīng)用類型系統(tǒng)鏡像設(shè)計[4]。如圖3-2所示。圖3-2

定制系統(tǒng)時選取BSP種類3.2添加平臺特性和配備平臺為了使系統(tǒng)在定制后可以滿足基本應(yīng)用,并保證對某些設(shè)備支持,就要向所設(shè)計平臺中添加必要特性。(1)添加USBActiveSync(FileSync)組件。只有添加此組件,才干使用PCUSB接口與WindowsCE進(jìn)行文獻(xiàn)同步。這也是在應(yīng)用軟件調(diào)試過程中所必要條件。(Catalog->CoreOS->WindowsCEdevices->Applications-EndUser->ActiveSync->FileSync)(2)添加Chinese[Simplified]Font。安裝中文簡體字體后,才干正常顯示中文。(Catalog->CoreOS->WindowsCEdevices->International->LocaleSpecificSupport->Chinese[Simpified]->Fonts)(3)添加文獻(xiàn)系統(tǒng)支持。(Catalog->CoreOS->WindowsCEdevices->FileSystemsandDataStore->StorageManager->FATFileSystem)(4)添加分區(qū)管理(Catalog->CoreOS->WindowsCEdevices->FileSystemsandDataStore->StorageManager->PartitionDriver)(5)添加控制面板中存儲器管理組件(Catalog->CoreOS->WindowsCEdevices->FileSystemsandDataStore->StorageManager->StorageManagerControlPanelApplet)(6)添加基于軟件輸入系統(tǒng)(軟鍵盤等)(Catalog->CoreOS->WindowsCEdevices->ShellandUserInterface->UserInterface->SoftwareInputPanel->Software-basedInputPanel(SIP)(Choose1ormore)->SIPforLargeScreens)(7)添加平臺管理器(PlatformManager)(Catalog->PlatformManager->PlatformManager)(8)添加UsbActiveSync(USBFunction)(Catalog->ThirdParty->BSPs->EmdoorSystemsXSBase270:ARMV4I->DeviceDrivers->USBFunction->USBFunctionBusDrivers->PXA27xUSBFunction)完畢特性添加后,設(shè)立平臺屬性。在“Platform”菜單下單擊“Setting”,在Configuration下拉菜單中選取“EmdoorSystemsXSBase270:ARMV4IRelease”項,選取Locale選項卡,進(jìn)行系統(tǒng)地理位置和環(huán)境語言支持設(shè)立。Locales列表中,為最下端“中文(中華人民共和國)”項打勾。在DefaultLanguage下拉菜單里選取“中文(中華人民共和國)”為系統(tǒng)默認(rèn)語言。如圖3-3所示。圖3-3選取操作系統(tǒng)默認(rèn)語言在BuildOption列表中,只選取EnableEbootSpaceinMemory(IMGEBOOT=1)和WriteRun-timeImagetoFlashMemory(IMGFLASH=1)兩項。如圖3-4所示。圖3-4程序組建選項設(shè)立單擊“BuildOS”菜單下“Sysgen”開始組建操作系統(tǒng)。如圖3-5所示:圖3-5生成操作系統(tǒng)鏡像3.3紅外串口與藍(lán)牙串口打開經(jīng)測試,在默認(rèn)配備下生成系統(tǒng)鏡像,只打開了位于XSBase270模塊板上全功能調(diào)試串口,而位于接口擴(kuò)展板上紅外串口和藍(lán)牙串口并沒有被打開。為了可以與家電控制板和GSM模塊連接,實現(xiàn)完整智能家居系統(tǒng)功能,必要將它們打開。(1)查找中斷號中斷號定義是在實驗箱所提供板級支持包中被配備。打開C:\WINCE500\Platform\XSBase270\Src\inc\bsp_cfg.h文獻(xiàn)。可以看到調(diào)試串口和通信串口中斷號定義,如圖3-6所示。圖3-6

BSP中串口中斷定義可以看到調(diào)試串口BFUART中斷號是28,轉(zhuǎn)化為16進(jìn)制為0x1c;通信串口SFUART中斷號27,轉(zhuǎn)換為16進(jìn)制是0x1b。(2)修改注冊表打開如下文獻(xiàn)夾,其中“F:\platform\270\”是在新建操作系統(tǒng)平臺時所存儲它磁盤位置。F:\Platform\270\RelDir\XSBase270_ARMV4I_Release\打開platform.reg注冊表文獻(xiàn),在此文獻(xiàn)中包括了對某些硬件初始化代碼。在“IFBSP_NOSERIAL!”與“ENDBSP_NOSERIAL!”兩句代碼之間,可以看到藍(lán)牙串口注冊表初始化代碼,下面只需要添加初始化紅外串口代碼:;OpentheIRSerialPort[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\SerialIR]

"Irq"=dword:14

;20IRQ_STUART

"SysIntr"=dword:1b

;27SYSINTR_SFUART

"MemBase"=dword:40700000

;STUARTRegister

"MemLen"=dword:40

"DeviceArrayIndex"=dword:82

;STUARTobject

"Prefix"="COM"

"Index"=dword:3

"Order"=dword:1

"IClass"="{CC5195AC-BA49-48a0-BE17-DF6D1B0173DD}"

;

"Dll"="ms2_serial.dll"[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\SerialIR\Unimodem]

"Tsp"="Unimodem.dll"

"DeviceType"=dword:0

"FriendlyName"="IRSerialCableonCOM3:"

"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文獻(xiàn)。打開剛才建立操作系統(tǒng)設(shè)計工程,選取BuildOS菜單下MakeRun-TimeImage命令,生成新內(nèi)核文獻(xiàn)NK.bin。3.4操作系統(tǒng)生成與下載定制并組建WindowsCE后,將會生成BootLoader——EBOOT.nb0文獻(xiàn)和NK內(nèi)核——nk.bin,將它們燒寫進(jìn)入XSBase270實驗箱。4應(yīng)用軟件設(shè)計4.1應(yīng)用程序編寫環(huán)境開發(fā)環(huán)境:MicrosoftVisualStudio開發(fā)語言:MicrosoftVisualC++軟件開發(fā)包:XSBase270SDK智能家居系統(tǒng)應(yīng)用程序采用VisualStudio進(jìn)行開發(fā)。VisualStudio是微軟公司開發(fā)Windows平臺上應(yīng)用程序開發(fā)環(huán)境。VisualStudio可以創(chuàng)立Windows下Windows應(yīng)用程序和網(wǎng)絡(luò)應(yīng)用程序,也可以用來創(chuàng)立網(wǎng)絡(luò)服務(wù)、智能設(shè)備應(yīng)用程序和Office插件[5]。VisualStudio面向.net框架(2.0版本),同步可以開發(fā)跨平臺應(yīng)用程序。圖4-1VisualStudio4.2智能家居人機(jī)接口設(shè)計打開VisualStudio,創(chuàng)立一種基于MFCSmartDeviceApplicationVC++程序。如圖4-2所示:圖4-2新建智能家居應(yīng)用程序到選取平臺環(huán)節(jié)時選取XSBase270平臺,刪除默認(rèn)PocketPC平臺。如圖4-3所示。圖4-3選取軟件開發(fā)包支持單擊“Next”按鈕進(jìn)入選取應(yīng)用程序類型和資源語言——程序界面上采用語言畫面。如圖4-4所示,選取“Dialogbased”(基于對話框)類型,資源語言選取“中文(中華人民共和國)”。其她項目保存默認(rèn)選項。圖4-4選取應(yīng)用程序種類保持默認(rèn)設(shè)立,始終到完畢新建項目向?qū)?。進(jìn)入IDE環(huán)境。集成環(huán)境窗口分布如圖4-5所示:圖4-5VisualStudio集成環(huán)境將對話框設(shè)計成如圖4-6所示:圖4-6

智能家居操作界面設(shè)計表4-1智能家居應(yīng)用軟件界面控件配備控件類型控件名稱功能按鈕控件初始化GSM初始化GSM模塊開始攝像打開攝像頭,開始視頻捕獲停止攝像停止攝像頭視頻捕獲開始監(jiān)聽打開ARM9000號端口,打開網(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顯示系統(tǒng)運營狀況4.3串口通信功能設(shè)計4.3.1串口通信合同串口通信合同采用CCESeries類實現(xiàn),通過對此類成員函數(shù)調(diào)用,完畢對串口初始化、讀寫操作等,在不用串口狀況下,還可以關(guān)閉串口。4.3.2軟件實現(xiàn)在VisualStudio解決方案視圖里添加類CCESeries,如圖4-7所示。CCESeries類成員函數(shù)如表4-2所示。圖4-7在VS中建立CCESeries類表4-2串口操作類CCESeries成員函數(shù)函數(shù)作用函數(shù)名稱打開串口BOOLOpenPort(HWNDpPortOwner,UINTportNo

=1,UINTbaud=9600,UINTparity=NOPARITY,UINTdatabits=8,UINTstopbits=0);關(guān)閉串口VoidClosePort();設(shè)立串口超時BOOLSetSeriesTimeouts(COMMTIMEOUTSCommTimeOuts);讀串口線程Static

DWORDWINAPIReadThreadFunc(LPVOIDlparam);寫串口BOOLWritePort(LPCTSTRlpString);BOOLWritePort(char*buf,intnSize);BOOLWritePort(char*buf);關(guān)閉讀線程VoidCloseReadThread();表4-3串口操作類CCESeries成員變量變量類型變量名稱作用HANDLEm_hComm已打開串口句柄HWNDm_hWnd此串口類所屬窗口句柄HANDLEm_hReadThread讀串口線程句柄HANDLEm_hWriteThread寫串口線程句柄DWORDm_dwReadThreadID讀串口線程IDDWORDm_dwWriteThreadID寫串口線程IDHANDLEm_hReadCloseEvent讀串口線程退出事件HANDLEm_hWriteCloseEvent寫串口線程退出事件打開串口與配備串口在WindowsCE中,驅(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ù)字表達(dá),對于串口而言,這三位字符是“COM”(不涉及引號)。當(dāng)引用一種流接口驅(qū)動程序時,除了三位字符后跟一位數(shù)字以外,還要緊跟一種冒號“:”(英文半角冒號),冒號是必須,是為了區(qū)別桌面Windows設(shè)備驅(qū)動程序命名規(guī)則。該函數(shù)流程圖如圖4-8所示:圖4-8OpenPort函數(shù)流程圖(1)串口打開所有流驅(qū)動程序都將采用CreateFile函數(shù)打開串口設(shè)備。在WindowsCE下,系統(tǒng)不支持設(shè)備重疊I/O,因此不能在參數(shù)dwFlagsAndAttributes中傳遞FILE_FLAG_OVERLAPPED標(biāo)志,返回句柄要么是已打開串口端口句柄,或者是INVAILID_HANDLE_VALUE。CreateFile與大多數(shù)Windows函數(shù)不同樣,打開失敗時,不返回0。CreateFile函數(shù)原型如下:HANDLECreateFile(LPCTSTRlpFileName,

//對象途徑名DWORDdwDesiredAccess,

//控制模式DWORDdwShareMode,

//共享模式LPSECURITY_ATTRIBUTESlpSecurityAttributes,

//安全屬性(也即銷毀方式)DWORDdwCreationDisposition,

//創(chuàng)立方式DWORDdwFlagsAndAttributes,

//對象屬性HANDLEhTemplateFile

//一種文獻(xiàn)模板句柄);在CCESeries類中,HANDLE類型全局變量m_hComm存儲CreateFile函數(shù)打開串口成功時返回值,憑借此句柄可以控制打開串口對象;以讀寫方式打開串口。(2)串口設(shè)立打開串口后,還必要對端口配備好對的波特率、字符長度、停止位等等。在OpenPort函數(shù)中,使用兩個函數(shù)GetCommState和SetCommState來配備串口。函數(shù)原型如下:BOOLSetCommState(HANDLEhRle,LPDCBlpDCB);BOOLGetCommState(HANDLEhFile,LPDCBlpDCB);這兩個函數(shù)都包括了同樣參數(shù),即已打開串口句柄和指向DCB構(gòu)造指針。DCB構(gòu)造設(shè)立如表4-4所示。表4-4

OpenPort函數(shù)中串口DCB配備DCB定義項目設(shè)立值備注BaudRateBaud設(shè)立波特率為傳入型參baud值fBinaryTRUE二進(jìn)制模式有效fParityTRUE支持奇偶校驗ByteSizeDatabits設(shè)立數(shù)據(jù)位為傳入型參databits,范疇4~8ParityNOPARITY校驗?zāi)J接行topBitsStopbits設(shè)立停止位為傳入型參stopbitsfOutxCtsFlowTRUE串口輸出由端口CTS線控制fOutxDsrFlowTRUE串口輸出由端口DSR線控制fDtrSensitivityDTR_CONTROL_ENABLE續(xù)表4-4

OpenPort函數(shù)中串口DCB配備DCB定義項目設(shè)立值備注fDsrSensitivityFALSEfTXContinueOnXoffTRUE串口接受緩沖區(qū)已滿時,且驅(qū)動程序已傳送了XOFF字符,則驅(qū)動程序停止傳送字符fOutXFALSEXON/XOFF控制不用于控制串行輸出fInXFALSEXON/XOFF控制不為輸入串行流使用fErrorCharFALSEfNullFALSE串行驅(qū)動不忽視接受到空字節(jié)fRtsControlRTS_CONTROL_ENABLEfAbortOnErrorFALSE串口發(fā)生錯誤時,并不終結(jié)串口讀寫(3)串口超時設(shè)立設(shè)立好串口驅(qū)動操作配備后,一種必要環(huán)節(jié)是,設(shè)立端口超時值。所謂超時,是指WindowsCE.net在讀串口和寫串口自動返回前等待讀或?qū)懖僮鲿r間長度。在程序中,用如下兩個函數(shù)控制串行超時。BOOLGetCommTimeouts(HANDLEhFile,LPCOMMTIMEOUTSlpCommTimeouts);BOOLSetCommTimeouts(HANDLEhFile,LPCOMMTIMEOUTSlpCommTimeouts);這兩個函數(shù)都包括了相應(yīng)串行設(shè)備句柄和COMMTIMEOUTS構(gòu)造指針,COMMTIMEOUTS構(gòu)造定義為:typedefstruct_COMMTIMEOUTS{DWORDReadIntervalTimeout;DWORDReadTotalTimeoutMultiplier;DWORDReadTotalTimeoutConstant;DWRODWriteTotalTimeoutMultiplier;DWORDWriteTotalTimeoutConstant;}COMMTIMEOUTS;(4)其她函數(shù)設(shè)立串口輸入輸出緩沖區(qū)。原型如下BOOLSetupComm(HANDLEhFile,DWORDdwInQueue,DWORDdwOutQueue);設(shè)立串口檢測事件集。SetCommMask(HANDLEhFile,DWORDdwEvtMask);通過這個函數(shù),可以使線程等待如表4-5中常用串口驅(qū)動程序事件。表4-5

串口驅(qū)動程序事件事件標(biāo)志表達(dá)意義EV_BREAK檢測到中斷EV_CTSCTS更改狀態(tài)EV_DSRDataSetReady信號更改狀態(tài)EV_ERR串行驅(qū)動程序檢測到錯誤EV_RKSDReceiveLineSignalDetect行更改狀態(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ù):BOOLTerminateThread(HANDLEhThread,DWORDdwExitCode);其中,hThread為要關(guān)閉線程句柄。dwExitCode普通為0。若成功關(guān)閉,則返回一種非零值。關(guān)閉串口函數(shù)工作流程如圖4-9所示。

SHAPE

圖4-9

ClosePort函數(shù)流程圖串口讀線程讀串口ReadFile函數(shù)原形:BOOLReadFile(HANDLEhFile,

//文獻(xiàn)句柄LPVOIDlpBuffer,

//用于保存讀入數(shù)據(jù)一種緩沖區(qū)DWORDnNumberOfBytesToRead,

//要讀入字符數(shù)LPDWORDlpNumberOfBytesRead,//從文獻(xiàn)中實際讀入字符數(shù)LPOVERLAPPEDlpOverlapped

//異步讀取描述,在WindowsCE中為NULL);在該線程中,若串口讀完一條信息,則發(fā)送一種系統(tǒng)消息到系統(tǒng)窗體,該消息名稱為WM_RXCHAR_ALL,是一種顧客自定義消息。發(fā)送給系統(tǒng)窗體附帶消息包括收到消息內(nèi)容和消息長度。發(fā)送系統(tǒng)消息API函數(shù)SendMessage原型如下:LRESULTSendMessage(HWNDhWnd,UINTMsg,WPARAMwParam,LPARAMIParam);圖4-10串口讀線程流程圖寫串口在CCESeries類中,一共編寫了三個寫串口函數(shù),為是以便不同狀況下調(diào)用。如要向?qū)懸阎L度字符串,可以采用WritePort(char*buf,intnSize)函數(shù)。寫未知長度字符串時,采用WritePort(char*buf)函數(shù),字符串長度將在函數(shù)內(nèi)部進(jìn)行計算。前者提高了寫串口時間效率。這三個函數(shù)中,采用了一種共同API函數(shù)WriteFile(),它函數(shù)原型如下:BOOL

WriteFile(HANDLEhFile,

//文獻(xiàn)句柄LPCVOIDlpBuffer,

//數(shù)據(jù)緩存區(qū)指針DWORDnNumberOfBytesToWrite,

//要寫字節(jié)數(shù)LPDWORDlpNumberOfBytesWritten,//用于保存實際寫入字節(jié)數(shù)存儲區(qū)域指針LPOVERLAPPEDlpOverlapped

//OVERLAPPED構(gòu)造體指針,CE里設(shè)為NULL);串口類調(diào)用在主程序中,必要調(diào)用此CCESeries類,以達(dá)到操作串口目。在定義智能家居窗口行為CSmartHomeDlg類頭文獻(xiàn)CSmartHomeDlg.h文獻(xiàn)中,添加CCESeries.h頭文獻(xiàn)。并且新建一種public公共型變量m_BTSerial(藍(lán)牙串口)和m_IRSeries進(jìn)行對CCESeries類實例化。CCESeriesm_BTSerial;CCESeriesm_IRSerial;在用于CSmartHomeDlg類成員函數(shù)定義文獻(xiàn)CSmartHomeDlg.cpp文獻(xiàn)中,采用形如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文獻(xiàn)中,添加一條消息響應(yīng)聲明:ON_MESSAGE(WM_RXCHAR_ALL,OnComRecvMsg)其中OnComRecvMsg為對其消息響應(yīng)函數(shù),函數(shù)聲明如下:afx_msglongOnComRecvMsg(WPARAMwParam,LPARAMlParam);其中“afx_msg”闡明該函數(shù)是一消息響應(yīng)函數(shù)。4.4GSM通信模塊

智能家居以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ā)到當(dāng)前,對短信息控制方式包括了BlockMode、基于ATTextMode基于AT指令PDUMode。使用Block模式需要廠家驅(qū)動支持,隨著技術(shù)發(fā)展,后兩種模式將其取代。Text模式比較簡樸,但不能發(fā)送中文短信息。在智能家居軟件設(shè)計中,采用是基于PDU模式,該模式支持各個國家語言,固然也涉及中文。在智能家居中,采用中文報警和中文指令。PDU數(shù)據(jù)包格式,是手機(jī)發(fā)送短信一種數(shù)據(jù)單位[7]。其中發(fā)送源手機(jī)號碼、短消息服務(wù)中心號碼(SMSC)、時間戳等都是用壓縮BCD碼表達(dá),低位在前,高位在后。在PDU模式中,可采用Bit7、Bit8和UCS2編碼方式對短消息發(fā)送內(nèi)容進(jìn)行編碼。這三種編碼方式可以發(fā)送最大字符數(shù)分別為160,140和70。其中Bit7編碼發(fā)送普通ASCII字符,從0x00到0x7f,共可以表達(dá)128個字符。而短消息報文是以8位字節(jié)傳播,因此就必要把8位碼壓縮成7位碼。實現(xiàn)辦法是:將第二個字符最后一位,補充到第一種字符前面第一位,第三個字符后兩位,補充到第二個字符前兩位,依次類推,就可得到相應(yīng)字符串。最后轉(zhuǎn)換成十六進(jìn)制。Bit8編碼通慣用于發(fā)送任何二進(jìn)制數(shù)據(jù)。UCS2編碼用于發(fā)送Unicode字符。它固定使用16位共兩個字節(jié)來表達(dá)一種字符,共可以表達(dá)65535個字符。圖4-11和圖4-12分別是接受和發(fā)送短信報文格式。圖4-11接受短信報文格式圖4-12發(fā)送短消息報文格式實例一、發(fā)送短信時PDU碼:0891683108200105F011000B913158812764F800000006C8329BFD0E01表4-6發(fā)送PDU包解析分段含義闡明08SMSC地址信息長度共8個八位字節(jié)(涉及91)91SMSC地址格式(TON/NPI)用國際格式號碼(在前面加‘+’)683108200105F0SMSC地址86,補‘F’湊成偶數(shù)個11基本參數(shù)(TP-MTI/VFP)發(fā)送,TP-VF用相對格式00消息基準(zhǔn)值(TP-MR)00B目的地址數(shù)字個數(shù)共11位,不涉及補足‘F’91目的地址格式(TON/NPI)用國際格式號碼(在前面加‘+’)683118483146F9目的地址(TP-DA)86,補‘F’湊成偶數(shù)個00合同標(biāo)記(TP-PID)是普通GSM類型,點到點方式00顧客信息編碼方式(TP-DCS)7-bit編碼00有效期(TP-VP)5分鐘06顧客信息長度(TP-UDL)實際長度6個字節(jié)C8329BFD0E01顧客信息(TP-UD)“Hello!”結(jié)合發(fā)送短信報文格式,懂得短消息中心號碼是:+86,對方號碼是:,消息內(nèi)容是“Hello!”。實例二、接受短信時PDU碼0891683108200105F0840D91683158812764F8000830

30218063548006534E4E1C0021表4-7接受短消息PDU包解析分段含義闡明08SMSC地址信息長度共8個八位字節(jié)(涉及91)91SMSC地址格式(TON/NPI)用國際格式號碼(在前面加‘+’)683108200505F0SMSC地址86,補‘F’湊成偶數(shù)位84基本參數(shù)(TP-MTI/MMS/RP)接受,無更多消息,有回答地址0B回答地址數(shù)字個數(shù)共11個十進(jìn)制數(shù)(不涉及‘F’)91回答地址格式(TON/NPI)用國際格式號碼(在前面加‘+’)683158812764F8回答地址(TP-RA)86,補‘F’湊成偶數(shù)位00合同標(biāo)記(TP-PID)是普通GSM類型,點到點方式08顧客信息編碼方(TP-DCS)UCS2編碼30302180635480時間戳(TP-SCTS)-3-1208:36:45

+8時區(qū)06顧客信息長度(TP-UDL)實際長度6個字節(jié)534E4E1C0021顧客信息(TP-UD)“華東!”短消息中心號碼是:+86,對方號碼是,消息內(nèi)容是“華東!”。AT指令在智能家居中,控制中心通過串口給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,"",[id][content]AT+CMGD=?刪除短消息4.4.2軟件實現(xiàn)PDU編碼解碼短信PDU解碼和編碼功能由智能家居軟件工程中CEncode類實現(xiàn)。CEncode類成員函數(shù)如表4-9所示:表4-9CEncode類辦法辦法備注IntgsmString2Bytes(constchar*pSrc,unsignedchar*pDst,intnSrcLength)可打印字符串轉(zhuǎn)換為字節(jié)數(shù)據(jù)如:"C8329BFD0E01"-->{0xC8,0x32,0x9B,0xFD,0x0E,0x01}int

gsmBytes2String(constunsignedchar*pSrc,char*pDst,intnSrcLength)字節(jié)數(shù)據(jù)轉(zhuǎn)換為可打印字符串如:{0xC8,0x32,0x9B,0xFD,0x0E,0x01}-->"C8329BFD0E01"intgsmEncode7bit(constchar*pSrc,unsignedchar*pDst,intnSrcLength)7bit編碼intgsmDecode7bit(constunsignedchar*pSrc,char*pDst,intnSrcLength)7bit解碼intgsmEncode8bit(constchar*pSrc,unsignedchar*pDst,intnSrcLength)8bit編碼intgsmDecode8bit(constunsignedchar*pSrc,char*pDst,intnSrcLength)8bit解碼intgsmEncodeUcs2(constchar*pSrc,unsignedchar*pDst,intnSrcLength)UCS2編碼intgsmDecodeUcs2(constunsignedchar*pSrc,char*pDst,intnSrcLength)UCS2解碼intgsmInvertNumbers(constchar*pSrc,char*pDst,intnSrcLength)正常順序字符串轉(zhuǎn)換為兩兩顛倒字符串,若長度為奇數(shù),補'F'湊成偶數(shù)。如:"86"-->"F8"intgsmSerializeNumbers(constchar*pSrc,char*pDst,intnSrcLength)兩兩顛倒字符串轉(zhuǎn)換為正常順序字符串。如:"F8"-->"86"IntgsmDecodePdu(constchar*pSrc,SM_PARAM*pDst)PDU解碼,用于接受、閱讀短消息intgsmEncodePdu(constSM_PARAM*pSrc,char*pDst)PDU編碼,用于編制、發(fā)送短消息

在該類中,核心函數(shù)為gsmDecodePdu函數(shù)與gsmEncodePdu函數(shù),它們將在智能家居中對話框類CSmartHomeDlg中被調(diào)用。調(diào)用辦法將在下文予以簡介。gsmDecodePdu函數(shù)與gsmEncodePdu函數(shù)分別用來在發(fā)短信時依照PDU規(guī)范進(jìn)行編碼,以及對串口收到PDU編碼進(jìn)行解碼。編碼與解碼依照在頭文獻(xiàn)中定義短消息構(gòu)造體進(jìn)行取值或填充。如下是定義關(guān)于編碼方式常量和填充短消息數(shù)據(jù)構(gòu)造。這些在接受與發(fā)送短信時是共用。#defineGSM_7BIT

0

//7Bit編碼方式#defineGSM_8BIT

4

//8Bit編碼方式#defineGSM_UCS2

8

//UCS2編碼方式typedefstruct{

charSCA[16];

//短消息服務(wù)中心號碼(SMSC地址)

charTPA[16];

//目的號碼或回答號碼(TP-DA或TP-RA)

charTP_PID;

//顧客信息合同標(biāo)記(TP-PID)

charTP_DCS;

//顧客信息編碼方式(TP-DCS)

charTP_SCTS[16];

//服務(wù)時間戳字符串(TP_SCTS),接受時用到

charTP_UD[161];

//原始顧客信息(編碼前或解碼后TP-UD)

charindex;

//短消息序號,在讀取時用到}SM_PARAM;CEncode類各成員函數(shù)作用和工作流程:gsmDecodePdu()函數(shù)用于接受、閱讀短消息。輸入源PDU串指針,目的PDU參數(shù)指針,并返回顧客信息長度。源PDU串是可打印字符串,如“C8329BFD0E01”,目的PDU參數(shù)是字節(jié)數(shù)據(jù),如“{0xC8,0x32,0x9B,0xFD,0x0E,0x01}”,在這個函數(shù)中,較多采用了同在一種類中可打印字符串轉(zhuǎn)換為字節(jié)數(shù)據(jù)函數(shù)gsmString2Bytes;在短消息服務(wù)中心(SMSC)和回答號碼字符解決過程中,依照PDU串編碼規(guī)范,需要對描述SMSC字符串段進(jìn)行兩兩顛倒,并且去掉經(jīng)顛倒后字符串后最后一種字符——“F”,那就采用了同在一種類中g(shù)smSerializeNumbers函數(shù);通過數(shù)據(jù)分離,將PDU串中描述短信編碼位TP-DCS跟規(guī)定數(shù)值進(jìn)行對比,如表達(dá)7位碼數(shù)值為0,8位碼為4,UCS2編碼為8等。對比完畢后,將顧客信息進(jìn)行相應(yīng)方式解碼——如7位解碼。它工作流程如圖4-13所示。

SHAPE

圖4-13

CEncode類gsmDecodePdu函數(shù)工作流程gsmEncodePdu()函數(shù)用于編制、發(fā)送短消息,輸入源PDU參數(shù)指針,輸出目的PDU串指針,并返回目的PDU串長度。源PDU參數(shù)是字節(jié)信息,如“{0xC8,0x32,0x9B,0xFD,0x0E,0x01},目的PDU參數(shù)是字節(jié)數(shù)據(jù),如“C8329BFD0E01”,在這個函數(shù)中,較多采用了同在一種類中字節(jié)數(shù)據(jù)轉(zhuǎn)換為可打印字符串函數(shù)gsmBytes2String;在短消息服務(wù)中心(SMSC)和回答號碼字符解決過程中,依照PDU串編碼規(guī)范,需要對描述SMSC號碼進(jìn)行兩兩顛倒,并且在經(jīng)顛倒后字符串后加上一種字符——“F”,那就采用了同在一種類中g(shù)smInvertNumbers函數(shù);依照描述短信編碼TP-DCS跟規(guī)定數(shù)值進(jìn)行對比,如表達(dá)7位碼數(shù)值為0,8位碼為4,UCS2編碼為8等。對比完畢后,將顧客信息進(jìn)行相應(yīng)方式編碼——如7位編碼。它工作流程如圖4-14所示。

SHAPE

圖4-14

CEncode類gsmEncodePdu函數(shù)工作流程gsmString2Bytes函數(shù)作用是將可打印字符串轉(zhuǎn)換為字節(jié)數(shù)據(jù),如"C8329BFD0E01"-->{0xC8,0x32,0x9B,0xFD,0x0E,0x01},輸入源字符串指針和輸出源字符串長度,輸出目的數(shù)據(jù)指針,返回目的數(shù)據(jù)長度。流程圖如圖4-15所示:

SHAPE

圖4-15

gsmString2Bytes函數(shù)工作流程其中每兩個字符串要整合成一種字節(jié)數(shù)據(jù),如“C8”要轉(zhuǎn)化為“0xC8”,故第一種字符“C”經(jīng)字符轉(zhuǎn)化為十六進(jìn)制后要左移四位,使其成為“0xC0”,再與通過轉(zhuǎn)換低四位進(jìn)行相或;然后計數(shù)器加2,源字符串和目的數(shù)據(jù)指針往后移一種單位,繼續(xù)解決下面字符,直到計數(shù)器值大小等于要解決源字符串長度,則將解決好數(shù)據(jù)輸出。字符轉(zhuǎn)化為十六進(jìn)制原理是:數(shù)字字符與0字符相減,得到它們ASCII碼之差,這個差就是這個字符所要表達(dá)數(shù)字大小,如字符‘8’就轉(zhuǎn)換成了數(shù)字類型8,用二進(jìn)制表達(dá)就是1000。而A、B、C、D、E、F等字符是與‘A’ASCII碼值相減,再加上10,就可以得到其表達(dá)十六進(jìn)制數(shù)值。如‘F’減去‘A’得到5,再加10,得到15,實質(zhì)上就是十六進(jìn)制中F所相應(yīng)十進(jìn)制數(shù)15。gsmBytes2String函數(shù)功能與gsmString2Bytes函數(shù)相反,工作流程如圖4-16所示。

SHAPE

圖4-16

gsmBytes2String函數(shù)工作流程其中低四位是每個字節(jié)數(shù)據(jù)與0x0f位與得到。每四位表達(dá)數(shù)值為0~15,而在tab數(shù)組中,從tab[0]到tab[15],相應(yīng)字符為‘0’到‘9’和‘A’到‘F’,通過此算法可以達(dá)到由數(shù)值型到字符型轉(zhuǎn)換,最后完畢整條字節(jié)數(shù)據(jù)到字符串轉(zhuǎn)換。gsmEncode7bit函數(shù)作用是7bit編碼。輸入源字符串指針和源字符串長度,輸出目的字符串指針和目的編碼串長度。工作流程圖如圖4-17所示。

SHAPE

圖4-17

gsmEncode7bit函數(shù)流程gsmDecode7bit函數(shù)用于7位碼解碼,輸入源編碼串指針和源編碼串長度,輸出目的字符串指針和目的字符串長度。流程圖如圖4-8所示:

SHAPE

圖4-18

gsmDecode7bit函數(shù)工作流程gsmEncode8bit函數(shù)用于8位碼編碼,由于計算機(jī)采用也是8位碼,源編碼串和目的字符串是一致,因此其編碼工作用memcpy函數(shù)簡樸復(fù)制即可完畢。gsmDecode8bit函數(shù)用于8位碼解碼,與gsmEncode8bit同樣只需要采用簡樸復(fù)制即可,區(qū)別在于在目的字符串末尾加一種“\0”結(jié)束字符。gsmEncodeUcs2函數(shù)用于UCS2編碼,依照PDU編碼規(guī)則,UCS2碼采用是16位雙字節(jié)編碼方式。工作方式如圖4-19所示。

SHAPE

圖4-19

gsmEncodeUsc2函數(shù)工作流程gsmDecodeUsc2函數(shù)用于UCS2碼解碼。它工作流程如圖4-20所示:

SHAPE

圖4-20

gsmDecodeUcs2函數(shù)工作流程gsmEncodeUcs2函數(shù)和gsmDecodeUcs2函數(shù)分別用了作用相反兩個API函數(shù)——MultiByteToWideChar和WideCharToMultiByte函數(shù)。它們作用分別為將短字符(用8位數(shù)據(jù)表達(dá)字符)轉(zhuǎn)換為寬字符(16位數(shù)據(jù)表達(dá)字符,如Unicode編碼),和將寬字符轉(zhuǎn)換為短字符。gsmInvertNumbers函數(shù)作用是將形如“86”這樣字符串兩兩顛倒成“F8”,其中源字符串長度為奇數(shù)時,補字符‘F’湊成偶數(shù)。流程圖如圖4-21所示。

SHAPE

圖4-21gsmInvertNumbers函數(shù)工作流程收發(fā)短信(1)監(jiān)聽新短信GSM模塊連接在串口上,對短信監(jiān)聽實質(zhì)上是對串口監(jiān)聽。詳細(xì)新短消息監(jiān)聽流程如圖4-22所示:圖4-22

新消息監(jiān)聽流程其中:1)AT+CMGF=0——設(shè)立短消息內(nèi)容控制模式為PDU模式2)AT+CNMI=1,1,0,1,1——設(shè)立短消息到達(dá)自動提示功能。3)AT+CMGR=[index],其中index是短消息在SIM卡中地址。如果讀取成功,既相應(yīng)地址中存在信息,則返回CMGR:0,"",[id][content],當(dāng)人工選取讀信息時候,也可以采用此語法,只要將index值改成短消息在SIM卡中地址即可。若短消息不存在,則返回ERROR。(2)發(fā)送短消息在發(fā)送短信之前,要對數(shù)據(jù)構(gòu)造體SM_PARAM進(jìn)行數(shù)據(jù)填充。其中短消息服務(wù)中心和目的號碼格式是不包括加號卻包括國家代碼國際原則格式號碼,如86。在數(shù)據(jù)填充之前要將這些號碼文本進(jìn)行解決。在CSmartHomeDlg類中,必要對短信編碼解碼類CEncode和SM_PARAM構(gòu)造體進(jìn)行實例化。CEncodem_encode;SM_PARAMparam;在填充好機(jī)構(gòu)體后來,用下面一句nPduLength=m_encode.gsmEncodePdu(¶m,pdu);對短消息構(gòu)造體進(jìn)行PDU編碼,編碼成果放入pdu數(shù)組中,PDU長度返回到nPduLength。流程圖如圖4-23所示:

SHAPE

圖4-23

發(fā)送短信流程4.5圖象采集模塊中星微攝像頭采用了中星微301PLUS迅速主控芯片。該芯片是一款高性能圖像壓縮芯片,輸出MIPEG視頻流數(shù)據(jù)。MIPEG(MotionJPEG)重要是基于靜態(tài)視頻壓縮發(fā)展起來技術(shù),特點是基本不考慮視頻流中不同幀之間變化,只單獨對某一幀進(jìn)行壓縮,普通可達(dá)到6:1壓縮率。它誤差穩(wěn)定性非常好,可以獲取清晰度很高視頻圖像,并且還可以靈活設(shè)立各路視頻清晰度,壓縮幀數(shù)。4.5.1攝像頭驅(qū)動程序該攝像頭官方提供了其在WindowsCE環(huán)境下驅(qū)動程序zc030x.dll和在VC下對其編程lib庫文獻(xiàn)zc030xlib.lib。只要在智能家居工程屬性中,將其提供lib庫文獻(xiàn)導(dǎo)入即可使用它提供某些函數(shù)。環(huán)節(jié):Project菜單->SmartHomeProperties,選取左邊列表ConfigurationProperties->Linker->Input導(dǎo)入lib庫文獻(xiàn)操作截圖如圖4-24所示:圖4-24在VS中添加lib庫文獻(xiàn)圖像采集模塊用到重要函數(shù)有:capInitCamera()用來初始化視頻設(shè)備,并獲取當(dāng)前可用視頻設(shè)備數(shù)目;capSetVideoFormat()設(shè)立視頻格式和辨別率。本系統(tǒng)使用視頻格式為RGB24,辨別率為320×240像素;capGetPicture()獲取攝像頭近來捕獲一幅位圖,存入指定緩存中capCloseCamera()關(guān)閉視頻設(shè)備4.5.2視頻捕獲和視頻信息傳送攝像頭工作流程通過了初始化攝像頭和捕獲視頻和關(guān)閉攝像頭等流程,詳細(xì)流程如圖4-25所示:

SHAPE

圖4-25攝像頭工作流程其中設(shè)立視頻格式、捕獲圖象和發(fā)送圖象等環(huán)節(jié)位于線程CaptureThreadProc中,該線程在點擊智能家居系統(tǒng)應(yīng)用程序界面上“打開攝像頭”按鈕后創(chuàng)立,在點擊“關(guān)閉攝像頭”后關(guān)閉。視頻數(shù)據(jù)分包發(fā)送在視頻監(jiān)控功能中是核心一種環(huán)節(jié)。在這個環(huán)節(jié)里,系統(tǒng)將攝像頭采集到視頻數(shù)據(jù)存儲在一種暫時數(shù)組中,通過對這個暫時數(shù)組數(shù)據(jù)分割,完畢數(shù)據(jù)分包存儲。在系統(tǒng)中,每個視頻數(shù)據(jù)包大小為1440字節(jié)。在系統(tǒng)運營測試中,通過斷點調(diào)試方式,懂得攝像頭通過capGetPicture()函數(shù)獲取到一幀圖象信息大小大概在4000字節(jié)到5000字節(jié)之間,因此持續(xù)發(fā)送四個到五個數(shù)據(jù)包即可將一幅畫面數(shù)據(jù)發(fā)送到客戶端。4.6以太網(wǎng)通信模塊在智能家居中,嵌入式平臺充當(dāng)服務(wù)器角色,相應(yīng)PC視頻監(jiān)控端充當(dāng)客戶端角色。服務(wù)器端與客戶端之間通信基于TCP/IP合同。4.6.1TCP/IP合同Internet上使用一種核心底層合同是網(wǎng)際合同,普通稱IP合同。通過這個共同遵守合同,可以使Internet成為可以連接不同層次計算機(jī)網(wǎng)絡(luò)。IP合同是TCP/IP合同心臟,是計算機(jī)網(wǎng)絡(luò)層中最重要合同,IP合同用來協(xié)助數(shù)據(jù)找到通往目計算機(jī)途徑[8]。IP層接受從網(wǎng)絡(luò)接口層發(fā)送過來數(shù)據(jù)包,并把該數(shù)據(jù)包發(fā)送到更高層——TCP層;相反,IP層也將從TCP層發(fā)送過來數(shù)據(jù)包發(fā)送到接口層——網(wǎng)絡(luò)層更低層。而IP數(shù)據(jù)包是不可靠,由于IP合同并沒有做任何事情來確認(rèn)數(shù)據(jù)包順序和它完整性。IP數(shù)據(jù)包中包括了發(fā)送數(shù)據(jù)包計算機(jī)IP地址(源地址)和接受數(shù)據(jù)包計算機(jī)IP地址(目的地址)。TCP合同重要是對IP數(shù)據(jù)包中被封裝好TCP數(shù)據(jù)包進(jìn)行排序和錯誤檢查。TCP數(shù)據(jù)包涉及序號與確認(rèn),依照這些信息可以將未通過對的排序數(shù)據(jù)包進(jìn)行排序,損壞包按規(guī)定進(jìn)行重傳。解決完后來將數(shù)據(jù)發(fā)送給更高層應(yīng)用程序。應(yīng)用程序輪流將信息發(fā)給TCP層,TCP層將數(shù)據(jù)發(fā)送給IP層,最后通過設(shè)備驅(qū)動和物理介質(zhì)(網(wǎng)線)等發(fā)送到目的計算機(jī)。如圖4-26所示。應(yīng)用層合同(HTTP、FTP等)傳播控制合同TCP網(wǎng)間合同IP以太網(wǎng)驅(qū)動程序硬件以太網(wǎng)接口圖4-26IP層與以太網(wǎng)驅(qū)動器以及TCP層、應(yīng)用程序?qū)油ㄐ?.6.2軟件實現(xiàn)所有TCP通信都發(fā)生在兩個端點或兩個套接字(Socket)之間[8]。每個Socket均有一種端標(biāo)語與一種IP地址。Socket可以被當(dāng)作在兩個程序進(jìn)行通訊連接中一種端點,一種程序?qū)⒁欢涡畔懭隨ocket中,該Socket將這段信息發(fā)送給此外一種Socket中,使這段信息能傳送到其她程序中。在智能家居系統(tǒng)服務(wù)端,TCP編程流程如下:(1)TCP服務(wù)器聲明一SOCKET類型全局變量m_Socket;(2)通過bind函數(shù)綁定本地地址;(3)用Listen函數(shù)進(jìn)行監(jiān)聽客戶端連接(4)當(dāng)有客戶端祈求時,套接字采用Accept函數(shù)接受客戶端祈求(5)服務(wù)端新添加一種單獨套接字與客戶端進(jìn)行通訊。若用流程圖表達(dá),如圖4-27所示?;谝陨狭鞒毯驮?,在VS中新添加兩個類——CTCPServer_CE和CTCPCustom_CE。其中CTCPServer_CE類用于啟動與關(guān)閉TCP服務(wù),以及打開監(jiān)聽套接字事件線程。CTCPCustom_CE用于打開套接字和關(guān)閉套接字,以及向客戶端發(fā)送數(shù)據(jù)等。

SHAPE

圖4-27TCP服務(wù)工作流程圖在初始化階段,調(diào)用WSAStartup()函數(shù)以在應(yīng)用程序初始化WindowsSocketDLL,調(diào)用成功后,應(yīng)用程序即可采用WindowsSocket中其她關(guān)于API函數(shù)。在此之后,在程序中建立一種用于監(jiān)聽網(wǎng)絡(luò)Socket,并定義其采用通訊合同——TCP合同。完畢這一操作函數(shù)是socket()。它原型是:SOCKETPASCALFARsocket(intaf,inttype,intprotocol)其中第二個形參用于指定套接字通信類型,當(dāng)type為SOCK_STREAM時,為遵從TCP合同通信,若要遵從UDP合同,應(yīng)設(shè)立為SOCK_DGRAM;在智能家居中,采用前者。依照流程,接下來要綁定一種IP地址和端口,這個地址和端口是客戶端將要連接目的,通過調(diào)用bind()函數(shù)可以完畢這一操作,如下是bind()函數(shù)原型。intPASCALFARbind(SOCKETs,conststructsockaddrFAR*name,intnamelen);其中s為被操作Socket對象,name是ARM端IP地址。namelen為IP地址長度。在監(jiān)聽網(wǎng)絡(luò)某些,ARM服務(wù)器端建立一種監(jiān)聽隊列來接受客戶端連接祈求。listen()函數(shù)可以完畢這一操作。intPASCALFARlisten(SOCKETs,intbacklog);s為要操作Socket;backlog為最大連接數(shù),在系統(tǒng)中設(shè)立為8。在客戶端發(fā)出連接祈求時,ARM客戶端調(diào)用accept()函數(shù),從而完畢完整連接操作。在智能家居系統(tǒng)軟件設(shè)計中,將監(jiān)聽以太網(wǎng)通過一種線程來實現(xiàn)。

SHAPE

圖4-28TCP讀線程工作流程4.7PC端視頻監(jiān)控模塊該模塊采用Delphi7公司版編寫,它是由Borland公司推出全新可視化編程環(huán)境,是迅速、以便桌面Windows應(yīng)用程序開發(fā)工具之一[9]。它綜合了Windows圖形界面許多特性和設(shè)計思想,采用了面向?qū)ο缶幊陶Z言。在Delphi中,提供了包括TCP通信控件在內(nèi)許多控件使開發(fā)人員可以迅速構(gòu)建和實現(xiàn)應(yīng)用軟件系統(tǒng)?;谶@一特點,PC客戶端采用Delphi編寫。PC端處在TCP/IP網(wǎng)絡(luò)中客戶端,它網(wǎng)絡(luò)通信依托Delphi中TCPClient控件完畢。TCPClient控件需要完畢操作是:1)

打開一種通信信道,連接到智能家居ARM服務(wù)器端特定端口。2)

向服務(wù)器發(fā)送服務(wù)祈求報文,等待并接受應(yīng)答,如此重復(fù)3)

祈求結(jié)束后關(guān)閉通信通道并終結(jié)通訊。按照如下環(huán)節(jié)建立好PC端視頻監(jiān)控程序界面,如圖4-29所示,圖4-30所示是客戶端工作流程。圖4-29

PC端視頻監(jiān)控程序界面A、打開Delphi7集成環(huán)境,系統(tǒng)自動新建一種工程。B、在窗體中拖入Standard控件工具箱button控件三個,label控件2個,Edit控件兩個,Groupbox一種,Additional工具箱里Image控件一種,Internet工具箱里TCPClient控件一種。C、設(shè)立各控件屬性,如表4-10所示。表4-10

PC端視頻監(jiān)控軟件控件設(shè)立狀況控件種類名稱屬性設(shè)立窗體主窗體caption:“視頻監(jiān)控PC端”按鈕設(shè)立caption:“設(shè)立”,name:“BtnSetting”啟動視頻caption:“啟動視頻”,name:“BtnOpenCamera”關(guān)閉視頻caption:“關(guān)閉視頻”,name:“BtnCloseCamera”標(biāo)簽對方IP:caption:“對方IP:”,name:“Label1”對方端口:caption:“對方端口:”,name:“Label2”編輯框IPname:“txtIP”,text:“6”端口name:“txtPort”,text:“9000”TCPClientHost:“6”,Port:“9000”圖像框name:“VideoFrame”,height:“240”,width:“320”其中,Image控件用于顯示視頻,它一次只顯示一幀靜態(tài)圖象,由于人眼有視覺暫留效應(yīng),圖象更新也比較快,因此人眼看起來是動態(tài)圖象。界面中文本框控件是為了能在對方IP地址和端標(biāo)語變化狀況下,通過輸入不同IP號和端標(biāo)語,再點擊設(shè)立按鈕,從而變化TCPClient控件Host屬性(用于指定對方IP)和Port屬性(用于指定對方端口),再打開以太網(wǎng)通信通道,向ARM服務(wù)端進(jìn)行連接祈求。

SHAPE

圖4-30PC客戶端工作流程在程序設(shè)計中采用了Delphi中TJpegImage對象和TMemory對象。TMemory對象用于存儲TCP層發(fā)送給應(yīng)用層數(shù)據(jù)包包括數(shù)據(jù),在接受完數(shù)據(jù)包后,程序創(chuàng)立TJpegImage類型對象jpg,jpg通過LoadFromStream()辦法裝載緩沖區(qū)中數(shù)據(jù),最后在窗體上VideoFrame圖片控件上顯示出來。4.8家電控制及傳感器模塊在該模塊中,家電控制以及傳感器報警模塊依托89C51單片機(jī)豐富I/O口完畢。傳感器報警狀態(tài)通過RS232串口向ARM發(fā)送相應(yīng)字符串,由ARM端應(yīng)用程序進(jìn)行解析。類似,ARM端通過串口發(fā)送指定格式字符串到單片機(jī)串口,串口打開相應(yīng)LED,以表達(dá)相應(yīng)家電電源打開。4.8.1單片機(jī)串口配備在智能家居系統(tǒng)家電控制板中,單片機(jī)串行口通信采用10位為一幀工作方式1。這10位中,共涉及1個起始位、8位數(shù)據(jù)位和1個停止位[10]。起始位D0D1D2D3D4D5D6D7停止位圖4-31

單片機(jī)串行工作方式1幀格式依照串口合同,串口工作方式1中數(shù)據(jù)發(fā)送辦法是在往發(fā)送寄存器(SBUF)中發(fā)送一條8位數(shù)據(jù)后,由硬件自動地在它前面加入起始位和在背面加上一種停止位,構(gòu)成完整幀格式。數(shù)據(jù)從串口TXD輸出,輸出完一幀數(shù)據(jù)后,TXD輸出線保持高電平,并且SCON寄存器TI位被置位為1,告知CPU可以發(fā)送下一幀數(shù)據(jù)。接受數(shù)據(jù)時,SCON寄存器REN位被設(shè)為1,串口采樣RXD針腳,當(dāng)RXD從高電平向低電平狀態(tài)跳變時,單片機(jī)辨認(rèn)出起始位到達(dá),在移位脈沖控制下,讀完數(shù)據(jù)位并且將其存入接受寄存器中,直到停止位到達(dá),置位RI中斷標(biāo)志位,單片機(jī)CPU即可將數(shù)據(jù)取走。在智能家居系統(tǒng)中,規(guī)定單片機(jī)波特率為9600bps,這是為了與在應(yīng)用軟件中串口設(shè)立相相應(yīng),使其可以與ARM正常通信。波特率大小由單片機(jī)定期(計數(shù))器T1計數(shù)溢出率決定。在單片機(jī)擴(kuò)展板中,采用是11.0592MHz晶振,計算定期器計數(shù)初值:

(4-1)其中smod=0,使波特率不倍增,PCON=00H。對于定期器1,選取方式2作為其工作方式。這種工作方式將16位計數(shù)器T1提成了兩某些,其中高8位TH1作為預(yù)置寄存器,在初始化時,將計數(shù)初值分別存入TH1和TL1中,即兩者內(nèi)容相似,當(dāng)計數(shù)溢出時,預(yù)置寄存器TH1將計數(shù)初值直接給TL1加載,這樣就避免了在程序中重復(fù)地存儲計數(shù)初值,進(jìn)一步提高了定期精度,保證了串行接口波特率穩(wěn)定,同步也是保證了串口通信穩(wěn)定性。4.8.2串口通信自定義商定為了便于單片機(jī)與ARM之間通訊信息解析,特別定義了如下自定義信息交流格式商定。A傳感器報警字符串,如圖4-32所示。#$#1報頭傳感器編號圖4-32傳感器報警字符串格式該字符串為傳感器報警時單片機(jī)向ARM串口發(fā)送字符串,共四位,不同傳感器報警時,發(fā)送字符串區(qū)別在于第四位。在家電控制板上,有三個按鈕模仿三個傳感器,即傳感器編號為1、2、3。如傳感器2報警時,發(fā)送“#$#2”字符串到ARM。B家電控制字符串,如圖4-33所示。%1111報頭家電1標(biāo)志位家電2標(biāo)志位家電3標(biāo)志位家電4標(biāo)志位圖4-33家電控制字符串格式該控制字符串共五位,包括報頭‘%’字符和四位分別表達(dá)不同家電標(biāo)志位。要控制家電電源開和關(guān),只要在相應(yīng)位上進(jìn)行置位(設(shè)為1)或重置(設(shè)為0)即可。如要啟動家電1和4,保持2和3關(guān)閉狀態(tài),則向單片機(jī)發(fā)送“%1001”字符串即可。4.8.3單片機(jī)程序流程單片機(jī)程序采用C語言編寫。單片機(jī)工作主流程如圖4-所示。其中單片機(jī)初始化涉及對定期方式控制寄存器初始化、對定期計數(shù)器1初始化,串口工作方式初始化以及波特率設(shè)立等。在傳感器狀態(tài)字符串信息發(fā)送過程中,采用逐字發(fā)送方式發(fā)送字符串。這是由于

溫馨提示

  • 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

提交評論