毕业设计(论文)-PC机串口控制GSM模块收发短信系统设计.doc

上传人:哈尼dd 文档编号:3945869 上传时间:2019-10-10 格式:DOC 页数:25 大小:355.50KB
返回 下载 相关 举报
毕业设计(论文)-PC机串口控制GSM模块收发短信系统设计.doc_第1页
第1页 / 共25页
毕业设计(论文)-PC机串口控制GSM模块收发短信系统设计.doc_第2页
第2页 / 共25页
毕业设计(论文)-PC机串口控制GSM模块收发短信系统设计.doc_第3页
第3页 / 共25页
毕业设计(论文)-PC机串口控制GSM模块收发短信系统设计.doc_第4页
第4页 / 共25页
毕业设计(论文)-PC机串口控制GSM模块收发短信系统设计.doc_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《毕业设计(论文)-PC机串口控制GSM模块收发短信系统设计.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)-PC机串口控制GSM模块收发短信系统设计.doc(25页珍藏版)》请在三一文库上搜索。

1、PC机串口控制GSM模块收发短信系统设计 摘 要 SMS短信息服务作为GSM网络的一项基本业务已得到越来越多的系统运营商和系统开发商的重视,以GSM网络作为数据无线传输网络,可以开发出多种前景极其乐观的应用。本文只讨论通过PC机串口控制GSM终端模块实现中英文短信息收发的程序设计,以实现测控数据通过GSM网络在个人计算机上的收发、存储和处理,并详细讨论PDU模式的短信息格式和中文短信息软件编解码的设计。 关键词 SMS;PC机串口;GSM模块;AT指令;PDU编码解码1 引言SMS(ShortMessageService)短信息服务是GSM(GlobalSystemforMobileCommu

2、nication)系统中提供的一种GSM终端(手机)之间,通过短信服务中心(ServiceCenter)进行文本信息收发的应用增殖服务,其中服务中心完成信息的存储和转发功能。短信息服务作为GSM网络的一种基本业务,已得到越来越多的系统运营商和系统开发商的重视,基于这种业务的各种应用也蓬勃发展起来。以GSM网络作为数据无线传输网络,可以开发出多种前景极其乐观的应用,如无线数据的双向传送、无线远程检测和控制等。典型的应用有:变电站、电表、水塔、水库或环保监测点等监测数据的无线传输和无线自动警报;远程无线控制高压线路断电器、加热系统、防洪拦阻系统或其它机电系统的启动和关闭;车队交通管理和控制指挥系统

3、;控制和监测香烟、食品和饮料自动售货机的运行状态和存货水平等等。本文选用GSM模块BenQ M22,通过建立PC机的串行口程序,对该模块进行控制,以实现短信息的收发,在PC和应用系统(手机或各种监测系统)之间以GSM网络为纽带,即可实现远距离的数据传输。由于GSM网络在全国范围内实现了联网和漫游,具有网络能力强的特点,用户无需另外组网,在极大提高网络覆盖范围的同时为客户节省了昂贵建网费用和维护费用。同时,它对用户的数量也没有限制,克服了传统的专网通信系统投资成本大,维护费用高,且网络监控的覆盖范围和用户数量有限的缺陷。比起传统的集群系统在无线网络覆盖上具有无法比拟的优势,加上GSM的SMS本身

4、具备的数据传送功能,都使得这些应用得到迅速的普及。利用GSM短信息系统进行无线通信还具有双向数据传输功能,性能稳定,为远程数据传送和监控设备的通信提供了一个强大的支持平台。2 系统总体框图设计与原理概述2.1 系统总体框图整个通信系统分为传输网络和终端两个大部分,传输网络则利用了现有的GSM网络,而终端可以是手机终端或者是具有手机短信功能的模块终端,为了实现对数据的存储和处理,在终端加入了功能强大的个人计算机作为系统的控制中心,计算机与模块终端则通过串口进行通信。系统的总体框图如图1所示:GSM网络M22 模块SIM卡电源串口手机终端PC机图1 系统总体框图2.2 程序设计语言概述以及系统的界

