管理信息化物聯(lián)網(wǎng)智能家居系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)54_第1頁
管理信息化物聯(lián)網(wǎng)智能家居系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)54_第2頁
管理信息化物聯(lián)網(wǎng)智能家居系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)54_第3頁
管理信息化物聯(lián)網(wǎng)智能家居系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)54_第4頁
管理信息化物聯(lián)網(wǎng)智能家居系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)54_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

管理信息化物聯(lián)網(wǎng)智能家居系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)54{管理信息化物聯(lián)網(wǎng)}智能家居系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)54本文討論了基于Windows5.0嵌入式操作系統(tǒng),以使用IntelXScale270為CPU的ARM10嵌入式實(shí)VisualStudio2005和Delphi的系統(tǒng)設(shè)計(jì)過程,開發(fā)了相應(yīng)的軟件程序,包括嵌入式操作系統(tǒng)WindowsCE5.0的定制、應(yīng)用程序的界面設(shè)系統(tǒng)測試結(jié)果表明,該系統(tǒng)設(shè)計(jì)基本滿足要求,并有一定的功能擴(kuò)展空間。1緒論解家中的安全,提高業(yè)主的安全感,而且通過手機(jī)實(shí)時(shí)控制家電,提高了業(yè)主生活的舒適度。本文提出了基于嵌入式系統(tǒng)ARM10境并且通過手機(jī)短信告知業(yè)主,以及以太網(wǎng)實(shí)時(shí)視頻監(jiān)控等功能。2系統(tǒng)設(shè)計(jì)方案2.1硬件總體設(shè)計(jì)框圖ARM10含GSM通信模塊的智能家居系統(tǒng),硬件結(jié)構(gòu)框圖如圖2-1所示。SHAPE\*MERGEFORMAT圖2-1硬件設(shè)計(jì)框圖2.2控制核心選擇智能家居控制系統(tǒng)采用如圖2-2所示的XSBase270Intel?高性能的PXA270處理器,支持WindowsCE和Linux等嵌入式操作系統(tǒng),是針對(duì)教學(xué)和實(shí)驗(yàn)的多功能實(shí)驗(yàn)平臺(tái)。PXA270處理器的最高主頻可達(dá)520MHz,且該處理器被加入了WirelessMXX技術(shù),大大的提高了多媒體處理能力,而且加入了IntelSpeedStep動(dòng)態(tài)電源管理技術(shù),在保證CPU性能的前提下,最大限度的降低設(shè)備功耗[1]。XSBase270配置32MFLASHROM64MSDRAMUSBCF/MMCPCMCIA等接口。滿足了智能家居系統(tǒng)控制中心的硬件要求。圖2-2XSBase270實(shí)驗(yàn)箱展開圖2.3家電控制板家電控制板采用AT89C512-3LED分別模擬四種家電,三個(gè)按鈕模擬三種傳感器。其中四盞LED分別連接單片機(jī)的P1.0、P1.1、P1.2、P1.3;三個(gè)按鈕分別連接P2.0、P2.1、P2.2。圖2-3家電控制模塊2.3.1串行端口電路家電控制板采用串口與XSBase270RS-232標(biāo)準(zhǔn)的MAX232芯片作為串口的電平轉(zhuǎn)換芯片。電路的連接如圖2-4所示:圖2-4家電控制板串行接口電路如上圖所示,家電擴(kuò)展板采用的是常用的DB9頭作為串口接口,其針腳定義圖如圖2-5所示:圖2-5RS-232DB9頭針腳定義圖其中2腳RxD3腳TxDGNDDSR引腳和CTS出采用這兩個(gè)腳的信號(hào)控制;而其他引腳是跟MODEM相關(guān)的。在智能家居系統(tǒng)中,家電控制板接普通串口,GSM模塊接藍(lán)牙串口。RS-232信號(hào)相對(duì)于信號(hào)地而言,在正負(fù)電平之間擺動(dòng)。發(fā)送數(shù)據(jù)時(shí),發(fā)送端輸出的正電平在+5V到+15V之間,負(fù)電平在-5V和-15V之間。無數(shù)據(jù)傳輸時(shí),線上為TTL電平。接收器典型的工作電平在+3V~+12V與-3V~-12V2~3V信號(hào)傳輸距離最大為15m,最高速率為20kb/s[2]。MAX232包含2個(gè)驅(qū)動(dòng)器、2個(gè)接收器和一個(gè)電壓發(fā)生器電路,提供TIA/EIA-232-F電平。該器件符合TIA/EIA-232-F標(biāo)準(zhǔn),每一個(gè)接收器將TIA/EIA-232-F電平轉(zhuǎn)換成5VTTL/CMOS電平。每一個(gè)發(fā)送器將TTL/CMOS電平轉(zhuǎn)換成TIA/EIA-232-F電平。圖2-6MAX232引腳圖2.3.2家電控制電路圖2-7模擬家電控制電路家用電器控制的接口電路如圖2-7所示,K1~K4為繼電器,分別控制四路家電的閉合和斷開,Q1~Q4為繼P1DD1~DD4發(fā)光二極管用于顯示某路控制電路的工作情況,主要為了調(diào)試電路而設(shè)置。2.3.3傳感器接口電路圖2-8傳感器接口電路圖煙霧、煤氣泄漏、紅外等這些傳感器的報(bào)警信號(hào)通過光電耦合接入單片機(jī)的P2口,如圖2-8所示,在傳感做出相應(yīng)處理。2-9所示的西門子MC35GSM/GPRS無線模塊作為通信工具。它支持EGSM900和GSM1800雙頻,支持?jǐn)?shù)字、語

音、短消息和傳真,使用AT指令控制發(fā)送短消息。它采用9V直流電源供電,通過RS-232串行端口與

XSBase270試驗(yàn)箱連接進(jìn)行通信。圖2-9西門子MC352.5視頻監(jiān)控模塊VimicroZC0301P芯片的攝像頭,ZC0301P芯片可支持USB1.1接口,

