欢迎来到装配图网! | 帮助中心 装配图网zhuangpeitu.com!
装配图网
ImageVerifierCode 换一换
首页 装配图网 > 资源分类 > DOC文档下载
 

PC机串口控制GSM模块收发短信系统设计(流程图+源程序)论文

  • 资源ID:77492441       资源大小:36.14KB        全文页数:26页
  • 资源格式: DOC        下载积分:10积分
快捷下载 游客一键下载
会员登录下载
微信登录下载
三方登录下载: 微信开放平台登录 支付宝登录   QQ登录   微博登录  
二维码
微信扫一扫登录
下载资源需要10积分
邮箱/手机:
温馨提示:
用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

PC机串口控制GSM模块收发短信系统设计(流程图+源程序)论文

PC机串口控制GSM模块收发短信系统设计(流程图+源程序)-论文PC机串口控制GSM模块收发短信系统设计(流程图+源程序)Abstract: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 datas 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 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 = "0011000D91"Const sufx = "000801"Private 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)'GetWindowTextW' 指明这是一个 Unicode API (ASSII<->unicode)Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextW" (ByVal hwnd As Long, ByVal lpString As Long, ByVal cch As Long) As Long'Text2.Text = StrConv(StrConv(Text1.Text, vbUnicode), vbFromUnicode)Private Sub NewSMSeting()       '检测新信息 If Mobcomm.PortOpen = 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 "电话号码有误!" & 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)    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 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) < 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 FunctionPrivate Function ConTelc(teln As String)    '电话号码译码Dim i As IntegerDim ltem, rtem, ttem As Stringttem = ""For i = 1 To 14 Step 2ltem = Mid(teln, i, 1)rtem = Mid(teln, i + 1, 1)If i = 13 Then ltem = ""ttem = ttem & rtem & ltemNext iConTelc = "+" + ttemEnd FunctionPrivate Function ConTimec(times As String)   '时间译码  Dim Timetem As String  Timetem = Mid(times, 2, 1) + Mid(times, 1, 1) + "/" + Mid(times, 4, 1) + Mid(times, 3, 1) + "/" _  + Mid(times, 6, 1) + Mid(times, 5, 1) + "  " + Mid(times, 8, 1) + Mid(times, 7, 1) + ":" + _  Mid(times, 10, 1) + Mid(times, 9, 1) + ":" + Mid(times, 12, 1) + Mid(times, 11, 1)  ConTimec = TimetemEnd FunctionPrivate Sub SMSend(ML As Integer, MS As String)     '信息发送函数Dim Backstring As String'If Mobcomm.PortOpen = False Then'Mobcomm.PortOpen = True'End IfMobcomm.InBufferCount = 0Mobcomm.OutBufferCount = 0Mobcomm.InputLen = 0Backstring = ""Sleep (100)Mobcomm.Output = "AT+CMGF=0" + vbCrSleep (400)If Mobcomm.InBufferCount > 0 Then   Backstring = Mobcomm.Input   Mobcomm.InBufferCount = 0   Mobcomm.OutBufferCount = 0 1116PC机串口控制GSM模块收发短信系统设计(流程图+源程序) If InStr(Backstring, "OK") Then      Mobcomm.Output = "AT+CMGS=" + Str(ML) + Chr(13) + Chr(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 Mobcomm.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("8613800758500")       pnum = Trim(telc(num)       pmsg = Trim(StrConv(msg, vbUnicode)       PDU = prex & psmsc & midx & pnum & sufx & Leng & pmsg       Sleep (1)       Call Portopen_Test       Mobcomm.Output = "AT+CMGF=0" + vbCr       Mobcomm.Output = "AT+CMGS=" & Str(15 + Length) + vbCr       Sleep (500)        If Mobcomm.InBufferCount > 0 Then           Mobcomm.InputLen = 0           buf = Mobcomm.Input           If InStr(buf, ">") Then              Mobcomm.Output = PDU & Chr$(26)              buf = ""           End If        End If        If Mobcomm.InBufferCount > 0 Then           Mobcomm.InputLen = 0           buf = Mobcomm.Input              If InStr(buf, "OK") Then                                 buf = ""                 Sendsms = True              End If        End IfEnd FunctionPrivate Sub readsms(rnum As String)     '接收信息 Mobcomm.Output = "AT+CMGF=1" + vbCr Mobcomm.Output = "AT+CMGR=" & rnum + vbCrEnd SubPrivate Sub Command1_Click()    myActiveX.Active = False    myActiveX.ComPort = Combo1(1).Text        myActiveX.baudrate = Int(Val(Combo2(1).Text)    MsgBox "设置端口号为:" & Combo1(1).Text & ",波特率为:" & Combo2(1).Text & tl       myActiveX.Active = TrueEnd SubPrivate Sub Command2_Click()msg.Text = ""End SubPrivate Sub Command3_Click()     DebugText "= SIM卡信息 ="     DebugText "  SIM卡IMSI:  " + myActiveX.IMSI     DebugText "  短信中心:   " + myActiveX.SCA     DebugText "  所属网络:   " + myActiveX.Provider     DebugText "  短信数目:   " + myActiveX.SMSMemUsed     DebugText "  短信容量:   " + myActiveX.SMSMemTotal  = 0Mobcomm.InputLen = 0Sleep (100)'Mobcomm.Output = "AT+CMGF=1" + vbCr'Sleep (400)PC机串口控制GSM模块收发短信系统设计(流程图+源程序)'Mobcomm.InBufferCount = 0Mobcomm.Output = "AT+CMGD=" + index.Text + Chr(13) + Chr(10)Sleep (400)'mobcomm.OutBufferCount = 0'mobcomm.Output = "13138529082" + vbCrIf Mobcomm.InBufferCount > 0 ThenInstring = Mobcomm.InputIf InStr(Instring, "OK") Then           MsgBox "成功删除第" + index.Text + "条信息!", vbOKOnly, "提示"        Else           MsgBox "信息删除不成功!"End IfEnd If'rmsg.Text = Mid(Instring.Text, 1, InStr(Instring, Chr(13) + Chr(10)'rmsg.Text = Unicode2AscII(stringdeal(Instring)'rmsg.Text = Mid(Instring, 11)'Sleep (100)'mobcomm.OutBufferCount = 0'mobcomm.Output = Text1.Text + Chr(26)Sleep (100)'End If'If InStr(Instring, "OK") Then'End IfIf Mobcomm.PortOpen = True Then   Mobcomm.PortOpen = False   End IfmyActiveX.Active = True'If Mobcomm.PortOpen = False Then'   Mobcomm.PortOpen = True'End If'   Mobcomm.Output = "AT+CMGD=" & index.Text + vbCr '  Sleep (300) '  If Mobcomm.InBufferCount > 0 Then '     Mobcomm.InputLen = 0 '     temp$ = Mobcomm.Input '     Mobcomm.InBufferCount = 0 '       If InStr(buf, "OK") Then '          MsgBox "该信息已删除!" '       Else  '         MsgBox "信息删除不成功!"'        End If'   End IfEnd SubPrivate Sub Form_Load() Combo1(1).ListIndex = 0 '选择端口和波特率  Combo2(1).ListIndex = 4   myActiveX.Active = True    '打开模块 End SubPrivate Sub msgsend_Click()Dim MsgAdr As StringDim TelNo As StringDim Smsg  As StringDim PDU   As StringDim Leng As StringDim Length As IntegerDim AllLength As IntegerLength = 2 * Len(msg.Text)Leng = Hex(Length)If Len(Leng) = 1 ThenLeng = "0" & LengEnd IfAllLength = 15 + LengthMsgAdr = Trim(telc("8613800758500")  '肇庆动感地带短信信中心地址TelNo = Trim(telc(teln.Text)         '手机号码Smsg = Trim(AscII2Unicode(msg.Text)   '短信息内容PDU = midx & TelNo & sufx & Leng & Smsg'PDU = "0011000D91683167006059F100080108828265E55FEB4E50"'AllLength = 23myActiveX.Active = FalseIf Mobcomm.PortOpen = False Then   Mobcomm.PortOpen = True  SMSend AllLength, PDU                    '调用短信息发送程序End IfIf Mobcomm.PortOpen = True Then   Mobcomm.PortOpen = False   myActiveX.Active = TrueEnd If' myActiveX.SendTextSMS Trim(teln.Text), Trim(msg.Text) 'If Sendsms(Trim(teln.Text), Trim(msg.Text) = True Then 'If Sendsms = True Then' MsgBox "信息发送成功!" 'End If End SubPrivate Function stringdeal(ByVal st As String)stringdeal = Mid(st, InStr(st, Chr(10) + 16)End FunctionPrivate Sub rm_Click() '阅读信息Dim N As IntegerDim Instring As String= 0Mobcomm.InputLen = 0Sleep (100)Instring = ""Mobcomm.Output = "AT+CMGF=0" + vbCrSleep (400)If Mobcomm.InBufferCount > 0 Then   Instring = Mobcomm.Input   Mobcomm.InBufferCount = 0   Mobcomm.OutBufferCount = 0   If InStr(Instring, "OK") Then   Mobcomm.Output = "AT+CMGR=" + index.Text + Chr(13) + Chr(10)   End If   Instring = ""End IfSleep (500)If Mobcomm.InBufferCount > 0 ThenInstring = Mobcomm.InputPC机串口控制GSM模块收发短信系统设计(流程图+源程序)SMSdeal InstringSleep (100)   If InStr(Instring, "OK") Then      MsgBox "成功读取第" + index.Text + "条信息!", vbOKOnly, "系统提示"   Else      MsgBox "该信息为空!", vbOKOnly, "系统提示"   End If   Instring = ""End IfIf Mobcomm.PortOpen = True Then   Mobcomm.PortOpen = False   myActiveX.Active = TrueEnd IfEnd SubPrivate Function SMSdeal(SMS As String)On Error Resume Next Dim SM As String Dim SN As String Dim STIME As String Dim SMG As String Dim SLONG, N As IntegerIf InStr(SMS, "0891") ThenSM = Mid(SMS, InStr(SMS, "0891")SN = ConTelc(Mid(SM, 25, 14)STIME = ConTimec(Mid(SM, 43, 14)SLONG = CInt(Mid(SM, 57, 2)N = SLONG * 4SMG = Unicode2AscII(Mid(SM, 59, N)    rmsg.Text = "  短信类型: " + "已读信息" + vbCr + vbLf + "  对方号码: " + SN + vbCr + vbLf + "  发送时间: " _    + STIME + vbCr + vbLf + "  短信长度: " + Str(SLONG / 2) + "字节" + vbCr + vbLf + "  信息内容:" + SMG + vbCr + vbLfElseIf InStr(SMS, "018") Then    SM = Mid(SMS, InStr(SMS, "018")    SLONG = CInt(Mid(SM, 17, 2)    N = SLONG * 4    SMG = Unicode2AscII(Mid(SM, 19, N)    rmsg.Text = "  短信类型: " + "存储信息" + vbCr + vbLf + "  信息内容:" + SMG + vbCr + vbLfEnd IfEnd FunctionPrivate Sub rpb_Click() myActiveX.ReadPhoneBook "1", myActiveX.PhoneBookCountEnd SubPrivate Sub Timer1_Timer()Dim buf As StringIf Mobcomm.InBufferCount > 0 Then   Timer1.Enabled = False   Mobcomm.InputLen = 0   buf = Mobcomm.Input   If InStr(buf, "OK") = 0 Then   MsgBox "端口打开有误!" & tl   End IfEnd IfEnd SubPrivate Sub Timer2_Timer() If Mobcomm.InBufferCount > 0 Then    MsgBox "你有新的信息,请查收!"    If IntChk$ = vbOK Then    Mobcomm.InputLen = 0    buf$ = Mobcomm.Input    'Timer2.Enabled = False    remsg$ = StrConv(buf, vbFromUnicode)    DebugText remsg               '信息显示函数    End If End IfEnd SubPrivate Sub DebugText(Str)    '设定输出格式    rmsg.Text = rmsg.Text + Str + Chr(13) + Chr(10)    '输出消息    SendMessage rmsg.hwnd, EM_LINESCROLL, 0, 1          '向下卷行End SubPrivate Sub myActiveX_OnNewSMS(ByVal ReadState As String, ByVal sDateTime As String, ByVal sNum As String, ByVal sText As String, ByVal sSCA As String)        '收到新消息     DebugText "= 收到新消息 ="     DebugText "时间日期: " + sDateTime     DebugText "电话号码: " + sNum     DebugText "消息内容: " + sText     DebugText "="         MsgBox "收到新消息:" + sNum        End SubPrivate Sub myActiveX_OnPhoneBookList(ByVal PhoneBook As String) phbook.Text = PhoneBook      '显示电话本内容    End SubPrivate Sub Portopen_Test()     '打开端口并测试' If Mobcomm.PortOpen = False Then'    Mobcomm.CommPort = True' End If Mobcomm.Output = "AT" + vbCr Timer1.Enabled = TrueEnd SubPC机串口控制GSM模块收发短信系统设计(流程图+源程序)摘  要 SMS短信息服务作为GSM网络的一项基本业务已得到越来越多的系统运营商和系统开发商的重视,以GSM网络作为数据无线传输网络,可以开发出多种前景极其乐观的应用。本文只讨论通过PC机串口控制GSM终端模块实现中英文短信息收发的程序设计,以实现测控数据通过GSM网络在个人计算机上的收发、存储和处理,并详细讨论PDU模式的短信息格式和中文短信息软件编解码的设计。 关键词 SMS;PC机串口;GSM模块;AT指令;PDU编码解码1 引言SMS(Short Message Service)短信息服务是GSM(Global System for Mobile Communication)系统中提供的一种GSM终端(手机)之间,通过短信服务中心(Service Center)进行文本信息收发的应用增殖服务,其中服务中心完成信息的存储和转发功能。短信息服务作为GSM网络的一种基本业务,已得到越来越多的系统运营商和系统开发商的重视,基于这种业务的各种应用也蓬勃发展起来。以GSM网络作为数据无线传输网络,可以开发出多种前景极其乐观的应用,如无线数据的双向传送、无线远程检测和控制等。典型的应用有:变电站、电表、水塔、水库或环保监测点等监测数据的无线传输和无线自动警报;远程无线控制高压线路断电器、加热系统、防洪拦阻系统或其它机电系统的启动和关闭;车队交通管理和控制指挥系统;控制和监测香烟、食品和饮料自动售货机的运行状态和存货水平等等。本文选用GSM模块BenQ M22,通过建立PC机的串行口程序,对该模块进行控制,以实现短信息的收发,在PC和应用系统(手机或各种监测系统)之间以GSM网络为纽带,即可实现远距离的数据传输。由于GSM网络在全国范围内实现了联网和漫游,具有网络能力强的特点,用户无需另外组网,在极大提高网络覆盖范围的同时为客户节省了昂贵建网费用和维护费用。同时,它对用户的数量也没有限制,克服了传统的专网通信系统投资成本大,维护费用高,且网络监控的覆盖范围和用户数量有限的缺陷。比起传统的集群系统在无线网络覆盖上具有无法比拟的优势,加上GSM的SMS本身具备的数据传送功能,都使得这些应用得到迅速的普及。利用GSM短信息系统进行无线通信还具有双向数据传输功能,性能稳定,为远程数据传送和监控设备的通信提供了一个强大的支持平台。2 系统总体框图设计与原理概述2.1 系统总体框图整个通信系统分为传输网络和终端两个大部分,传输网络则利用了现有的GSM网络,而终端可以是手机终端或者是具有手机短信功能的模块终端,为了实现对数据的存储和处理,在终端加入了功能强大的个人计算机作为系统的控制中心,计算机与模块终端则通过串口进行通信。系统的总体框图如图1所示:图1 系统总体框图2.2 程序设计语言概述以及系统的界面设计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指令实现相互之间的通信,因此有必要先了解一下AT指令的格式和一些与本设计系统有关的常用指令。PC机串口发出的AT指令用来建立通信链路,AT指令集的命令格式帧都以AT开头,“AT”或者“at”的前缀必须出现在每条命令行的开始。值<n>为键入的设置值,是命令语法要求的一部分。如果该值可选,那么用方括号加以区分。当用AT指令命令设置了一个参数,那么这个值在它被改变之前一直是有效的。2. 3. 2  BenQ M22模块中与SMS有关的GSM AT指令介绍GSM引擎模块提供的命令接口符合GSM07.05和GSM07.07规范。GSM07.07中定义的AT Command接口,提供了一种移动平台与数据终端设备之间的通用接口;GSM07.05对短消息作了详细的规定。在短消息模块收到网络发来的短消息时,能够通过串口发送指示消息,数据终端设备可以向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(选择短消息信息格式: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 SMS 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 Message Service(选择短消息服务) PC机串口控制GSM模块收发短信系统设计(流程图+源程序)目前,发送短消息常用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 Mod三种方式,本设计是在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中的数据决定。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串可以是: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串结构 分段 含义 说明08 SMSC地址信息的长度 共8个8位字节(包括91)91 SMSC地址格式(TON/NPI) 用国际格式号码(在前面加“+”)68 31 08 20 05 05 F0 SMSC地址 8613800250500,补F凑成偶数个11 基本参数(TP-MTI/VFP) 发送,TP-VP用相对格式分段 含义 说明00 消息基准值(TP-MR) 00D 目标地址数字个数 共13个十进制数(不包括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 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)91 SMSC地址格式(TON/NPI) 用国际格式号码(在前面加“+”)68 31 08 20 05 05 F0 SMSC地址 8613800250500,补F凑成偶数个84 基本参数(TP-MTI/MMS/RP) 接收,无更多消息,有回复地址0D 源地址数字个数 共13个十进制数(不包括91和F)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编码,而不是目前国内常用的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 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) < 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串转换函数同上,为了发送以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 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串。PC机串口控制GSM模块收发短信系统设计(流程图+源程序)3)Unicode码解码函数相比于手机短信的发送而言,手机短信的接收主要的工作正好与之相反。手机短信的发送需要将待发送的短信内容转换为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, i, 2)NextUnicode2AscII = rEnd Function243 PDU模式短信息的发送过程要实现短信息的转发,编写出有效的发送程序,要先来了解短信息的发送原理及其过程。首先,设置短信息的发送模式,本设计采用的是PDU模式:输入:AT+CMGF=0  回车系统会返回: OK然后发送短信息:假如,要向号码“ 13851872468”发送内容为“你好!”这么一条短信息,那么,先要把目标号码” 13851872468”转换为“ 68 31 58 81 27

注意事项

本文(PC机串口控制GSM模块收发短信系统设计(流程图+源程序)论文)为本站会员(沈***)主动上传,装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知装配图网(点击联系客服),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!