5、面设计Visual Basic是一种可视化的、面向对象和采用事件驱动方式的结构化高级程序设计语言,可用于开发Windows环境下的种类应用程序。在Visual Basic环境下,利用事件驱动的编程机制、新颖易用的可视化设计工具,使用Visual Basic COM组件和Windows内部的应用程序接口(API)函数等,可以高效、快速地开发出Windows环境下功能强大、图形界面丰富的应用程序软件系统。在Visual Basic环境下设计的系统界面如图2所示:图2 系统界面2.3 AT指令介绍2.3.1 AT指令概述PC机串口和GSM引擎之间采用AT指令实现相互之间的通信,因此有必要先了解一下A

6、T指令的格式和一些与本设计系统有关的常用指令。PC机串口发出的AT指令用来建立通信链路,AT指令集的命令格式帧都以AT开头,“AT”或者“at”的前缀必须出现在每条命令行的开始。值为键入的设置值,是命令语法要求的一部分。如果该值可选,那么用方括号加以区分。当用AT指令命令设置了一个参数,那么这个值在它被改变之前一直是有效的。2. 3. 2 BenQ M22模块中与SMS有关的GSM AT指令介绍GSM引擎模块提供的命令接口符合GSM07.05和GSM07.07规范。GSM07.07中定义的AT Command接口,提供了一种移动平台与数据终端设备之间的通用接口;GSM07.05对短消息作了详细

7、的规定。在短消息模块收到网络发来的短消息时,能够通过串口发送指示消息,数据终端设备可以向GSM模块发送各种命令。GSM AT指令集,是由诺基亚、爱立信、摩托罗拉和HP等厂家共同为GSM系统研制的,其中包含了对SMS(Short Message Service)的控制。与SMS有关的GSM AT指令如表1所示:表1 与SMS相关的若干GSM AT指令AT指令 功 能 AT+CMGC Send an SMS command(发出一条短消息命令) AT+CMGD Delete SMS message(删除SIM卡内存的短消息) AT+CMGF Select SMS message format(选择

8、短消息信息格式:0-PDU;1-文本) AT+CMGL List SMS message from preferred store(列出SIM卡中的短消息信息格式PDU/text:0/REC UNREAD为未读,1/“REC READ”为已读,2/“STOU NSENT”为待发,3/“STO SENT”为已发,4/“ALL”为全部的) AT+CMGR Read SMS message(读短消息) AT+CMGS Send SMS message(发送短消息) AT+CMGW Write SMS message to memory(向SIM内存中写入待发的短消息) AT+CMGS Send SM

9、S message from storage(从SIM内存中发送短消息) AT+CNMI New SMS message indication(显示新收到的短消息) AT+CPMS Preferred SMS message storage(选择短消息内存) AT+CSCA SMS service center address(短消息中心地址) AT+CSCB Select cell broadcast message messages(选择蜂窝广播消息) AT+CSMP Set SMS text mode parameters(设置短消息文本模式参数) AT+CSMP Select Mess

10、age Service(选择短消息服务) 2. 4 PDU编码规则2. 4. 1 PDU编码格式目前,发送短消息常用Text和PDU(Protocol Data Unit,协议数据单元)模式。使用Text模式收发短信代码简单,实现起来十分容易,但最大的缺点是不能收发中文短信;而PDU模式不仅支持中文短信,也能发送英文短信。PDU模式收发短信可以使用3种编码:7-bit、8-bit和UCS2编码。7-bit编码用于发送普通的ASCII字符,8-bit编码通常用于发送数据消息,UCS2编码用于发送Unicode字符。发送和接收SMS信息有:Blocd Mod, Text Mod, 和 PDU Mo