硬件最高支持VGA分辨率(640×480)。在VGA模式下可達(dá)到15幀/秒速率,在CIF(352×288)和SIF(320×240)模式下可達(dá)到30幀/秒速率。它通過USB接口連接到XSBase270試驗(yàn)箱。圖2-10301P攝像頭2.6總體軟件設(shè)計(jì)方案根據(jù)智能家居的硬件設(shè)計(jì)方案,設(shè)計(jì)出軟件的總體設(shè)計(jì)方案如圖2-11所示:圖2-11軟件設(shè)計(jì)框圖其中:、(1GSM網(wǎng)絡(luò)通信各自獨(dú)占一個(gè)RS-232XSBase270的紅外串口,GSM模塊接藍(lán)牙串口。如圖2-12所示。(2)實(shí)時(shí)視頻監(jiān)控通過USB攝像頭捕捉圖像,圖像數(shù)據(jù)通過以太網(wǎng)發(fā)送到PC客戶端進(jìn)行圖像還原。(3TCP/IP所在的局域網(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è)計(jì)成一種分層結(jié)構(gòu),從下而上一OEM[3]用軟件隔離開,以便于實(shí)現(xiàn)系統(tǒng)的移植。智能家居的軟件設(shè)計(jì)主要是集中在應(yīng)用層。3操作系統(tǒng)的定制WindowsCE5.0嵌入式操作系統(tǒng)的定制依靠PlatformBuilder5.0完成。PlatformBuilder是微軟公司設(shè)計(jì)的系統(tǒng)移植到特定的目標(biāo)平臺(tái)上。3.1BSP的安裝為了讓W(xué)indowsCE5.0XSBase270BSP為上層的驅(qū)動(dòng)程序提供訪問硬件設(shè)備寄存器的函數(shù)包。在PC上安裝好Windows5.0和PlatformBuilder5.0后,打開實(shí)驗(yàn)箱附帶光盤中的BSP文件夾,運(yùn)行XSBase270_V010106.msi文件,安裝XSBase270的BSP。如圖3-1所示。圖3-1BSP安裝程序文件安裝好BSPPlatformBuilder5.0的因特網(wǎng)應(yīng)用類型的系統(tǒng)鏡像設(shè)計(jì)[4]。如圖3-2所示。圖3-2定制系統(tǒng)時(shí)選擇BSP種類3.2添加平臺(tái)特征和配置平臺(tái)征。(1USBActiveSync(FileSync)組件。只有添加此組件,才能使用PC的USB接口與WindowsCE進(jì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)添加文件系統(tǒng)支持。(Catalog->CoreOS->WindowsCEdevices->FileSystemsandDataStore->StorageManager->FATFileSystem)(4)添加分區(qū)管理(Catalog->CoreOS->WindowsCEdevices->FileSystemsandDataStore->StorageManager->PartitionDriver)(5)添加控制面板中的存儲(chǔ)器管理組件(Catalog->CoreOS->WindowsCEdevices->FileSystemsandDataStore->StorageManager->StorageManagerControlPanelApplet)(6)添加基于軟件的輸入系統(tǒng)(軟鍵盤等)(Catalog->CoreOS->WindowsCEdevices->ShellandUserInterface->UserInterface->SoftwareInputPanel->Software-basedInputPanel(SIP)(Choose1ormore)->SIPforLargeScreens)(7)添加平臺(tái)管理器(PlatformManager)(Catalog->PlatformManager->PlatformManager)(8)添加UsbActiveSync(USBFunction)(Catalog->ThirdParty->BSPs->EmdoorSystemsXSBase270:ARMV4I->DeviceDrivers->USBFunction->USBFunctionBusDrivers->PXA27xUSBFunction)完成特性的添加后,設(shè)置平臺(tái)的屬性。在“Platform”菜單下單擊在Configuration下拉菜單中選擇“EmdoorSystemsXSBase270:ARMV4IRelease”項(xiàng),選擇Locale選項(xiàng)卡,進(jìn)行系統(tǒng)地理位置和環(huán)境語言支持的設(shè)置。Locales列表中,為最下[端的“中文(中國)”項(xiàng)打勾。在DefaultLanguage下拉菜單里選擇“中文(中國)”為系統(tǒng)的默認(rèn)語言。如圖3-3所示。圖3-3選擇操作系統(tǒng)默認(rèn)語言在BuildOption列表中,只選擇EnableEbootSpaceinMemory(IMGEBOOT=1)和WriteRun-timeImagetoFlashMemory(IMGFLASH=1)兩項(xiàng)。如圖3-4所示。圖3-4程序組建選項(xiàng)設(shè)置單擊“BuildOS”菜單下的“Sysgen”開始組建操作系統(tǒng)。如圖3-5所示:

圖3-5生成操作系統(tǒng)鏡像3.3紅外串口與藍(lán)牙串口的打開XSBase270GSM居系統(tǒng)的功能,必須將它們打開。(1)查找中斷號(hào)中斷號(hào)的定義是在試驗(yàn)箱所提供的板級(jí)支持包中被配置的。打開C:\WINCE500\Platform\XSBase270\Src\inc\bsp_cfg.h文件??梢钥吹秸{(diào)試串口和通信串口的中斷號(hào)的定義,如圖3-6所示。圖3-6BSP中的串口中斷定義可以看到調(diào)試串口BFUART的中斷號(hào)是28,轉(zhuǎn)化為16進(jìn)制為0x1c;通信串口SFUART中斷號(hào)27,轉(zhuǎn)換為16進(jìn)制是0x1b。(2)修改注冊(cè)表打開以下文件夾,其中“F:\platform\270\”是在新建操作系統(tǒng)平臺(tái)時(shí)所存儲(chǔ)它的磁盤位置。F:\Platform\270\RelDir\XSBase270_ARMV4I_Release\打開注冊(cè)表文件,在此文件中包含了對(duì)一些硬件的初始化的代碼。在“IFBSP_NOSERIAL!”與“ENDBSP_NOSERIAL!”兩句代碼之間,可以看到藍(lán)牙串口的注冊(cè)表初始化代碼,下面只需要添加初始化紅外串口的代碼:;OpentheIRSerialPort[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\SerialIR]"Irq"=dword:14;20IRQ_STUART"SysIntr"=dword:1b;27SYSINTR_SFUART"MemBase"=dword:0;STUARTRegister"MemLen"=dword:40"DeviceArrayIndex"=dword:82;STUARTobject"Prefix"="COM""Index"=dword:3"Order"=dword:1"IClass"="{CC5195AC-BA49-48a0-BE17-DF6D1B0173DD}";"Dll"="ms2_"[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\SerialIR\Unimodem]"Tsp"="""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

修改好注冊(cè)表代碼以后,保存文件。打開剛才建立的操作系統(tǒng)設(shè)計(jì)工程,選擇BuildOS菜單下的

MakeRun-TimeImage命令,生成新的內(nèi)核文件。3.4操作系統(tǒng)的生成與下載定制并組建WindowsCE后,將會(huì)生成BootLoader——0文件和NK內(nèi)核——,將它們燒寫進(jìn)入XSBase270實(shí)驗(yàn)箱。4應(yīng)用軟件設(shè)計(jì)4.1應(yīng)用程序編寫環(huán)境開發(fā)環(huán)境:MicrosoftVisualStudio2005開發(fā)語言:MicrosoftVisualC++2005軟件開發(fā)包:XSBase270SDK智能家居系統(tǒng)的應(yīng)用程序采用VisualStudio2005進(jìn)行開發(fā)。VisualStudio是微軟公司開發(fā)的Windows平臺(tái)上的應(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]。VisualStudio2005面向.net框架(2.0版本),同時(shí)可以開發(fā)跨平臺(tái)的應(yīng)用程序。圖4-1VisualStudio20054.2智能家居人機(jī)接口設(shè)計(jì)打開VisualStudio2005,創(chuàng)建一個(gè)基于MFCSmartDeviceApplication的VC++程序。如圖4-2所示:圖4-2新建智能家居的應(yīng)用程序到選擇平臺(tái)步驟時(shí)選擇XSBase270平臺(tái),刪除默認(rèn)的PocketPC2003平臺(tái)。如圖4-3所示。圖4-3選擇軟件開發(fā)包支持“Next”按鈕進(jìn)入選擇應(yīng)用程序類型和資源語言——4-4擇“Dialogbased”(基于對(duì)話框)類型,資源語言選擇“中文(中國)”。其他項(xiàng)目保留默認(rèn)的選項(xiàng)。圖4-4選擇應(yīng)用程序種類保持默認(rèn)的設(shè)置,一直到完成新建項(xiàng)目向?qū)?。進(jìn)入IDE環(huán)境。集成環(huán)境的窗口分布如圖4-5所示:圖4-5VisualStudio2005集成環(huán)境將對(duì)話框設(shè)計(jì)成如圖4-6所示:圖4-6智能家居操作界面設(shè)計(jì)表4-1智能家居應(yīng)用軟件界面控件配置控件類型控件名稱功能初始化GSM初始化GSM模塊開始攝像打開攝像頭,開始視頻捕捉停止攝像停止攝像頭視頻捕捉開始監(jiān)聽打開ARM的9000號(hào)端口,打開網(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ā)回的短信記錄煤氣煤氣傳感器報(bào)警信號(hào),報(bào)警時(shí)紅色,常態(tài)時(shí)綠色圖片控件煙霧煙霧傳感器報(bào)警信號(hào),報(bào)警時(shí)紅色,常態(tài)時(shí)綠色紅外紅外傳感器報(bào)警信號(hào),報(bào)警時(shí)紅色,常態(tài)時(shí)綠色編輯框信息框?qū)崟r(shí)顯示系統(tǒng)運(yùn)行情況[4.3串口通信功能設(shè)計(jì)4.3.1串口通信協(xié)議串口通信協(xié)議采用CCESeries類實(shí)現(xiàn),通過對(duì)此類的成員函數(shù)的調(diào)用,完成對(duì)串口的初始化、讀寫操作等,在不用串口的情況下,還可以關(guān)閉串口。4.3.2軟件的實(shí)現(xiàn)在VisualStudio的解決方案視圖里添加類CCESeries4-7所示。CCESeries類的成員函數(shù)如表4-2所示。圖4-7在VS2005中建立CCESeries類表4-2串口操作類CCESeries的成員函數(shù)數(shù)作用BOOLOpenPort(HWNDpPortOwner,UINTportNo=1,UINTbaud=9600,UINTparity=NOPARITY,UINTdatabits=8,UINTstopbits=0);串口VoidClosePort();閉串口BOOLSetSeriesTimeouts(COMMTIMEOUTSCommTimeOuts);置串口超時(shí)StaticDWORDWINAPIReadThreadFunc(LPVOIDlparam);串口線程BOOLWritePort(LPCTSTRlpString);BOOLWritePort(char*buf,intnSize);BOOLWritePort(char*buf);VoidCloseReadThread();閉讀線程表4-3串口操作類CCESeries的成員變量變量類型變量名稱作用HANDLEm_hComm已打開的串口句柄HWNDm_hWnd此串口類所屬的窗口句柄HANDLEm_hReadThread讀串口線程句柄HANDLEm_hWriteThread寫串口線程句柄DWORDm_dwReadThreadID讀串口線程IDDWORDm_dwWriteThreadID寫串口線程IDHANDLEm_hReadCloseEvent讀串口線程退出事件HANDLEm_hWriteCloseEvent寫串口線程退出事件打開串口與配置串口在WindowsCE[6]方提供,支持另外添加到系統(tǒng)中的設(shè)備。而串口就屬于流接口設(shè)備之一。流設(shè)備驅(qū)動(dòng)在系統(tǒng)中是以三位字符串后跟一位數(shù)字表示的,對(duì)于串口而言,這三位字符是“COM”(不包括引號(hào))。當(dāng)引用一個(gè)流接口驅(qū)動(dòng)程序時(shí),除了三位字符后跟一位數(shù)字以外,還要緊跟一個(gè)冒號(hào)“:”(英文半角冒號(hào)),冒號(hào)是必需的,是為了區(qū)別桌面Windows的設(shè)備驅(qū)動(dòng)程序的命名規(guī)則。該函數(shù)的流程圖如圖4-8所示:圖4-8OpenPort函數(shù)流程圖(1)串口的打開所有的流驅(qū)動(dòng)程序都將采用CreateFileWindowsCE備的重疊I/OdwFlagsAndAttributes中傳遞FILE_FLAG_OVERLAPPEDINVAILID_HANDLE_VALUECreateFile與大多數(shù)Windows函數(shù)不一樣,打開失敗時(shí),不返回0。CreateFile函數(shù)的原型如下:HANDLECreateFile(LPCTSTRlpFileName,//對(duì)象路徑名DWORDdwDesiredAccess,//控制模式DWORDdwShareMode,//共享模式LPSECURITY_ATTRIBUTESlpSecurityAttributes,//安全屬性(也即銷毀方式)DWORDdwCreationDisposition,//創(chuàng)建的方式DWORDdwFlagsAndAttributes,//對(duì)象屬性HANDLEhTemplateFile//一個(gè)文件模板句柄);在CCESeriesHANDLE類型全局變量m_hComm存儲(chǔ)CreateFile句柄可以控制打開的串口對(duì)象;以讀寫的方式打開串口。(2)串口的設(shè)置打開串口后,還必須對(duì)端口配置好正確的波特率、字符長度、停止位等等。在OpenPort函數(shù)中,使用兩個(gè)函數(shù)GetCommState和SetCommState來配置串口。函數(shù)原型如下:BOOLSetCommState(HANDLEhRle,LPDCBlpDCB);BOOLGetCommState(HANDLEhFile,LPDCBlpDCB);這兩個(gè)函數(shù)都包含了同樣的參數(shù),即已打開的串口的句柄和指向DCB結(jié)構(gòu)的指針。DCB結(jié)構(gòu)的設(shè)置如表4-4所示。表4-4OpenPort函數(shù)中的串口DCB配置DCB定義項(xiàng)目設(shè)置值備注BaudRateBaud設(shè)置波特率為傳入型參baud的值fBinaryTRUE二進(jìn)制模式有效fParityTRUE支持奇偶校驗(yàn)ByteSizeDatabits設(shè)置數(shù)據(jù)位為傳入型參databits,范圍4~8ParityNOPARITY校驗(yàn)?zāi)J接行topBitsStopbits設(shè)置停止位為傳入型參stopbitsfOutxCtsFlowTRUE串口輸出由端口的CTS線控制fOutxDsrFlowTRUE串口輸出由端口的DSR線控制fDtrSensitivityDTR_CONTROL_ENABLE續(xù)表4-4OpenPort函數(shù)中的串口DCB配置DCB定義項(xiàng)目設(shè)置值備注fDsrSensitivityFALSEXOFFfTXContinueOnXoffTRUE字符,則驅(qū)動(dòng)程序停止傳送字符fOutXFALSEXON/XOFF控制不用于控制串行輸出fInXFALSEXON/XOFF控制不為輸入串行流使用fErrorCharFALSEfNullFALSE串行驅(qū)動(dòng)不忽略接收到的空字節(jié)fRtsControlRTS_CONTROL_ENABLEfAbortOnErrorFALSE串口發(fā)生錯(cuò)誤時(shí),并不終止串口讀寫[來源:論文天下論文網(wǎng)](3)串口超時(shí)設(shè)置Windows在讀串口和寫串口的自動(dòng)返回前等待讀或?qū)懖僮鞯臅r(shí)間長度。在程序中,用以下兩個(gè)函數(shù)控制串行超時(shí)。BOOLGetCommTimeouts(HANDLEhFile,LPCOMMTIMEOUTSlpCommTimeouts);BOOLSetCommTimeouts(HANDLEhFile,LPCOMMTIMEOUTSlpCommTimeouts);這兩個(gè)函數(shù)都包含了對(duì)應(yīng)的串行設(shè)備的句柄和COMMTIMEOUTS結(jié)構(gòu)的指針,COMMTIMEOUTS結(jié)構(gòu)定義為:typedefstruct_COMMTIMEOUTS{DWORDReadIntervalTimeout;DWORDReadTotalTimeoutMultiplier;DWORDReadTotalTimeoutConstant;DWRODWriteTotalTimeoutMultiplier;DWORDWriteTotalTimeoutConstant;}COMMTIMEOUTS;(4)其他的函數(shù)設(shè)置串口的輸入輸出緩沖區(qū)。原型如下BOOLSetupComm(HANDLEhFile,DWORDdwInQueue,DWORDdwOutQueue);設(shè)置串口檢測的事件集。SetCommMask(HANDLEhFile,DWORDdwEvtMask);

通過這個(gè)函數(shù),可以使線程等待如表4-5中的常見的串口驅(qū)動(dòng)程序事件。

表4-5串口驅(qū)動(dòng)程序事件事件標(biāo)志表達(dá)意義EV_BREAK檢測到中斷EV_CTSCTS更改狀態(tài)EV_DSRDataSetReady信號(hào)更改狀態(tài)EV_ERR串行驅(qū)動(dòng)程序檢測到錯(cuò)誤EV_RKSDReceiveLineSignalDetect行更改狀態(tài)EV_RXCHAR接收到一個(gè)字符EV_RXFLAG接收到一個(gè)事件字符EV_TXEMPTY傳輸緩沖區(qū)為空關(guān)閉串口調(diào)用CloseHandleCloseHandle(m_hComm);關(guān)閉線程函數(shù):BOOLTerminateThread(HANDLEhThread,DWORDdwExitCode);hThreaddwExitCode一般為0函數(shù)的工作流程如圖4-9所示。SHAPE\*MERGEFORMAT圖4-9ClosePort函數(shù)流程圖串口讀線程讀串口ReadFile函數(shù)原形:BOOLReadFile(HANDLEhFile,//文件的句柄LPVOIDlpBuffer,//用于保存讀入數(shù)據(jù)的一個(gè)緩沖區(qū)DWORDnNumberOfBytesToRead,//要讀入的字符數(shù)LPDWORDlpNumberOfBytesRead,//從文件中實(shí)際讀入的字符數(shù)LPOVERLAPPEDlpOverlapped//異步讀取描述,在WindowsCE中為NULL);WM_RXCHAR_ALL一個(gè)用戶自定義消息。發(fā)送給系統(tǒng)窗體的附帶消息包含收到的消息的內(nèi)容和消息的長度。

發(fā)送系統(tǒng)消息的API函數(shù)SendMessage的原型如下:LRESULTSendMessage(HWNDhWnd,UINTMsg,WPARAMwParam,LPARAMIParam);

圖4-10串口讀線程流程圖寫串口在CCESeriesWritePort(char*buf,intnSize)WritePort(char*buf)函

的API函數(shù)WriteFile(),它的函數(shù)原型如下:BOOLWriteFile(HANDLEhFile,//文件句柄LPCVOIDlpBuffer,//數(shù)據(jù)緩存區(qū)指針DWORDnNumberOfBytesToWrite,//要寫的字節(jié)數(shù)LPDWORDlpNumberOfBytesWritten,//用于保存實(shí)際寫入字節(jié)數(shù)的存儲(chǔ)區(qū)域的指針LPOVERLAPPEDlpOverlapped//OVERLAPPED結(jié)構(gòu)體指針,CE里設(shè)為NULL);串口類的調(diào)用在主程序中,必須調(diào)用此CCESeries類,以達(dá)到操作串口的目的。在定義智能家居的窗口行為的CSmartHomeDlg類的頭文件CSmartHomeDlg.hCCESeries.h頭文public公共型變量m_BTSerial(藍(lán)牙串口)和m_IRSeries進(jìn)行對(duì)CCESeries類的實(shí)例化。CCESeriesm_BTSerial;CCESeriesm_IRSerial;在用于CSmartHomeDlgm_(this->m_hWnd,1,9600)的方式進(jìn)行串口類成員函數(shù)的調(diào)用。串口的監(jiān)聽在讀串口線程中,讀完串口的一條信息后發(fā)送名為WM_RXCHAR_ALL的系統(tǒng)消息給系統(tǒng)窗體。在窗體程序中,必須對(duì)其進(jìn)行響應(yīng)。在文件中,添加一條消息響應(yīng)的聲明:ON_MESSAGE(WM_RXCHAR_ALL,OnComRecvMsg)其中OnComRecvMsg為對(duì)其消息響應(yīng)的函數(shù),函數(shù)的聲明如下:afx_msglongOnComRecvMsg(WPARAMwParam,LPARAMlParam);其中“afx_msg”說明該函數(shù)是一消息響應(yīng)函數(shù)。4.4GSM通信模塊智能家居以GSMGSM全監(jiān)控和無線報(bào)警的功能。4.4.1設(shè)計(jì)基本原理PDU編碼規(guī)則自短信息技術(shù)被開發(fā)到現(xiàn)在,對(duì)短信息的控制方式包含了BlockMode、基于AT的TextMode基于AT指令的

PDUMode。使用Block模式需要廠家驅(qū)動(dòng)的支持,隨著技術(shù)的發(fā)展,后兩種模式將其取代。Text模式比較簡單,但不

PDU包括中文。在智能家居中,采用中文報(bào)警和中文指令。PDU[7](SMSC)、時(shí)間戳等都是用壓縮BCDPDUBit7Bit8和UCS2編碼方式對(duì)短消息發(fā)送內(nèi)容進(jìn)行編碼。這三種編碼方式可以發(fā)送的最大字符數(shù)分別為160,140和70。其中Bit7編碼發(fā)送普通ASCII0x00到0x7f,共可以表示1288位字8位碼壓縮成7:將第二個(gè)字符的最后一位,補(bǔ)充到第一個(gè)字符的前面第一位,第三個(gè)字符的后兩位,補(bǔ)充到第二個(gè)字符的前兩位,依次類推,成十六進(jìn)制。Bit8編碼通常用于發(fā)送任何二進(jìn)制數(shù)據(jù)。UCS2編碼用于發(fā)送Unicode1665535個(gè)字符。圖4-11和圖4-12分別是接收和發(fā)送短信的報(bào)文格式。圖4-11接收短信的報(bào)文格式圖4-12發(fā)送短消息的報(bào)文格式實(shí)例一、發(fā)送短信時(shí)的PDU碼:F011000B4F06C8329BFD0E01表4-6發(fā)送PDU包解析分段含義說明08SMSC地址信息的長度共8個(gè)八位字節(jié)(包括91)91SMSC地址格式(TON/NPI)用國際格式號(hào)碼(在前面加‘+’)5F0SMSC地址00,補(bǔ)‘F’湊成偶數(shù)個(gè)11基本參數(shù)(TP-MTI/VFP)發(fā)送,TP-VF用相對(duì)格式00消息基準(zhǔn)值(TP-MR)00B目標(biāo)地址數(shù)字個(gè)數(shù)共11位,不包括補(bǔ)足的‘F’91目標(biāo)地址格式(TON/NPI)用國際格式號(hào)碼(在前面加‘+’)6F9目標(biāo)地址(TP-DA)49,補(bǔ)‘F’湊成偶數(shù)個(gè)00協(xié)議標(biāo)識(shí)(TP-PID)是普通GSM類型,點(diǎn)到點(diǎn)方式00用戶信息編碼方式(TP-DCS)7-bit編碼00有效期(TP-VP)5分鐘06用戶信息長度(TP-UDL)實(shí)際長度6個(gè)字節(jié)C8329BFD0E01用戶信息(TP-UD)“Hello!”結(jié)合發(fā)送短信的報(bào)文格式,知道短消息中心號(hào)碼是:+00,對(duì)方號(hào)碼是:,消息內(nèi)容是“Hello!”。實(shí)例二、接收短信時(shí)的PDU碼F0840D764FE4E1C0021表4-7接收短消息PDU包解析分段含義說明08SMSC地址信息的長度共8個(gè)八位字節(jié)(包括91)91SMSC地址格式(TON/NPI)用國際格式號(hào)碼(在前面加‘+’)5F0SMSC地址00,補(bǔ)‘F’湊成偶數(shù)位84基本參數(shù)(TP-MTIRP)接收,無更多消息,有回復(fù)地址0B回復(fù)地址數(shù)字個(gè)數(shù)共11個(gè)十進(jìn)制數(shù)(不包括‘F’)91回復(fù)地址格式(TON/NPI)用國際格式號(hào)碼(在前面加‘+’)4F8回復(fù)地址(TP-RA)68,補(bǔ)‘F’湊成偶數(shù)位00協(xié)議標(biāo)識(shí)(TP-PID)是普通GSM類型,點(diǎn)到點(diǎn)方式08用戶信息編碼方(TP-DCS)UCS2編碼480時(shí)間戳(TP-SCTS)2003-3-1208:36:45+8時(shí)區(qū)06用戶信息長度(TP-UDL)實(shí)際長度6個(gè)字節(jié)534E4E1C0021用戶信息(TP-UD)“華東!”短消息中心號(hào)碼是:+00,對(duì)方號(hào)碼是,消息內(nèi)容是“華東!”。AT指令MC35模塊發(fā)送AT4-8中是一些系統(tǒng)中采用的AT指令。表4-8系統(tǒng)采用的AT指令A(yù)T指令功能AT+CMGF=0選擇短消息信息格式,等于0時(shí)為PDU格式,等于1時(shí)為文本模式,AT+CNMI=1,1,0,0,1設(shè)置為短信到達(dá)時(shí)自動(dòng)提醒AT+CMGS=?發(fā)送短消息,發(fā)送成功則返回OK字符串AT+CMGR=?讀取短消息,讀取成功則返回+CMGR:0,"",[id][content]AT+CMGD=?刪除短消息4.4.2軟件的實(shí)現(xiàn)PDU編碼解碼短信的PDU解碼和編碼的功能由智能家居軟件工程中的CEncode類實(shí)現(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}字節(jié)數(shù)據(jù)轉(zhuǎn)換為可打印字符串intgsmBytes2String(constunsignedchar*pSrc,char*pDst,如:intnSrcLength){0xC8,0x32,0x9B,0xFD,0x0E,0x01}-->"C8329BFD0E01"intgsmEncode7bit(constchar*pSrc,unsignedchar*pDst,in7bit編碼tnSrcLength)intgsmDecode7bit(constunsignedchar*pSrc,char*pDst,in7bit解碼tnSrcLength)intgsmEncode8bit(constchar*pSrc,unsignedchar*pDst,in8bit編碼tnSrcLength)intgsmDecode8bit(constunsignedchar*pSrc,char*pDst,in8bit解碼tnSrcLength)intgsmEncodeUcs2(constchar*pSrc,unsignedchar*pDst,inUCS2編碼tnSrcLength)intgsmDecodeUcs2(constunsignedchar*pSrc,char*pDst,inUCS2解碼tnSrcLength)正常順序的字符串轉(zhuǎn)換為兩兩顛倒的字符串,intgsmInvertNumbers(constchar*pSrc,char*pDst,intnSrc若長度為奇數(shù),補(bǔ)'F'湊成偶數(shù)。如:Length)"68"-->"4F8"intgsmSerializeNumbers(constchar*pSrc,char*pDst,intn兩兩顛倒的字符串轉(zhuǎn)換為正常順序的字符串。SrcLength)如:"4F8"-->"68"IntgsmDecodePdu(constchar*pSrc,SM_PARAM*pDst)PDU解碼,用于接收、閱讀短消息intgsmEncodePdu(constSM_PARAM*pSrc,char*pDst)PDU編碼,用于編制、發(fā)送短消息[來源:論文天下論文網(wǎng)]在該類中,關(guān)鍵的函數(shù)為gsmDecodePdu函數(shù)與gsmEncodePdu函數(shù),它們將在智能家居中的對(duì)話框類CSmartHomeDlg中被調(diào)用。調(diào)用方法將在下文給予介紹。gsmDecodePdu函數(shù)與gsmEncodePdu函數(shù)分別用來在發(fā)短信時(shí)根據(jù)PDUPDU與發(fā)送短信時(shí)是共用的。#defineGSM_7BIT0//7Bit編碼方式#defineGSM_8BIT4//8Bit編碼方式#defineGSM_UCS28//UCS2編碼方式typedefstruct{charSCA[16];//短消息服務(wù)中心號(hào)碼(SMSC地址)charTPA[16];//目標(biāo)號(hào)碼或回復(fù)號(hào)碼(TP-DA或TP-RA)charTP_PID;//用戶信息協(xié)議標(biāo)識(shí)(TP-PID)charTP_DCS;//用戶信息編碼方式(TP-DCS)charTP_SCTS[16];//服務(wù)時(shí)間戳字符串(TP_SCTS),接收時(shí)用到charTP_UD[161];//原始用戶信息(編碼前或解碼后的TP-UD)charindex;//短消息序號(hào),在讀取時(shí)用到}SM_PARAM;CEncode類各成員函數(shù)的作用和工作流程:gsmDecodePdu()PDUPDU度。源PDU串是可打印字符串,如“C8329BFD0E01”,目標(biāo)PDU參數(shù)是字節(jié)數(shù)據(jù),如“{0xC8,0x32,0x9B,0xFD,0x0E,0x01}”,在這個(gè)函數(shù)中,較多的采用了同在一個(gè)類中的可打印字符串轉(zhuǎn)換為字節(jié)數(shù)據(jù)的函數(shù)gsmString2Bytes;在短消息服務(wù)中心(SMSC)和回復(fù)號(hào)碼的字符處理過程中,根據(jù)PDU串的編碼規(guī)范,需要對(duì)描述SMSC的字符串段進(jìn)行兩兩顛倒,并且去掉經(jīng)顛倒后的字符串后的最后一個(gè)字符——“F”,那就采用了同在一個(gè)類中的gsmSerializeNumbers函數(shù);經(jīng)過數(shù)據(jù)分離,將PDU串中的描述短信編碼位TP-DCS7位碼的數(shù)值為08位碼為4UCS2編碼為8成后,將用戶信息進(jìn)行對(duì)應(yīng)方式的解碼——如7位解碼。它的工作流程如圖4-13所示。SHAPE\*MERGEFORMAT圖4-13CEncode類gsmDecodePdu函數(shù)工作流程gsmEncodePdu()PDUPDUPDU串長度。源PDU參數(shù)是字節(jié)信息,如“{0xC8,0x32,0x9B,0xFD,0x0E,0x01},目標(biāo)PDU參數(shù)是字節(jié)數(shù)據(jù),如“C8329BFD0E01”,在這個(gè)函數(shù)中,較多的采用了同在一個(gè)類中的字節(jié)數(shù)據(jù)轉(zhuǎn)換為可打印字符串的函數(shù)gsmBytes2String;在短消息服務(wù)中心(SMSC)和回復(fù)號(hào)碼的字符處理過程中,根據(jù)PDU串的編碼規(guī)范,需要對(duì)描述SMSC——“F”個(gè)類中的gsmInvertNumbersTP-DCS跟規(guī)定的數(shù)值進(jìn)行對(duì)比,如表示7位碼的數(shù)值為0,8位碼為4,UCS2編碼為8等。對(duì)比完成后,將用戶信息進(jìn)行對(duì)應(yīng)方式的編碼——如7位編碼。它的工作流程如圖4-14所示。SHAPE\*MERGEFORMAT圖4-14CEncode類gsmEncodePdu函數(shù)工作流程gsmString2Bytes函數(shù)的作用是將可打印字符串轉(zhuǎn)換為字節(jié)數(shù)據(jù),如

"C8329BFD0E01"-->{0xC8,0x32,0x9B,0xFD,0x0E,0x01}標(biāo)數(shù)據(jù)指針,返回目標(biāo)數(shù)據(jù)的長度。流程圖如圖4-15所示:SHAPE\*MERGEFORMAT圖4-15gsmString2Bytes函數(shù)工作流程其中每兩個(gè)字符串要整合成一個(gè)字節(jié)數(shù)據(jù),如“C8”要轉(zhuǎn)化為“0xC8”,故第一個(gè)字符“C”經(jīng)字符轉(zhuǎn)化為十六進(jìn)制后要左移四位,使其成為“0xC0”,再與經(jīng)過轉(zhuǎn)換的低四位進(jìn)行相或;然后計(jì)數(shù)器加2,源字符串0ASCII碼之差,‘8’就轉(zhuǎn)換成了數(shù)字類型的81000。而A、B、C、D、E、F等字符是與‘A’的ASCII碼值相減,再加上10,就可以得到其表達(dá)的十六進(jìn)制數(shù)值。如‘F’減去‘A’得到5,再加10,得到15,實(shí)質(zhì)上就是十六進(jìn)制中F所對(duì)應(yīng)的十進(jìn)制數(shù)15。gsmBytes2String函數(shù)的功能與gsmString2Bytes函數(shù)相反,工作流程如圖4-16所示。SHAPE\*MERGEFORMAT圖4-16gsmBytes2String函數(shù)工作流程其中低四位是每個(gè)字節(jié)數(shù)據(jù)與0x0f位與得到。每四位表達(dá)的數(shù)值為0~15,而在tab數(shù)組中,從tab[0]到tab[15],對(duì)應(yīng)的字符為‘0’到‘9’和‘A’到‘F’,通過此算法可以達(dá)到由數(shù)值型到字符型的轉(zhuǎn)換,最后完成整條字節(jié)數(shù)據(jù)到字符串的轉(zhuǎn)換。gsmEncode7bit函數(shù)的作用是7bit編碼。輸入源字符串指針和源字符串的長度,輸出目標(biāo)字符串指針和目標(biāo)編碼串長度。工作流程圖如圖4-17所示。SHAPE\*MERGEFORMAT圖4-17gsmEncode7bit函數(shù)流程gsmDecode7bit函數(shù)用于7位碼的解碼,輸入源編碼串指針和源編碼串長度,輸出目標(biāo)字符[來源串指針和目標(biāo)字符串的長度。流程圖如圖4-8所示:SHAPE\*MERGEFORMAT圖4-18gsmDecode7bit函數(shù)工作流程gsmEncode8bit函數(shù)用于88以其編碼工作用memcpy函數(shù)簡單的復(fù)制即可完成。gsmDecode8bit函數(shù)用于8gsmEncode8bit字符串末尾加一個(gè)“\0”結(jié)束字符。gsmEncodeUcs2函數(shù)用于UCS2PDU編碼規(guī)則,UCS2碼采用的是16式如圖4-19所示。SHAPE\*MERGEFORMAT圖4-19gsmEncodeUsc2函數(shù)工作流程gsmDecodeUsc2函數(shù)用于UCS2碼的解碼。它的工作流程如圖4-20所示:SHAPE\*MERGEFORMAT圖4-20gsmDecodeUcs2函數(shù)工作流程gsmEncodeUcs2函數(shù)和gsmDecodeUcs2函數(shù)分別用了作用相反的兩個(gè)API函數(shù)——MultiByteToWideChar

和WideCharToMultiByte函數(shù)。它們的作用分別為將短字符(用8位數(shù)據(jù)表示的字符)轉(zhuǎn)換為寬字符(16位數(shù)據(jù)表示的字符,如Unicode編碼),和將寬字符轉(zhuǎn)換為短字符。gsmInvertNumbers函數(shù)的作用是將形如這樣的字符串兩兩顛倒成,其中源字符串長度為奇數(shù)時(shí),補(bǔ)字符‘F’湊成偶數(shù)。流程圖如圖4-21所示。SHAPE\*MERGEFORMAT圖4-21gsmInvertNumbers函數(shù)工作流程收發(fā)短信(1)監(jiān)聽新短信GSM模塊連接在串口上,對(duì)短信的監(jiān)聽實(shí)質(zhì)上是對(duì)串口的監(jiān)聽。具體的新短消息的監(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á)自動(dòng)提醒功能。3)AT+CMGR=[index],其中index是短消息在SIM卡中的地址。如果讀取成功,既對(duì)應(yīng)的地址中存在信息,則返回CMGR:0,"",[id][content]index的值改成短消息在SIM卡中的地址即可。若短消息不存在,則返回ERROR。(2)發(fā)送短消息在發(fā)送短信之前,要對(duì)數(shù)據(jù)結(jié)構(gòu)體SM_PARAM進(jìn)行數(shù)據(jù)填充。其中短消息服務(wù)中心和目標(biāo)號(hào)碼的格式是不包含加號(hào)卻包含國家代碼的國際標(biāo)準(zhǔn)格式號(hào)碼,如34。在數(shù)據(jù)填充之前要將這些號(hào)碼文本進(jìn)行處理。在CSmartHomeDlg類中,必須對(duì)短信編碼解碼類CEncode和SM_PARAM結(jié)構(gòu)體進(jìn)行實(shí)例化。CEncodem_encode;SM_PARAMparam;在填充好機(jī)構(gòu)體以后,用下面一句nPduLength=m_(¶m,pdu);對(duì)短消息結(jié)構(gòu)體進(jìn)行PDU編碼,編碼結(jié)果放入pdu數(shù)組中,PDU長度返回到nPduLength。流程圖如圖4-23所示:SHAPE\*MERGEFORMAT圖4-23發(fā)送短信流程4.5圖象采集模塊中星微攝像頭采用了中星微301PLUSMIPEG視頻流

數(shù)據(jù)。MIPEG(MotionJPEG)主要是基于靜態(tài)視頻壓縮發(fā)展起來的技術(shù),特點(diǎn)是基本不考慮視頻流中不同幀之

間的變化,只單獨(dú)對(duì)某一幀進(jìn)行壓縮,通常可達(dá)到6:1的壓縮率。它的誤差穩(wěn)定性非常好,可以獲取清晰

度很高的視頻圖像,而且還可以靈活設(shè)置各路視頻清晰度,壓縮幀數(shù)。4.5.1攝像頭驅(qū)動(dòng)程序該攝像頭的官方提供了其在WindowsCE環(huán)境下的驅(qū)動(dòng)程序zc030x.dll和在VC下對(duì)其編程的lib庫文件zc030。只要在智能家居的工程屬性中,將其提供的lib庫文件導(dǎo)入即可使用它提供的一些函數(shù)。步驟:Project菜單->SmartHomeProperties,選擇左邊列表ConfigurationProperties->Linker->Input導(dǎo)入lib庫文件操作的截圖如圖4-24所示:圖4-24在VS2005中添加lib庫文件圖像采集模塊用到的主要函數(shù)有:capInitCamera()用來初始化視頻設(shè)備,并獲取當(dāng)前可用的視頻設(shè)備數(shù)目;capSetVideoFormat()設(shè)置視頻格式和分辨率。本系統(tǒng)使用的視頻格式為RGB24,分辨率為320×240像素;capGetPicture()獲取攝像頭最近捕捉的一幅位圖,存入指定的緩存中capCloseCamera()關(guān)閉視頻設(shè)備4.5.2視頻捕捉和視頻信息傳送攝像頭工作流程經(jīng)過了初始化攝像頭和捕捉視頻和關(guān)閉攝像頭等流程,詳細(xì)的流程如圖4-25所示:SHAPE\*MERGEFORMAT圖4-25攝像頭的工作流程CaptureThreadProc統(tǒng)應(yīng)用程序界面上的“打開攝像頭”按鈕后創(chuàng)建,在點(diǎn)擊“關(guān)閉攝像頭”后關(guān)閉。據(jù)包的大小為1440字節(jié)。在系統(tǒng)的運(yùn)行測試中,通過斷點(diǎn)調(diào)試的方式,知道攝像頭通過capGetPicture()函數(shù)獲取到的一幀圖象信息的大小大概在4000字節(jié)到5000將一幅畫面的數(shù)據(jù)發(fā)送到客戶端。4.6以太網(wǎng)通信模塊在智能家居中,嵌入式平臺(tái)充當(dāng)服務(wù)器的角色,相應(yīng)的PC視頻監(jiān)控端充當(dāng)客戶端的角色。服務(wù)器端與客戶端之間的通信基于TCP/IP協(xié)議。4.6.1TCP/IP協(xié)議Internet上使用的一個(gè)關(guān)鍵的底層協(xié)議是網(wǎng)際協(xié)議,通常稱IP協(xié)議。通過這個(gè)共同遵守的協(xié)議,可以使InternetIP協(xié)議是TCP/IP協(xié)議,IP協(xié)議用來幫助數(shù)據(jù)找到通往目的計(jì)算機(jī)的路徑[8]。IP層接收從網(wǎng)絡(luò)接口層發(fā)送過來的數(shù)據(jù)包,并把該數(shù)據(jù)包發(fā)送到更高層——TCPIP層也將從TCP層發(fā)送過來的數(shù)據(jù)包發(fā)送到接口層——網(wǎng)絡(luò)

層的更低層。而IP數(shù)據(jù)包是不可靠的,因?yàn)镮P協(xié)議并沒有做任何事情來確認(rèn)數(shù)據(jù)包的順序和它的完整性。

IP數(shù)據(jù)包中包含了發(fā)送數(shù)據(jù)包的計(jì)算機(jī)IP地址(源地址)和接收數(shù)據(jù)包的計(jì)算機(jī)IP地址(目標(biāo)地址)。

TCP協(xié)議主要是對(duì)IP數(shù)據(jù)包中被封裝好的TCP數(shù)據(jù)包進(jìn)行排序和錯(cuò)誤檢查。TCP更高層的應(yīng)用程序。應(yīng)用程序輪流將信息發(fā)給TCP層,TCP層將數(shù)據(jù)發(fā)送給IP層,最后通過設(shè)備驅(qū)動(dòng)和物

理介質(zhì)(網(wǎng)線)等發(fā)送到目標(biāo)計(jì)算機(jī)。如圖4-26所示。應(yīng)用層協(xié)議(HTTP、FTP等)傳輸控制協(xié)議TCP網(wǎng)間協(xié)議IP以太網(wǎng)驅(qū)動(dòng)程序硬件以太網(wǎng)接口圖4-26IP層與以太網(wǎng)驅(qū)動(dòng)器以及TCP層、應(yīng)用程序?qū)油ㄐ?.6.2軟件實(shí)現(xiàn)所有的TCP通信都發(fā)生在兩個(gè)端點(diǎn)或兩個(gè)套接字(Socket[8]。每個(gè)Socket都有一個(gè)端口號(hào)與一個(gè)IP地址。SocketSocketSocket將這段信息發(fā)送給另外一個(gè)Socket中,使這段信息能傳送到其他程序中。在智能家居系統(tǒng)的服務(wù)端,TCP編程的流程如下:(1)TCP服務(wù)器聲明一SOCKET類型的全局變量m_Socket;(2)通過bind函數(shù)綁定本地地址;(3)用Listen函數(shù)進(jìn)行監(jiān)聽客戶端連接(4)當(dāng)有客戶端請(qǐng)求時(shí),套接字采用Accept函數(shù)接受客戶端請(qǐng)求(5)服務(wù)端新添加一個(gè)單獨(dú)的套接字與客戶端進(jìn)行通訊。若用流程圖表示,如圖4-27所示。基于以上流程和原理,在VS2005中新添加兩個(gè)類——CTCPServer_CE和CTCPCustom_CE。其中CTCPServer_CE類用于開啟與關(guān)閉TCP服務(wù),以及打開監(jiān)聽套接字事件的線程。CTCPCustom_CE用于打開套接字和關(guān)閉套接字,以及向客戶端發(fā)送數(shù)據(jù)等。SHAPE\*MERGEFORMAT圖4-27TCP服務(wù)工作流程圖WSAStartup()函數(shù)以在應(yīng)用程序初始化WindowsSocketDLL,采用WindowsSocket中的其他有關(guān)API函數(shù)。在此之后,在程序中建立一個(gè)用于監(jiān)聽網(wǎng)絡(luò)的Socket,并定

義其采用的通訊協(xié)議——TCP協(xié)議。完成這一操作的函數(shù)是socket()。它的原型是:

SOCKETPASCALFARsocket(intaf,inttype,intprotocol)其中第二個(gè)形參用于指定套接字的通信類型,當(dāng)type為SOCK_STREAM時(shí),為遵從TCP協(xié)議的通信,若要遵

從UDP協(xié)議,應(yīng)設(shè)置為SOCK_DGRAM;在智能家居中,采用前者。根據(jù)流程,接下來要綁定一個(gè)IP地址和端口,這個(gè)地址和端口是客戶端將要連接的目標(biāo),通過調(diào)用bind()

函數(shù)可以完成這一操作,以下是bind()函數(shù)的原型。intPASCALFARbind(SOCKETs,conststructsockaddrFAR*name,intnamelen);

其中s為被操作的Socket對(duì)象,name是ARM端的IP地址。namelen為IP地址的長度。

ARMlisten()函數(shù)可以完成這一操

作。intPASCALFARlisten(SOCKETs,intbacklog);s為要操作的Socket;backlog為最大連接數(shù),在系統(tǒng)中設(shè)置為8。在客戶端發(fā)出連接請(qǐng)求時(shí),ARM客戶端調(diào)用accept()函數(shù),從而完成完整的連接操作。在智能家居系統(tǒng)的軟件設(shè)計(jì)中,將監(jiān)聽以太網(wǎng)通過一個(gè)線程來實(shí)現(xiàn)。SHAPE\*MERGEFORMAT圖4-28TCP讀線程工作流程4.7PC端視頻監(jiān)控模塊該模塊采用Delphi7BorlandWindows應(yīng)用程序開發(fā)的工具之一[9]Windows象編程語言。在Delphi中,提供了包含TCP通信控件在內(nèi)的許多控件使開發(fā)人員能夠快速構(gòu)建和實(shí)現(xiàn)應(yīng)用軟件系統(tǒng)?;谶@一特點(diǎn),PC客戶端采用Delphi編寫。PC端處于TCP/IPDelphi中的TCPClient控件完成。TCPClient控件需要完成的操作是:1)打開一個(gè)通信信道,連接到智能家居ARM服務(wù)器端的特定端口。2)向服務(wù)器發(fā)送服務(wù)請(qǐng)求報(bào)文,等待并接收應(yīng)答,如此反復(fù)3)請(qǐng)求結(jié)束后關(guān)閉通信通道并終止通訊。按照以下步驟建立好PC端視頻監(jiān)控程序的界面,如圖4-29所示圖4-30所示的是客戶端工作流程。圖4-29PC端視頻監(jiān)控程序界面A、打開Delphi7集成環(huán)境,系統(tǒng)自動(dòng)新建一個(gè)工程。BStandard控件工具箱的buttonlabel控件2EditGroupbox一個(gè),Additional工具箱里的Image控件一個(gè),Internet工具箱里的TCPClient控件一個(gè)。C、設(shè)置各控件屬性,如表4-10所示。表4-10PC端視頻監(jiān)控軟件控件設(shè)置情況控件種類名稱屬性設(shè)置窗體主窗體caption:“視頻監(jiān)控PC端”設(shè)置caption:“設(shè)置”,name:“BtnSetting”按鈕開啟視頻caption:“開啟視頻”,name:“BtnOpenCamera”關(guān)閉視頻caption:“關(guān)閉視頻”,name:“BtnCloseCamera”對(duì)方IP:caption:“對(duì)方IP:”,name:“Label1”標(biāo)簽對(duì)方端口:caption:“對(duì)方端口:”,name:“Label2”IPname:“txtIP”,text:“6”編輯框端口name:“txtPort”,text:“9000”TCPClientHost:“6”,Port:“9000”圖像框name:“VideoFrame”,height:“240”,width:“320”Image比較快,所以人眼看起來是動(dòng)態(tài)的圖象。界面中的文本框控件是為了能在對(duì)方的IP地址和端口號(hào)改變的情IPTCPClient控件的Host對(duì)方IP)和Port屬性(用于指定對(duì)方端口),再打開以太網(wǎng)通信通道,向ARM服務(wù)端進(jìn)行連接請(qǐng)求。SHAPE\*MERGEFORMAT圖4-30PC客戶端工作流程在程序設(shè)計(jì)中采用了Delphi中的TJpegImage對(duì)象和TMemory對(duì)象。TMemory對(duì)象用于存儲(chǔ)TCP層發(fā)送給應(yīng)用層的數(shù)據(jù)包包含的數(shù)據(jù),在接收完數(shù)據(jù)包后,程序創(chuàng)建TJpegImage類型對(duì)象jpg,jpg通過LoadFromStream()方法裝載緩沖區(qū)中的數(shù)據(jù),最后在窗體上的VideoFrame圖片控件上顯示出來。4.8家電控制及傳感器模塊在該模塊中,家電控制以及傳感器報(bào)警模塊依托89C51單片機(jī)豐富的I/O口完成。傳感器的報(bào)警狀態(tài)通過RS232串口向ARM發(fā)送相應(yīng)的字符串,由ARM端的應(yīng)用程序進(jìn)行解析。類似的,ARM端通過串口發(fā)送指定格式的字符串到單片機(jī)串口,串口打開相應(yīng)的LED,以表示對(duì)應(yīng)的家電的電源的打開。4.8.1單片機(jī)串口的配置在智能家居系統(tǒng)的家電控制板中,單片機(jī)的串行口通信采用10位為一幀的工作方式1101個(gè)起始位、8位數(shù)據(jù)位和1個(gè)停止位[10]。起始位D0D1D2D3D4D5D6D7停止位圖4-31單片機(jī)串行工作方式1的幀格式1SBUF8硬件自動(dòng)地在它的前面加入起始位和在后面加上一個(gè)停止位,構(gòu)成完整的幀格式。數(shù)據(jù)從串口的TXD輸出,輸出完一幀數(shù)據(jù)后,TXD輸出線保持高電平,并且SCON寄存器的TI位被置位為1,通知CPU可以發(fā)送下一幀數(shù)據(jù)。SCON寄存器的REN位被設(shè)為1RXDRXD片機(jī)識(shí)別出起始位到達(dá),在移位脈沖的控制下,讀完數(shù)據(jù)位并且將其存入接收寄存器中,直到停止位到達(dá),

置位RI中斷標(biāo)志位,單片機(jī)的CPU即可將數(shù)據(jù)取走。9600bps夠與ARM正常通信。波特率的大小由單片機(jī)的定時(shí)(計(jì)數(shù))器T1的計(jì)數(shù)溢出率決定。

在單片機(jī)擴(kuò)展板中,采用的是11.0592MHz的晶振,計(jì)算定時(shí)器的計(jì)數(shù)初值:

(4-1)其中smod=0,使波特率不倍增,PCON=00H。對(duì)于定時(shí)器1216位的計(jì)數(shù)器T18位

TH1作為預(yù)置寄存器,在初始化時(shí),將計(jì)數(shù)初值分別存入TH1和TL1中,即兩者內(nèi)容相同,當(dāng)計(jì)數(shù)溢出時(shí),

預(yù)置寄存器TH1將計(jì)數(shù)初值直接給TL1加載,這樣就避免了在程序中反復(fù)地存儲(chǔ)計(jì)數(shù)初值,進(jìn)一步的提高了定時(shí)的精度,保證了串行接口的波特率的穩(wěn)定,同時(shí)也是保證了串口通信的穩(wěn)定性。4.8.2串口通信的自定義約定為了便于單片機(jī)與ARM之間的通訊信息的解析,特別定義了以下自定義的信息交流的格式約定。A傳感器報(bào)警字符串,如圖4-32所示。#$#1報(bào)頭傳感器編號(hào)圖4-32傳感器報(bào)警字符串格式該字符串為

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論