版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、论文摘要:本文讨论了基于Windows CE.net 5.0嵌入式操作系统,以使用Intel XScale270为CPU的ARM10嵌入式实验箱为硬件基础,以Visual Studio 2005和Delphi为软件开发平台的智能家居系统的设计与实现。通过详细的系统设计过程,开发了相应的软件程序,包括嵌入式操作系统Windows CE 5.0的定制、应用程序的界面设计、程序开发和单片机系统的底层编程。本设计融合了嵌入式系统、通讯、单片机、软件开发等学科的知识。系统测试结果表明,该系统设计差不多满足要求,并有一定的功能扩展空间。 1 绪论目前,科学技术进展迅速,借助飞速进展的网络和信息技术,人们能
2、够足不出户地纵览全球。为了适应信息化的需求,科研机构将智能化的理念引入小区 HYPERLINK /class_free/6_1.shtml t _blank 治理,并进一步引入家庭,从而产生了智能家居的概念。将手机 HYPERLINK /class_free/147_1.shtml t _blank 通信和以太网通信技术引入智能家居的设计,恰好利用了现有的良好的通信条件,使在外的业主能及时了解家中的安全,提高业主的安全感,而且通过手机实时操纵家电,提高了业主生活的舒适度。本文提出了基于嵌入式系统ARM10的智能操纵平台的设计,功能包括了短信操纵家电,传感器探测非正常 HYPERLINK /cl
3、ass_free/153_1.shtml t _blank 环境同时通过手机短信告知业主,以及以太网实时视频监控等功能。2 系统设计方案2.1 硬件总体设计框图依照上文的功能需要,设计出由ARM10为操纵核心,单片机操纵的家电操纵模块和传感器报警模块,同时包含GSM通信模块的智能家居系统,硬件结构框图如图2-1所示。SHAPE * MERGEFORMAT 图2-1 硬件设计框图2.2 操纵核心选择智能家居操纵系统采纳如图2-2所示的XSBase270作为开发平台,该平台基于Intel高性能的PXA270处理器,支持Windows CE和Linux等嵌入式操作系统,是针对教学和实验的多功能实验平
4、台。PXA270处理器的最高主频可达520MHz,且该处理器被加入了Wireless MXX技术,大大的提高了多媒体处理能力,而且加入了Intel SpeedStep动态电源治理技术,在保证CPU性能的前提下,最大限度的降低设备功耗1。XSBase270配置32M FLASH ROM,64M SDRAM,并配备了触摸屏、以太网、USB、串口、CF/MMC、PCMCIA等接口。满足了智能家居系统操纵中心的硬件要求。图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实验箱进行通信,其采纳了经典的兼容RS-232标准的MAX232芯片作为串口的电平转换芯片。电路的连接如图2-4所示:图2-4家电操纵板串行接口电路如上图所示,家电扩展板采纳的是常用的DB9头作为串口接口,其针脚定义图如图2-5所示:图2-5RS-232 DB9头针脚定义图其中2脚RxD为接收引脚,3脚TxD为发送引脚,GND为信号地引脚。一般情况下一般串口只接这几个引脚;专门的串口,如蓝牙串口除接
6、上述的三个脚之外,还接了DSR引脚和CTS引脚,是因为蓝牙串口的数据流输出采纳这两个脚的信号操纵;而其他引脚是跟MODEM相关的。在智能家居系统中,家电操纵板接一般串口,GSM模块接蓝牙串口。RS-232信号相关于信号地而言,在正负电平之间摆动。发送数据时,发送端输出的正电平在+5V到+15V之间,负电平在-5V和-15V之间。许多据传输时,线上为TTL电平。接收器典型的工作电平在+3V+12V与-3V-12V。由于发送电平和接收电平的差仅为23V左右,因此其共模抑制能力差,加上双绞线的分布电容,信号传输距离最大为15m,最高速率为20kb/s2。MAX232包含2个驱动器、2个接收器和一个电
7、压发生器电路,提供TIA/EIA-232-F电平。该器件符合TIA/EIA-232-F标准,每一个接收器将TIA/EIA-232-F电平转换成5V TTL/CMOS电平。每一个发送器将TTL/CMOS电平转换成TIA/EIA-232-F电平。图2-6MAX232引脚图2.3.2 家电操纵电路图2-7 模拟家电操纵电路家用电器操纵的接口电路如图2-7 所示,K1K4 为继电器,分不操纵四路家电的闭合和断开,Q1Q4 为继电器线圈电流驱动,电路由单片机的P1口进行操纵,DD1DD4 发光二极管用于显示某路操纵电路的工作情况,要紧为了调试电路而设置。2.3.3 传感器接口电路图2-8 传感器接口电路
8、图烟雾、煤气泄漏、红外等这些传感器的报警信号通过光电耦合接入单片机的P2 口,如图2-8 所示,在传感器没有报警信号时,光电耦合芯片处于截止状态,与之相接的单片机端口为低电平;当传感器有报警,传感器输出高电平,现在光电耦合芯片导通,与之相接的单片机端口为高电平,由单片机对报警信号进行采集并做出相应处理。2-9所示的西门子MC35 GSM/GPRS无线模块作为 HYPERLINK /class_free/147_1.shtml t _blank 通信工具。它支持EGSM900和GSM1800双频,支持数字、语音、短消息和传真,使用AT指令操纵发送短消息。它采纳9V直流电源供电,通过RS-232串
9、行端口与XSBase270试验箱连接进行通信。 图2-9 西门子MC352.5 视频监控模块视频采集模块采纳使用中星微(Vimicro)公司的ZC0301P芯片的摄像头, ZC0301P芯片可支持USB 1.1接口,硬件最高支持VGA分辨率(640480)。在VGA模式下可达到15帧/秒速率,在CIF(352288)和 SIF(320240)模式下可达到30帧/秒速率。它通过USB接口连接到XSBase270试验箱。图2-10301P摄像头2.6总体软件设计方案依照智能家居的硬件设计方案,设计出软件的总体设计方案如图2-11所示:图2-11 软件设计框图其中:、(1)家电操纵系统和GSM网络通
10、信各自独占一个RS-232串口。家电操纵系统接XSBase270的红外串口,GSM模块接蓝牙串口。如图2-12所示。(2)实时视频监控通过USB摄像头捕捉图像,图像数据通过以太网发送到PC客户端进行图像还原。(3)以太网通信基于TCP/IP协议,测试 HYPERLINK /class_free/153_1.shtml t _blank 环境为局域网,若投入到因特网的应用,则需要在服务端、客户端所在的局域网连接到因特网的网关即路由器上,要进行端口映射,才能够进行网络的连接。图2-12 红外串口与蓝牙串口智能家居系统的软件基于Windows CE 5.0嵌入式操作系统。Windows CE被设计成
11、一种分层结构,从下而上一共分为了硬件层、OEM层、操作系统层和应用层共四个层3。这种层次的结构将硬件和软件,操作系统和应用软件隔离开,以便于实现系统的移植。智能家居的软件设计要紧是集中在应用层。3 操作系统的定制Windows CE 5.0嵌入式操作系统的定制依靠Platform Builder5.0完成。Platform Builder是微软公司设计的用于嵌入式操作平台定制与驱动程序的开发的工具。推出它的目的之一确实是让用户能够更好的将嵌入式操作系统移植到特定的目标平台上。3.1 BSP的安装为了让Windows CE 5.0能在实验箱上运行起来,还必须安装XSBase270的板级支持包(B
12、SP)。板级支持包是介于主板和操作系统中驱动程序之间的一层,一般认为它属于操作系统的一部分,要紧是对操作系统的支持,为上层的驱动程序提供访问硬件设备寄存器的函数包。在PC上安装好Windows CE.net5.0和Platform Builder5.0后,打开实验箱附带光盘中的BSP文件夹,运行XSBase270_V010106.msi文件,安装XSBase270的BSP。如图3-1所示。图3-1 BSP安装程序文件安装好BSP后,进入Platform Builder5.0中定制基于“EMDOOR SYSTEMS XSBASE270:ARMV4I”的因特网应用类型的系统镜像设计4。如图3-2所
13、示。图3-2 定制系统时选择BSP种类3.2 添加平台特征和配置平台为了使系统在定制后能够满足差不多的应用,并保证对某些设备的支持,就要向所设计的平台中添加必要的特征。(1)添加USB Active Sync(File Sync)组件。只有添加此组件,才能使用PC的USB接口与Windows CE进行文件同步。这也是在应用软件调试过程中所必须的条件。 (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)添加文件系统支持。(Catalog - Core OS - Windows CE devices - File Systems and Data Store - Storage Manager - FAT File System)(4)添加分区 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)添加基于软件的输入系统(软键盘等)(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) 完成特性的添加后,设置平台的属性。在“Platform”菜单下单击“Setting”,在Configuration下拉菜单中选择“Emdoor Systems XSBase270:ARMV4I Release”项,选择Locale选项卡,进行系统 HYPERLINK /class_free/119_1.shtml t _blank 地理位置和环境 HYPERLINK /class_free/135_1.shtml t _blank 语言支持
18、的设置。Locales列表中,为最下端的“中文(中国)”项打勾。在Default Language下拉菜单里选择“中文(中国)”为系统的默认 HYPERLINK /class_free/135_1.shtml t _blank 语言。如图3-3所示。 图3-3 选择操作系统默认语言在Build Option列表中,只选择Enable Eboot Space in Memory(IMGEBOOT=1)和Write Run-time Image to Flash Memory(IMGFLASH=1)两项。如图3-4所示。图3-4 程序组建选项设置单击“Build OS”菜单下的“Sysgen”开始
19、组建操作系统。如图3-5所示:图3-5 生成操作系统镜像3.3 红外串口与蓝牙串口的打开经测试,在默认配置下生成的系统镜像,只打开了位于XSBase270模块板上的全功能调试串口,而位于接口扩展板上的红外串口和蓝牙串口并没有被打开。为了能够与家电操纵板和GSM模块连接,实现完整的智能家居系统的功能,必须将它们打开。(1)查找中断号中断号的定义是在试验箱所提供的板级支持包中被配置的。打开C:WINCE500PlatformXSBase270Srcincbsp_cfg.h文件。能够看到调试串口和 HYPERLINK /class_free/147_1.shtml t _blank 通信串口的中断号
20、的定义,如图3-6所示。图3-6 BSP中的串口中断定义能够看到调试串口BFUART的中断号是28,转化为16进制为0 x1c;通信串口SFUART中断号27,转换为16进制是0 x1b。(2)修改注册表打开以下文件夹,其中“F:platform270”是在新建操作系统平台时所存储它的磁盘位置。F:Platform270RelDirXSBase270_ARMV4I_Release打开platform.reg注册表文件,在此文件中包含了对一些硬件的初始化的代码。在“IF BSP_NOSERIAL!”与“END BSP_NOSERIAL!”两句代码之间,能够看到蓝牙串口的注册表初始化代码,下面只需
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、立的操作系统设计工程,选择Build OS菜单下的Make Run-Time Image命令,生成新的内核文件NK.bin。3.4 操作系统的生成与下载定制并组建Windows CE后,将会生成BootLoaderEBOOT.nb0文件和NK内核nk.bin,将它们烧写进入XSBase270实验箱。4 应用软件设计4.1 应用程序编写 HYPERLINK /class_free/153_1.shtml t _blank 环境开发环境:Microsoft Visual Studio 2005开发语言:Microsoft Visual C+ 2005软件开发包:XSBase270 SDK智能家居系
24、统的应用程序采纳Visual Studio 2005进行开发。Visual Studio是微软公司开发的Windows平台上的应用程序开发环境。Visual Studio能够创建Windows 下的Windows应用程序和网络应用程序,也能够用来创建网络服务、智能设备应用程序和Office插件5。Visual Studio 2005面向.net框架(2.0版本),同时能够开发跨平台的应用程序。图4-1 Visual Studio 20054.2 智能家居人机接口设计打开Visual Studio 2005,创建一个基于MFC Smart Device Application的VC+程序。如图4
25、-2所示:图4-2 新建智能家居的应用程序到选择平台步骤时选择XSBase270平台,删除默认的Pocket PC 2003平台。如图4-3所示。图4-3 选择软件开发包支持单击“Next”按钮进入选择应用程序类型和资源语言程序界面上采纳的语言的画面。如图4-4所示,选择“Dialog based”(基于对话框)类型,资源语言选择“中文(中国)”。其他项目保留默认的选项。图4-4 选择应用程序种类保持默认的设置,一直到完成新建项目向导。进入IDE环境。集成环境的窗口分布如图4-5所示:图4-5 Visual Studio 2005集成环境将对话框设计成如图4-6所示:图4-6 智能家居操作界面
26、设计表4-1 智能家居应用软件界面控件配置控件类型控件名称功能按钮控件初始化GSM初始化GSM模块开始摄像打开摄像头,开始视频捕捉停止摄像停止摄像头视频捕捉开始监听打开ARM的9000号端口,打开网络通信停止监听关闭端口,停止TCP通信冰箱打开家中的冰箱设备灯光打开家中的灯光设备微波炉打开家中的微波炉设备空调打开家中的空调设备关于我们查看软件作者版权声明信息退出程序关闭未关闭的线程,退出程序列表控件消息窗口用来显示用户发回的短信记录图片控件煤气煤气传感器报警信号,报警时红色,常态时绿色烟雾烟雾传感器报警信号,报警时红色,常态时绿色红外红外传感器报警信号,报警时红色,常态时绿色编辑框信息框实时显
27、示系统运行情况4.3串口 HYPERLINK /class_free/147_1.shtml t _blank 通信功能设计 4.3.1 串口通信协议串口通信协议采纳CCESeries类实现,通过对此类的成员函数的调用,完成对串口的初始化、读写操作等,在不用串口的情况下,还能够关闭串口。4.3.2 软件的实现在Visual Studio的解决方案视图里添加类CCESeries,如图4-7所示。CCESeries类的成员函数如表4-2所示。图4-7 在VS2005中建立CCESeries类表4-2 串口操作类CCESeries的成员函数函数作用函数名称打开串口BOOL OpenPort(HWND
28、 pPortOwner, UINT portNo = 1, UINT baud= 9600,UINT parity= NOPARITY, UINT databits= 8,UINT stopbits= 0 );关闭串口Void ClosePort();设置串口超时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);关闭读线程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中,驱动程序分为本地设备驱动和流设备驱动两种6。本地设备如键盘、触摸屏等,一般在设备生产后是可不能再更换的,相应的驱动这些设备的驱动程序也是必需的。而流接口设备驱动程序能够由第三方提供,支持另外添加到系统中的设备。而串口就属于流接口设备之一。流设备驱动在系统中是以三位字符串后跟一位数字表示的,关于串口而言,这三位字符是“COM”(不包括引号)。当引用一个流接口驱动程序时,除了三位字符后跟一位数字以外,还要紧跟一个冒号“:”(英文半角冒号),冒号是必需的,是为了区不桌面Windows的设备驱动程序的命名规则。该函数的流程图如图
31、4-8所示:图4-8 OpenPort函数流程图(1)串口的打开所有的流驱动程序都将采纳CreateFile函数打开串口设备。在Windows CE下,系统不支持设备的重叠I/O,因此不能在参数dwFlagsAndAttributes中传递FILE_FLAG_OVERLAPPED标志,返回的句柄要么是已打开的串口端口的句柄,或者是INVAILID_HANDLE_VALUE。CreateFile与大多数Windows函数不一样,打开失败时,不返回0。CreateFile函数的原型如下:HANDLE CreateFile(LPCTSTR lpFileName, / 对象路径名DWORD dwDes
32、iredAccess, /操纵模式DWORD dwShareMode, / 共享模式LPSECURITY_ATTRIBUTES lpSecurityAttributes, /安全属性(也即销毁方式)DWORD dwCreationDisposition, / 创建的方式DWORD dwFlagsAndAttributes, / 对象属性HANDLE hTemplateFile / 一个文件模板句柄);在CCESeries类中, HANDLE类型全局变量m_hComm存储CreateFile函数打开串口成功时的返回值,凭借此句柄能够操纵打开的串口对象;以读写的方式打开串口。(2)串口的设置打开串
33、口后,还必须对端口配置好正确的波特率、字符长度、停止位等等。在OpenPort函数中,使用两个函数GetCommState和SetCommState来配置串口。函数原型如下:BOOL SetCommState(HANDLE hRle, LPDCB lpDCB);BOOL GetCommState(HANDLE hFile, LPDCB lpDCB);这两个函数都包含了同样的参数,即已打开的串口的句柄和指向DCB结构的指针。DCB结构的设置如表4-4所示。表4-4 OpenPort函数中的串口DCB配置DCB定义项目设置值备注BaudRateBaud设置波特率为传入型参baud的值fBinary
34、TRUE二进制模式有效fParityTRUE支持奇偶校验ByteSizeDatabits设置数据位为传入型参databits,范围48ParityNOPARITY校验模式有效StopBitsStopbits设置停止位为传入型参stopbitsfOutxCtsFlowTRUE串口输出由端口的CTS线操纵fOutxDsrFlowTRUE串口输出由端口的DSR线操纵fDtrSensitivityDTR_CONTROL_ENABLE续表4-4 OpenPort函数中的串口DCB配置DCB定义项目设置值备注fDsrSensitivityFALSEfTXContinueOnXoffTRUE串口接收缓冲区已
35、满时,且驱动程序已传送了XOFF字符,则驱动程序停止传送字符fOutXFALSEXON/XOFF操纵不用于操纵串行输出fInXFALSEXON/XOFF操纵不为输入串行流使用fErrorCharFALSEfNullFALSE串行驱动不忽略接收到的空字节fRtsControlRTS_CONTROL_ENABLEfAbortOnErrorFALSE串口发生错误时,并不终止串口读写来源: HYPERLINK / t _blank 论文天下论文网 HYPERLINK / t _blank (3)串口超时设置 设置好串口驱动操作的配置后,一个必要的步骤是,设置端口的超时值。所谓超时,是指Windows
36、CE.net在读串口和写串口的自动返回前等待读或写操作的时刻长度。在程序中,用以下两个函数操纵串行超时。BOOL GetCommTimeouts(HANDLE hFile, LPCOMMTIMEOUTS lpCommTimeouts);BOOL SetCommTimeouts(HANDLE hFile, LPCOMMTIMEOUTS lpCommTimeouts);这两个函数都包含了对应的串行设备的句柄和COMMTIMEOUTS结构的指针,COMMTIMEOUTS结构定义为:typedef struct _COMMTIMEOUTSDWORD ReadIntervalTimeout;DWORD
37、ReadTotalTimeoutMultiplier;DWORD ReadTotalTimeoutConstant;DWROD WriteTotalTimeoutMultiplier;DWORD WriteTotalTimeoutConstant;COMMTIMEOUTS;(4)其他的函数设置串口的输入输出缓冲区。原型如下BOOL SetupComm(HANDLE hFile, DWORD dwInQueue, DWORD dwOutQueue);设置串口检测的事件集。SetCommMask(HANDLE hFile,DWORD dwEvtMask);通过那个函数,能够使线程等待如表4-5中的
38、常见的串口驱动程序事件。表4-5 串口驱动程序事件事件标志表达意义EV_BREAK检测到中断EV_CTSCTS更改状态EV_DSRData Set Ready信号更改状态EV_ERR串行驱动程序检测到错误EV_RKSDReceive Line Signal Detect 行更改状态EV_RXCHAR接收到一个字符EV_RXFLAG接收到一个事件字符EV_TXEMPTY传输缓冲区为空关闭串口调用CloseHandle能够关闭一个串行端口,用关闭在打开串口时创建的那个句柄即可关闭串口了。方法如下CloseHandle(m_hComm);关闭线程函数:BOOL TerminateThread(HAN
39、DLE hThread, DWORD dwExitCode); 其中,hThread为要关闭的线程的句柄。dwExitCode一般为0。若成功关闭,则返回一个非零值。关闭串口函数的工作流程如图4-9所示。SHAPE * MERGEFORMAT 图4-9 ClosePort函数流程图 串口读线程读串口ReadFile函数原形:BOOL ReadFile(HANDLE hFile, /文件的句柄LPVOID lpBuffer, /用于保存读入数据的一个缓冲区DWORD nNumberOfBytesToRead, /要读入的字符数LPDWORD lpNumberOfBytesRead, /从文件中实
40、际读入的字符数LPOVERLAPPED lpOverlapped /异步读取描述,在Windows CE中为NULL);在该线程中,若串口读完一条信息,则发送一个系统消息到系统窗体,该消息的名称为WM_RXCHAR_ALL,是一个用户自定义消息。发送给系统窗体的附带消息包含收到的消息的内容和消息的长度。发送系统消息的API函数SendMessage的原型如下:LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam);图4-10 串口读线程流程图 写串口在CCESeries类中,一共编写了三个写串口的函数,为的是方便不
41、同情况下的调用。如要向写已知长度的字符串,能够采纳WritePort(char *buf,int nSize)函数。写未知长度字符串时,采纳WritePort(char *buf)函数,字符串的长度将在函数内部进行计算。前者提高了写串口的时刻效率。这三个函数中,采纳了一个共同的API函数WriteFile(),它的函数原型如下:BOOL WriteFile(HANDLE hFile, / 文件句柄LPCVOID lpBuffer, / 数据缓存区指针DWORD nNumberOfBytesToWrite, / 要写的字节数LPDWORD lpNumberOfBytesWritten, / 用于
42、保存实际写入字节数的存储区域的指针LPOVERLAPPED lpOverlapped / OVERLAPPED结构体指针,CE里设为NULL); 串口类的调用在主程序中,必须调用此CCESeries类,以达到操作串口的目的。在定义智能家居的窗口行为的CSmartHomeDlg类的头文件CSmartHomeDlg.h文件中,添加CCESeries.h头文件。同时新建一个public HYPERLINK /class_free/10_1.shtml t _blank 公共型变量m_BTSerial(蓝牙串口)和m_IRSeries进行对CCESeries类的实例化。CCESeries m_BTSe
43、rial;CCESeries m_IRSerial;在用于CSmartHomeDlg类成员函数的定义的文件CSmartHomeDlg.cpp文件中,采纳形如m_BTSerial.OpenPort(this-m_hWnd,1,9600)的方式进行串口类成员函数的调用。 串口的监听在读串口线程中,读完串口的一条信息后发送名为WM_RXCHAR_ALL的系统消息给系统窗体。在窗体程序中,必须对其进行响应。在CSmartHomeDlg.cpp文件中,添加一条消息响应的声明:ON_MESSAGE(WM_RXCHAR_ALL,OnComRecvMsg)其中OnComRecvMsg为对其消息响应的函数,函数
44、的声明如下:afx_msg long OnComRecvMsg(WPARAM wParam, LPARAM lParam);其中“afx_msg”讲明该函数是一消息响应函数。4.4 GSM HYPERLINK /class_free/147_1.shtml t _blank 通信模块 智能家居以GSM网络作为数据的无线传输网络,利用基于GSM网络上的短信息服务,完成智能家居的远程安全监控和无线报警的功能。4.4.1 设计差不多原理 PDU编码规则自短信息技术被开发到现在,对短信息的操纵方式包含了Block Mode、基于AT的Text Mode基于AT指令的PDU Mode。 使用Block模
45、式需要厂家驱动的支持,随着技术的进展,后两种模式将其取代。Text模式比较简单,但不能发送中文短信息。在智能家居的软件设计中,采纳的是基于PDU模式,该模式支持各个国家 HYPERLINK /class_free/135_1.shtml t _blank 语言,因此也包括中文。在智能家居中,采纳中文报警和中文指令。PDU数据包格式,是手机发送短信的一个数据单位7。其中的发送源手机号码、短消息服务中心号码(SMSC)、时刻戳等差不多上用压缩BCD码表示,低位在前,高位在后。在PDU模式中,可采纳Bit7、Bit8和UCS2编码方式对短消息发送内容进行编码。这三种编码方式能够发送的最大字符数分不为
46、160,140和70。其中Bit7编码发送一般ASCII字符,从0 x00到0 x7f,共能够表示128个字符。而短消息的报文是以8位字节传输的,因此就必须把8位码压缩成7位码。实现方法是: 将第二个字符的最后一位, 补充到第一个字符的前面第一位, 第三个字符的后两位, 补充到第二个字符的前两位, 依次类推, 就可得到相应的字符串。最后转换成十六进制。Bit8编码通常用于发送任何二进制数据。UCS2编码用于发送Unicode字符。它固定使用16位共两个字节来表示一个字符,共能够表示65535个字符。图4-11和图4-12分不是接收和发送短信的报文格式。图4-11 接收短信的报文格式图4-12
47、发送短消息的报文格式实例一、发送短信时的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 发送PDU包解析分段含义讲明08SMSC地址信息的长度共8个八位字节(包括91)91SMSC地址格式(TON/NPI)用国际格式号码(在前面加+)68 31 08 20 01 05 F0SMSC地址8613800250500,补F凑成偶数个11差不多参数(TP-MTI/VFP)发送,TP-VF用相对格式00消息基准值(TP-MR)00B目标地址数字个数共11位,不包
48、括补足的F91目标地址格式(TON/NPI)用国际格式号码(在前面加+)68 31 18 48 31 46 F9目标地址(TP-DA)8613818413649,补F凑成偶数个00协议标识(TP-PID)是一般GSM类型,点到点方式00用户信息编码方式(TP-DCS)7-bit编码00有效期(TP-VP)5分钟06用户信息长度(TP-UDL)实际长度6个字节C8 32 9B FD 0E 01用户信息(TP-UD)“Hello!”结合发送短信的报文格式,明白短消息中心号码是:+8613800210500,对方号码是消息内容是“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个八位字节(包括91)91SMSC地址格式(TON/NPI)用国际格式号码(在前面加+)68 31 08 20 05 05 F0SMSC地址8613800250500,补F凑成偶数位84差不多参数(TP-MTI/MMS/RP)接收,无更多消息,有回复地址0B回复地址数字个数共11个十进制数(不包括F)91回复地址格式(
50、TON/NPI)用国际格式号码(在前面加+)68 31 58 81 27 64 F8回复地址(TP-RA)8613851872468,补F凑成偶数位00协议标识(TP-PID)是一般GSM类型,点到点方式08用户信息编码方(TP-DCS)UCS2编码30 30 21 80 63 54 80时刻戳(TP-SCTS)2003-3-12 08:36:45 +8时区06用户信息长度(TP-UDL)实际长度6个字节53 4E 4E 1C 00 21用户信息(TP-UD)“华东!”短消息中心号码是:+8613800210500,对方号码消息内容是“华东!”。 AT指令在智能家居中
51、,操纵中心通过串口给MC35模块发送AT指令以达到操纵它的目的。表4-8中是一些系统中采纳的AT指令。表4-8 系统采纳的AT指令AT指令功能AT+CMGF=0选择短消息信息格式,等于0时为PDU格式,等于1时为文本模式,AT+CNMI=1,1,0,0,1设置为短信到达时自动提醒AT+CMGS=?发送短消息,发送成功则返回OK字符串AT+CMGR=?读取短消息,读取成功则返回+CMGR: 0,idcontentAT+CMGD=?删除短消息4.4.2 软件的实现 PDU编码解码短信的PDU解码和编码的功能由智能家居软件工程中的CEncode类实现。CEncode类的成员函数如表4-9所示:表4-
52、9 CEncode类的方法方法备注Int gsmString2Bytes(const char* pSrc, unsigned char* pDst, int nSrcLength)可打印字符串转换为字节数据如:C8329BFD0E01 - 0 xC8, 0 x32, 0 x9B, 0 xFD, 0 x0E, 0 x01int gsmBytes2String(const unsigned char* pSrc, char* pDst, int nSrcLength)字节数据转换为可打印字符串如: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)正常顺序的字符串转换为两两颠倒的字符串,若长度为奇数,补F凑成偶数。如:8613851872468 - 683158812
55、764F8int gsmSerializeNumbers(const char* pSrc, char* pDst, int nSrcLength)两两颠倒的字符串转换为正常顺序的字符串。如:683158812764F8 - 8613851872468Int gsmDecodePdu(const char* pSrc, SM_PARAM* pDst)PDU解码,用于接收、阅读短消息int gsmEncodePdu(const SM_PARAM* pSrc, char* pDst)PDU编码,用于编制、发送短消息来源: HYPERLINK / t _blank 论文天下论文网 HYPERLINK
56、 / t _blank 在该类中,关键的函数为gsmDecodePdu函数与gsmEncodePdu函数,它们将在智能家居中的对话框类CSmartHomeDlg中被调用。调用方法将在下文给予介绍。gsmDecodePdu函数与gsmEncodePdu函数分不用来在发短信时依照PDU规范进行编码,以及对串口收到的PDU编码进行解码。编码与解码依照在头文件中定义的短消息结构体进行取值或填充。以下是定义的关于编码方式的常量和填充短消息的数据结构。这些在接收与发送短信时是共用的。 #define GSM_7BIT 0 /7Bit编码方式#define GSM_8BIT 4 /8Bit编码方式#defi
57、ne GSM_UCS2 8 /UCS2编码方式typedef struct char SCA16; / 短消息服务中心号码(SMSC地址) char TPA16; / 目标号码或回复号码(TP-DA或TP-RA) char TP_PID; / 用户信息协议标识(TP-PID) char TP_DCS; / 用户信息编码方式(TP-DCS) char TP_SCTS16; / 服务时刻戳字符串(TP_SCTS), 接收时用到 char TP_UD161; / 原始用户信息(编码前或解码后的TP-UD) char index; / 短消息序号,在读取时用到 SM_PARAM; CEncode类各成
58、员函数的作用和工作流程:gsmDecodePdu()函数用于接收、阅读短消息。输入源PDU串的指针,目标PDU参数指针,并返回用户信息长度。源PDU串是可打印字符串,如“C8329BFD0E01”,目标PDU参数是字节数据,如“0 xC8, 0 x32, 0 x9B, 0 xFD, 0 x0E, 0 x01”,在那个函数中,较多的采纳了同在一个类中的可打印字符串转换为字节数据的函数gsmString2Bytes;在短消息服务中心(SMSC)和回复号码的字符处理过程中,依照PDU串的编码规范,需要对描述SMSC的字符串段进行两两颠倒,同时去掉经颠倒后的字符串后的最后一个字符“F”,那就采纳了同在
59、一个类中的gsmSerializeNumbers函数;通过数据分离,将PDU串中的描述短信编码位TP-DCS跟规定的数值进行对比,如表示7位码的数值为0,8位码为4,UCS2编码为8等。对比完成后,将用户信息进行对应方式的解码如7位解码。它的工作流程如图4-13所示。SHAPE * MERGEFORMAT 图4-13 CEncode类gsmDecodePdu函数工作流程gsmEncodePdu()函数用于编制、发送短消息,输入源PDU参数指针,输出目标PDU串指针,并返回目标PDU串长度。源PDU参数是字节信息,如“0 xC8, 0 x32, 0 x9B, 0 xFD, 0 x0E, 0 x0
60、1,目标PDU参数是字节数据,如“C8329BFD0E01”,在那个函数中,较多的采纳了同在一个类中的字节数据转换为可打印字符串的函数gsmBytes2String;在短消息服务中心(SMSC)和回复号码的字符处理过程中,依照PDU串的编码规范,需要对描述SMSC号码进行两两颠倒,同时在经颠倒后的字符串后加上一个字符“F”,那就采纳了同在一个类中的gsmInvertNumbers函数;依照描述短信编码的TP-DCS跟规定的数值进行对比,如表示7位码的数值为0,8位码为4,UCS2编码为8等。对比完成后,将用户信息进行对应方式的编码如7位编码。它的工作流程如图4-14所示。SHAPE * MER
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度智能家居产品销售租赁合同3篇
- 2024年度设立体育健身分公司运营管理合作协议3篇
- 2024全新家居建材业务员劳动合同范本3篇
- 2024年度基础设施建设项目委托代付服务协议3篇
- 2024年HSE安全评价与咨询服务协议范本3篇
- 2024年度工程成本分析与控制服务合同2篇
- 2024年新能源汽车充电设施建设与运营合同书下载2篇
- 2024上诉状撰写与房屋买卖合同纠纷调解与执行服务3篇
- 2024年全新版买方土地居间服务标准合同2篇
- 2024年度IT基础设施外包服务合同-网络维护与支持3篇
- 专题07:回忆性散文阅读(考点串讲)
- 2024年云南省昆明滇中新区公开招聘20人历年(高频重点复习提升训练)共500题附带答案详解
- 医院检验科实验室生物安全程序文件SOP
- 学问海鲜智慧树知到期末考试答案2024年
- 教你成为歌唱达人智慧树知到期末考试答案2024年
- 文件管理控制程序51269
- 机械工程学报标准格式
- 中石化HSE基础知识
- 煤矿企业安全生产信息填报说明
- PCB命名规则详解
- 电活性聚合物5.7
评论
0/150
提交评论