11、d三种方式,本设计是在PDU Mode下发送和接收短信息的,所以首先要解决短信息的PDU编码和解码问题。PDU串表面上是一串ASCII码,由09、AF这些数字和字母组成。它们是8位字节的十六进制数,或者BCD码十进制数。PDU串不仅包含可显示的消息本身,还包含很多其他信息,如SMS服务中心号码、目标号码、回复号码、编码方式和服务时间等。发送和接收的PDU串,结构是不完全相同的。一般的PDU编码由A B C D E F G H I J K L M十三项组成,具体如下:A:短信息中心地址长度,2位十六进制数(1字节)。B:短信息中心号码类型,2位十六进制数。C:短信息中心号码,B+C的长度将由A中

12、的数据决定。D:文件头字节,2位十六进制数。E:信息类型,2位十六进制数。F:被叫号码长度,2位十六进制数。G:被叫号码类型,2位十六进制数,取值同B。H:被叫号码,长度由F中的数据决定。I:协议标识,2位十六进制数。J:数据编码方案,2位十六进制数。K:有效期,2位十六进制数。L:用户数据长度,2位十六进制数。M:用户数据,其长度由L中的数据决定。J中设定采用UCS2编码,这里是中英文的Unicode字符。下面用两个实例说明PDU串的结构和编排方式:1)、发送:SMSC号码是+8613800250500,对方号码是13851872468,消息内容是“Hello!”。从手机发出的PDU串可以是

13、:08 91 68 31 08 20 05 05 F0 11 00 0D 91 68 31 58 27 64 F8 00 00 00 06 C8 32 9B FD 0E 01 对照规范,以上数据信息的含义见表2:表2 发送PDU串结构 分段含义说明08SMSC地址信息的长度共8个8位字节(包括91)91SMSC地址格式(TON/NPI)用国际格式号码(在前面加“+”)68 31 08 20 05 05 F0SMSC地址8613800250500,补F凑成偶数个11基本参数(TP-MTI/VFP)发送,TP-VP用相对格式分段含义说明00消息基准值(TP-MR)00D目标地址数字个数共13个十进

14、制数(不包括91和F)91目标地址格式(TON/MPI)用国际格式号码(在前面加“+”)68 31 58 81 27 64 F8目标地址(TP-DA)8613851872468,补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!”2) 接收:SMSC号码是:+8613800250500,对方号码是13851872468,消息内容是“你好!”。手机接收到的PDU串可以是:08 91

15、 68 31 08 20 05 05 F0 84 0D 91 68 31 58 81 27 64 F8 00 08 30 30 21 80 63 54 80 06 4F 60 59 7D 00 21对照规范,PDU串数据信息说明如表3:表3 接收PDU串结构分段含义说明08地址信息的长度共8个8位字节(包括91)91SMSC地址格式(TON/NPI)用国际格式号码(在前面加“+”)68 31 08 20 05 05 F0SMSC地址8613800250500,补F凑成偶数个84基本参数(TP-MTI/MMS/RP)接收,无更多消息,有回复地址0D源地址数字个数共13个十进制数(不包括91和F)

16、91源地址格式(TON/MPI)用国际格式号码(在前面加“+”)68 31 58 81 27 64 F8源地址(TP-OA)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个字节4F 60 59 7D 00 21用户信息(TP-UD)“你好!”2. 4. 2 PDU编解码实现函数由于在GSM标准中,中文编码采用的是Unicode编码,而不是目前国内

17、常用的GB-2312编码,故还需要进行中文编码的转换,才能显示汉字字型。1 ) 中文转换成Unicode码函数因为手机短消息的发送是以PDU串的形式发送出去的,中文字符以Unicode码来表示,所以在发送中文短消息之前必须首先将中文字符转换为Unicode码,下面的函数将实现这个功能。这个函数主要应用到VB自带的一个格式转换函数:AscW()取ASCII码值。Public Function AscII2Unicode(ByVal CS As String)Dim Length As IntegerDim temp As StringDim i As IntegerDim tempO As St

18、ringDim tempN As StringtempN = tempO = CSLength = Len(tempO)For i = 1 To LengthIf AscW(Mid(CS, i, 1) = 0 And AscW(Mid(CS, i, 1) 128 Then temp = 00 & Hex(AscW(Mid(CS, i, 1)Else temp = Hex(AscW(Mid(CS, i, 1)End IftempN = tempN & temp Next i AscII2Unicode = Trim(tempN)End Function2) 短信中心手机号码的PDU串转换函数同上

19、,为了发送以PDU模式发送短消息,必须将手机号码和对方手机号也转换为PDU格式,下面的函数就是为了实现这种转换:Public Function telc(num As String) As StringDim tl As IntegerDim ltem, rtem, ttem As StringDim ti As Integerttem = tl = Len(num)If tl 11 And tl 13 Then MsgBox wrong number. & tl Exit FunctionEnd IfIf tl = 11 Then tl = tl + 2 num = 86 & numEnd

20、IfFor ti = 1 To tl Step 2 ltem = Mid(num, ti, 1) rtem = Mid(num, ti + 1, 1) If ti = tl Then rtem = F ttem = ttem & rtem & ltemNext titelc = ttemEnd Function手机号码有两种表示方法:11位和13位(带国家码86),一般手机发送时都是以13位形式表示的,所以以上的函数还有一个功能是自动将11位格式手机号码转换为13位形式,然后再转换为PDU串。3)Unicode码解码函数相比于手机短信的发送而言,手机短信的接收主要的工作正好与之相反。手机短信的

21、发送需要将待发送的短信内容转换为Unicode码,而短信的接收则需要将接收到的Unicode码转换成中文字符。下面的函数将实现解码功能。同手机短信发送的编码函数一样,这里也应用了一个VB内置的函数ChrB()函数来将Unicode码转换为中文:Public Function Unicode2AscII(ByVal s As String)On Error Resume NextDim i As IntegerDim r As StringFor i = 1 To Len(s) Step 4r = r + ChrB(&H & Mid(s, i + 2, 2) & ChrB(&H & Mid(s,

22、 i, 2)NextUnicode2AscII = rEnd Function243 PDU模式短信息的发送过程要实现短信息的转发,编写出有效的发送程序,要先来了解短信息的发送原理及其过程。首先,设置短信息的发送模式,本设计采用的是PDU模式:输入:AT+CMGF=0 回车系统会返回: OK然后发送短信息:假如,要向号码“ 13851872468”发送内容为“你好!”这么一条短信息,那么,先要把目标号码” 13851872468”转换为“ 68 31 58 81 27 64 F8”,短信息内容转化为Unicode码” 4F 60 59 7D 00 21”,然后再进行发送操作如下:输入:AT+C

23、MGS=021 回车当系统返回: 时,输入:0011000D91683158812764F8000801064F60597D0021返回: +CMGS: OK其中“AT+CMGS=021”中的021是由TPDU中用户数据前的PDU规约头的长度15字节+用户数据长度6字节得到。3 系统软件设计流图系统软件主要分系统初始化、短信息发送、短信息读取和删除等功能模块。分别列出其程序设计流图,如图3、图4、图5和图6所示(具体的功能函数见附件),而读取SIM卡中存储的电话号码则通过一个第三方组件TaoModual.ocx来实现。开始初始化串口串口初始化成功?初始化模块信息初始化模块成功?等待准备发送状态

24、提示信息编码设置编码模式输入对方号码和短信息内容按发送键发信息成功?打开串口?结束 图3 窗体初始化程序 图4 短信发送程序准备输入信息编号按读取键打开串口?设置编码模式成功读取信息?信息解码并显示读取状态显示结束输入信息编号按删除键送删除AT指令删除状态提示结束准备成功删除信息?打开串口?送读取AT指令 图5 读短信息程序 图6 删除短信息程序4 系统调试与总结1)在实际调试过程中,模块运行正常,性能稳定,实时性好。运行效果分别如图7、图8,图9所示:2)在开始调试过程中,也曾遇到了一个问题,如图10所示,信息发送状态报告总是出现错误的提示,但信息确实已经成功发送出去。经过一番的假设和调试后

25、,最后认为问题出在GSM模块的返回值上,很多资料都说在信息成功发送后会最后返回OK字符,但经过多次的试调证明,信息成功发送出去后并没有OK字符串返回的,故将判断条件取反即解决了问题。图7端口设计状态图图8信息读取状态图图9 信息删除状态图图10 信息发送状态报告3)短信中心的号码可接使用SIM卡中的号码,而不需要用户输入。有一条“AT+CSCA”指令,可用于设置或查询服务中心号码。若SIM卡中已存在此号码,有两种解决办法:一是用“AT+CSCA?”指令查询出来,然后自动将此号码写到PDU的SCA中;二是PDU的SCA字段只写一个“00”:即“08 91 68 31 ”-“00”。4)可用“AT

26、+CSCA=xxxxxxxx”指令设置服务中心号码。5)在编写程序过程中需要注意到,为了防止手机因过于繁忙而出错,要采取一定的方法让手机有充分的时间处理发送和接收及删除等操作。而VB里自带的Sleep()函数正是为此而设计的,设置不同参数值可改变其等待的时间,这样就可以避免因为手机过于繁忙而出现程序处理错误和系统死机等情况。6)由于设计系统模块需要提供+5V、+12V和-12V三路电源,在设计电源时,要注意把这三路电源的地线做成公共地线,即把它们的地线连通。7)在程序设计过程中,用到了MSCOMM32.OCX等内置组件,如果运行该应用程序的机器上没有这些组件,程序将无法正常运行,为了解决这一问

27、题,可以通过把相关的程序和组件进行打包,从而形成程序安装包 。8)总结:本论文主要论述了个人计算机通过串口通信控制GSM模块进行短信息接收和发送的工作原理以及相应的程序设计过程,着重分析了GSM AT指令及其用法和PDU编码解码的原理规则及相应的实现函数,还详细描述了PDU模式下短信息的发送过程和窗体初始化、短信息发送、短信息读取和删除等功能模块的程序流图。在整个设计工作过程中,从多方面学习了GSM模块收发短信息等基本功能的工作原理以及如何利用VB实现串口通信编程,掌握了PDU编码解码的原理和实现过程,并加深了计算机串口开发应用的认识。参考文献:1龚建伟, 熊光明. Visual C+/Tur

28、bo C 串口通信编程实践M. 北京:电子工业出版社,2004年。2求是科技. Visual C+ Visual Basic 串并口开发技术工程应用实例导航M. 北京:人民邮电出版社,2006。3刘炳文. Visual Basic 程序设计教程(第二版)M. 北京:清华大学出版社,2003。4北京达盛科技有限公司. Techshine(使用说明书 电子电气综合实训系统)M. 2627。System Design of PCs Serial Port Controlling GSM Module to Send and Receive Short MessagesXiao LinfaAbstra

29、ct:The SMS(Short Message Service) which has more and more been much accounted of the system developers and system operators is the value that a basic business of the GSM network. We can develop various applications that foreground is considerable using the GSM network as the network to transmit data

30、s wireless . This text just discusses the programmer of that PCs serial port controls the GSM module to realize Chinese or English short messages sending and receiving, which can realize measuer datas sending or receiving, memory and dealing on the personal computer through the GSM network. And bat

31、around the message format of PDU mode and programmer of Chinese messages coding and decoding.Key words: Short Message Service;PCs serial port;GSM module;AT commands;PDU coding and decoding附:系统源程序-全局变量声明-Dim portno As Integer 端口号Dim baudrate As Long 波特率Const prex = 0891 定义全局静态变量Const midx = 0011000D9

32、1Const sufx = 000801Private Const EM_LINESCROLL = &HB6-发送信息Private Declare Function SendMessage Lib user32 Alias SendMessageA (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long-Sleep函数(延时功能)Private Declare Sub Sleep Lib kernel32 (ByVal dwMilliseconds As Long)GetWin

33、dowTextW 指明这是一个 Unicode API (ASSIIunicode)Private Declare Function GetWindowText Lib user32 Alias GetWindowTextW (ByVal hwnd As Long, ByVal lpString As Long, ByVal cch As Long) As LongText2.Text = StrConv(StrConv(Text1.Text, vbUnicode), vbFromUnicode)Private Sub NewSMSeting() 检测新信息 If Mobcomm.PortOp

34、en = False Then Mobcomm.PortOpen = True End If Mobcomm.Output = AT+CNMI=1,1,0,0,1 + vbCr Timer2.Enabled = TrueEnd SubPrivate Function telc(num As String) As String 把电话号码转换成Unicode码 Dim tl As Integer Dim ltem, rtem, ttem As String Dim ti As Integer ttem = tl = Len(num) If tl 11 And tl 13 Then MsgBox

35、电话号码有误! & tl Exit Function End If If tl = 11 Then tl = tl + 2 num = 86 & num End If For ti = 1 To tl Step 2 ltem = Mid(num, ti, 1) rtem = Mid(num, ti + 1, 1) If ti = tl Then rtem = F ttem = ttem & rtem & ltem Next ti telc = ttemEnd Function将UNICODE转换中文Public Function Unicode2AscII(ByVal s As String)

36、On Error Resume NextDim i As IntegerDim r As StringFor i = 1 To Len(s) Step 4r = r + ChrB(&H & Mid(s, i + 2, 2) & ChrB(&H & Mid(s, i, 2)NextUnicode2AscII = rEnd FunctionPublic Function AscII2Unicode(ByVal CS As String) 把信息转换成Unicode码Dim Length As IntegerDim temp As StringDim i As IntegerDim tempO As

37、 StringDim tempN As StringtempN = tempO = CSLength = Len(tempO)For i = 1 To LengthIf AscW(Mid(CS, i, 1) = 0 And AscW(Mid(CS, i, 1) 0 Then Backstring = Mobcomm.Input Mobcomm.InBufferCount = 0 Mobcomm.OutBufferCount = 0 If InStr(Backstring, OK) Then Mobcomm.Output = AT+CMGS= + Str(ML) + Chr(13) + Chr(

38、10) Else GoTo err Exit Sub End If Backstring = End IfSleep (400)If Mobcomm.InBufferCount 0 Then Backstring = Mobcomm.Input Mobcomm.InBufferCount = 0 Mobcomm.OutBufferCount = 0 If InStr(Backstring, ) Then Mobcomm.Output = MS + Chr(26) Else GoTo err Exit Sub End If Backstring = End If Sleep (2000)If M

39、obcomm.InBufferCount 0 Then Backstring = Mobcomm.Input Mobcomm.InBufferCount = 0 Mobcomm.OutBufferCount = 0 If InStr(Backstring, OK) Then MsgBox 信息发送成功!, vbOKOnly, 系统提示 Else GoTo err Exit Function End If Backstring = End IfSleep (1000)Exit Suberr: MsgBox 信息发送成功!, vbOKOnly, 系统提示 MsgBox 传送出现错误,请重新发送!, vbOKOnly, 系统提示End SubPrivate Function Sendsms(num As String, msg As String) As Boolean 短信发送 Dim PDU, psmsc, pnum, pmsg, buf As String Dim Leng As String Dim Length As Integer Length = Len(msg) Length = 2 * Length Leng = Hex(Length) If Length 16 Then Leng = 0 & Leng psmsc = Trim(telc

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1