GSM应用中要注意的问题!

目前关于GSM的应用已经是很广泛的了,但是在实际项目应用中,我发现很多人都会忽略一个很重要的事情:一张SIM卡的存储次数只有2-10万次,超过这个次数,SIM卡就会损坏,实际上这一点完全可以通过AT参数设置来解决的。就是在设备启动的时候先输入AT+CSMS=1 AT+CNMMI=2,2,0,0,1  接收一条短信后,马上返回AT+CNMA就可以了。
网络上关于GSM的资料代码等等已经很多了,我这里发一个我自己做的短信测试的软件,如果想要整个软件,可以留下邮箱!

Option Explicit
Public inData As String '串口中断时读入的字符串
Dim P As String, D As String, T As String, TXT As String, E As Integer

 

Private Sub Check1_Click()
If Check1.Value Then
  CloseOnComm
  Check1.Enabled = False
  Dim TxString As String
  MSComm1.Output = "at+csms=1" & Chr(10) & Chr(13)
  Delay 2
  MSComm1.Output = "at+cnmi=2,2,0,0,1" & Chr(10) & Chr(13)
  Delay 2
  Check1.Enabled = True
  OpenOnComm
 
End If
 
End Sub

Private Sub Combo1_Click()

If MSComm1.PortOpen = 1 Then
MSComm1.PortOpen = 0
MSComm1.Settings = Combo1.Text + ",n,8,1"
'If Combo1.Text = "1200" Then MSComm1.Settings = "1200,,,"

MSComm1.PortOpen = 1
Else
MSComm1.Settings = Combo1.Text + ",n,8,1"
'If Combo1.Text = "1200" Then MSComm1.Settings = "1200,,,"

End If

End Sub
Private Sub combo1_dropdown()
Combo1.Clear
Combo1.AddItem "1200", 0
Combo1.AddItem "2400", 1
Combo1.AddItem "4800", 2
Combo1.AddItem "9600", 3
Combo1.AddItem "19200", 4
Combo1.AddItem "38400", 5
Combo1.AddItem "57600", 6
Combo1.AddItem "115200", 7
End Sub

Private Sub Command10_Click()
CloseOnComm
Dim TxString As String
Dim i As Integer

MSComm1.Output = "at+cmgf=0" & vbCrLf
Delay 1
MSComm1.Output = "at+cmgl=3" & Chr(13) & Chr(10)
Delay 1
TxString = MSComm1.Input
Dim atext() As String
'Text8.SelText = TxString
atext = Split(TxString, Chr(13) & Chr(10))
'Text8.Text = atext(4)
If Len(atext(4)) < 15 Then
   Text4.SelText = "无已发送信息,请检查!" & vbCrLf
Else
  For i = 2 To (UBound(atext) - 1) / 2 - 1
  Text8.Text = atext(i * 2)
 
SuperSMS1.ConPDU Text8.Text, P, D, T, TXT, 1, E
'Text4.Text = smsalltext
'获得解析后的数据
Text4.SelText = "电话号码:" & P & vbCrLf _
& "日期:" & D & vbCrLf _
& "时间:" & T & vbCrLf _
& "内容:" & TXT & vbCrLf _
& "错误代码:" & E & vbCrLf
'Text4.SelText = TxString
Next i
End If
OpenOnComm
End Sub

Private Sub Command11_Click()
CloseOnComm
Dim TxString As String
MSComm1.Output = "at+cmgf=0" & vbCrLf
Delay 1
MSComm1.Output = "at+cmgl=4" & Chr(13) & Chr(10)
Delay 1
TxString = MSComm1.Input
Text4.SelText = TxString
OpenOnComm
End Sub

Private Sub Command2_Click()

On Local Error Resume Next
CloseOnComm
Dim SInput As String
Dim a As String
'Dim s
If Text1.Text <> "" Then
  MSComm1.Output = "at+csca=""" & Text1.Text & """" & Chr(13) & Chr(10)
  Delay 2
  SInput = MSComm1.Input
  If InStr(SInput, "OK") = 0 Then
    MsgBox ("短信中心设置失败,请重新设置!")
    OpenOnComm
    Exit Sub
  End If
 
End If
'Delay 1
MSComm1.Output = "at+cmgf=0" & Chr(13) & Chr(10)
Delay 2
'If MSComm1.Input = Chr(13) & Chr(13) & Chr(10) & Chr(79) & Chr(75) & Chr(13) & Chr(10) Then

   a = MSComm1.Input
   If InStr(a, "OK") <> 0 Then
     MSComm1.Output = "at+cmgs=" & Text6.Text & Chr(13) & Chr(10)
' Delay 1
 ' If MSComm1.Input = Chr(13) & Chr(13) & Chr(10) & Chr(62) & Chr(32) Then
      Delay 3
      MSComm1.Output = Text5.Text & Chr(26)
      Delay 4
      Dim SInputT
      SInputT = MSComm1.Input
      If InStr(SInputT, "OK") <> 0 Then
        MsgBox ("发送成功!")
      Else
        MsgBox ("发送失败,请重新发送!")
      End If
    Else
      MsgBox ("短信模式配置错误,请重新配置!")
    End If
OpenOnComm

End Sub

Private Sub Command3_Click()
Unload Me
End Sub

Private Sub Command4_Click()
'Dim TxInput(1 To 65534) As Byte
CloseOnComm
Dim TxString As String
Dim i As Integer

MSComm1.Output = "at+cmgf=0" & vbCrLf
Delay 1
MSComm1.Output = "at+cmgl=0" & Chr(13) & Chr(10)
Delay 1
TxString = MSComm1.Input
Dim atext() As String
'Text8.SelText = TxString
atext = Split(TxString, Chr(13) & Chr(10))
'Text8.Text = atext(4)
If Len(atext(4)) < 15 Then
   Text4.SelText = "无未读新信息,请等待!" & vbCrLf
Else
  For i = 2 To (UBound(atext) - 1) / 2 - 1
  Text8.Text = atext(i * 2)
 
SuperSMS1.ConPDU Text8.Text, P, D, T, TXT, 1, E
'Text4.Text = smsalltext
'获得解析后的数据
Text4.SelText = "电话号码:" & P & vbCrLf _
& "日期:" & D & vbCrLf _
& "时间:" & T & vbCrLf _
& "内容:" & TXT & vbCrLf _
& "错误代码:" & E & vbCrLf
'Text4.SelText = TxString
Next i
End If

OpenOnComm
End Sub

Private Sub Command6_Click()
CloseOnComm
MSComm1.Output = "at+cmgf=0" & Chr(13) & Chr(10)
Delay 1
MSComm1.Output = "at+cmgl=4" & Chr(13) & Chr(10)

Delay 2
Dim smsalltext As String
smsalltext = MSComm1.Input
Dim atext() As String
Dim i As Integer
atext = Split(smsalltext, Chr(13) & Chr(10))
Dim j As Integer

If Len(atext(4)) < 15 Then
  Text4.SelText = "内存为空,无短信" & vbCrLf
Else
For j = 2 To (UBound(atext) - 1) / 2 - 1
 
Text8.Text = atext(j * 2)
SuperSMS1.ConPDU Text8.Text, P, D, T, TXT, 1, E

'Text4.Text = smsalltext
'获得解析后的数据
Text4.SelText = "电话号码:" & P & vbCrLf _
& "日期:" & D & vbCrLf _
& "时间:" & T & vbCrLf _
& "内容:" & TXT & vbCrLf _
& "错误代码:" & E & vbCrLf
Next j
End If
OpenOnComm
End Sub
Sub Conv()
SuperSMS1.SMS_Phone = Text2.Text
SuperSMS1.SMS_CSCA = Text1.Text
SuperSMS1.SMS_STXT = Text3.Text
Text5.Text = SuperSMS1.SMS_SMain
'Text8.Text = SuperSMS1.ANSIText(Text7.Text)
Text6.Text = SuperSMS1.SMS_SLen
End Sub

Private Sub Command5_Click()
Text4.Text = ""
End Sub

 

Private Sub Command7_Click()
CloseOnComm


MSComm1.Output = "at+cmgd=" & Text7.Text & vbCrLf
Dim deltext As String
Delay 3
deltext = MSComm1.Input
If InStr(deltext, "OK") <> 0 Then
   Text4.SelText = "删除短信" & Text7.Text & "成功" & vbCrLf
   deltext = ""
Else
   Text4.SelText = "删除短信" & Text7.Text & "失败,请重新检查" & vbCrLf
    deltext = ""
End If
OpenOnComm
End Sub


Private Sub Command8_Click()
'On Error Resume Next
CloseOnComm

If InStr(Command8.Caption, "关闭串口") <> 0 Then
   MSComm1.PortOpen = False
   Command8.Caption = "打开串口"
   Command7.Enabled = False
   Command6.Enabled = False
   Command4.Enabled = False
   Command1.Enabled = False
   Command9.Enabled = False
   Command10.Enabled = False
   Command2.Enabled = False
   Command11.Enabled = False
   Label5.Enabled = False
  
 Else
 
  MSComm1.PortOpen = 1
  Command8.Caption = "关闭串口"
'  If flag2 = True Then
 MSComm1.Output = "at" & vbCrLf
Dim attext
Delay 2
attext = MSComm1.Input
If InStr(attext, "OK") <> 0 Then
  Command2.Enabled = True
    Command7.Enabled = True
   Command6.Enabled = True
   Command4.Enabled = True
   Command1.Enabled = True
   Command9.Enabled = True
   Command10.Enabled = True
   Command11.Enabled = True
   Label5.Enabled = True
   Text4.SelText = "设备已经连接!" & vbCrLf
  
  Else
   Text4.SelText = "串口无反应,请检查!" & vbCrLf
 
 End If
End If
OpenOnComm
End Sub

 

Private Sub Command9_Click()
CloseOnComm
Dim TxString As String
Dim i As Integer

MSComm1.Output = "at+cmgf=0" & vbCrLf
Delay 1
MSComm1.Output = "at+cmgl=1" & Chr(13) & Chr(10)
Delay 1
TxString = MSComm1.Input
Dim atext() As String
'Text8.SelText = TxString
atext = Split(TxString, Chr(13) & Chr(10))
'Text8.Text = atext(4)
If Len(atext(4)) < 15 Then
   Text4.SelText = "无已读信息,请检查!" & vbCrLf
Else
  For i = 2 To (UBound(atext) - 1) / 2 - 1
  Text8.Text = atext(i * 2)
 
SuperSMS1.ConPDU Text8.Text, P, D, T, TXT, 1, E
'Text4.Text = smsalltext
'获得解析后的数据
Text4.SelText = "电话号码:" & P & vbCrLf _
& "日期:" & D & vbCrLf _
& "时间:" & T & vbCrLf _
& "内容:" & TXT & vbCrLf _
& "错误代码:" & E & vbCrLf
'Text4.SelText = TxString
Next i
End If
OpenOnComm
End Sub

Private Sub Text4_KeyPress(KeyAscii As Integer)
On Error Resume Next
MSComm1.Output = Chr(KeyAscii)
End Sub
Private Sub Form_Load()
    On Error Resume Next
   MSComm1.PortOpen = False
    MSComm1.CommPort = 1
    MSComm1.InputMode = comInputModeText
     MSComm1.Settings = "57600,N,8,1"
    MSComm1.InputLen = 0    '设置每次从串口缓冲区取的字节为全部
    MSComm1.PortOpen = True '打开串口
    Command8.Caption = "关闭串口"
    'Command8.Value = 0
    Combo1.Text = "57600"
    'CloseOnComm
    MSComm1.Output = "at" & Chr(13) & Chr(10)
    Delay 2
    'Text4.Text = StrConv (MSComm1.Input, vbUnicode)
    Dim aafirst As String
    aafirst = MSComm1.Input
    If InStr(aafirst, "OK") = 0 Then
    MsgBox ("AT不通,请检查mode是否连接成功!")
    'Command8.Caption = "打开串口"
    Command1.Enabled = 0
    Command4.Enabled = 0
    Command6.Enabled = 0
    Command7.Enabled = 0
    Command9.Enabled = 0
    Command10.Enabled = 0
     Command2.Enabled = 0
     Command11.Enabled = 0
     Label5.Enabled = 0
    Else
    aafirst = ""
    Text4.SelText = "设备已经连接成功,请测试!" & vbCrLf
   
   ' Command8.Caption = "关闭串口"
      MSComm1.Output = "at+cnmi=1,1,0,0,1" & vbCrLf
      Command1.Enabled = 1
    Command4.Enabled = 1
    Command6.Enabled = 1
    Command7.Enabled = 1
    Command2.Enabled = 1
    Command9.Enabled = 1
    Command10.Enabled = 1
    Command11.Enabled = 1
    Label5.Enabled = 1
    End If
    Delay 1
    'inData = ""
   OpenOnComm
   
End Sub
Private Sub Command1_Click()
On Local Error Resume Next

 CloseOnComm
 Dim stt1 'As String
If Text1.Text <> "" Then
  MSComm1.Output = "at+csca=""" & Text1.Text & """" & Chr(13)
  Delay 3
  stt1 = MSComm1.Input
  If InStr(stt1, "OK") = 0 Then
    
     MsgBox ("短信中心号码设置不成功,请检查!")
     Exit Sub
  End If
End If
Delay 1
MSComm1.Output = "at+cmgf=1" & Chr(13)
Delay 2
'If MSComm1.Input = Chr(13) & Chr(13) & Chr(10) & Chr(79) & Chr(75) & Chr(13) & Chr(10) Then
Dim att 'As String
    att = MSComm1.Input
   ' Text4.Text = StrConv(att, vbUnicode)
    If InStr(att, "OK") <> 0 Then
       MSComm1.Output = "at+cmgs=""" & Text2.Text & """" & Chr(13)
       Delay 1
 ' If MSComm1.Input = Chr(13) & Chr(13) & Chr(10) & Chr(62) & Chr(32) Then
       MSComm1.Output = Text3.Text & Chr(26)
       Delay 4
        Dim stt 'As String
        stt = MSComm1.Input
        If InStr(stt, "+CMGS") <> 0 Then
           MsgBox ("发送成功!")
        Else
           MsgBox ("发送失败,请检查!")
        End If

      Else
        MsgBox ("短信模式设置不成功,请检查!")
      End If

 OpenOnComm
End Sub
Public Sub CloseOnComm()
MSComm1.RThreshold = 0
MSComm1.InputMode = comInputModeText

End Sub
Public Sub OpenOnComm()
MSComm1.RThreshold = 1
MSComm1.InputMode = comInputModeBinary

End Sub
Public Sub Delay(HowLong As Date)   '延时
   Dim temptime As Date
   temptime = DateAdd("s", HowLong, Now)
    While temptime > Now
        DoEvents '让 windows 去处理其他事
    Wend
End Sub

Private Sub Text1_Change()
Conv
End Sub

Private Sub Text2_Change()

Conv
End Sub

Private Sub Text3_Change()
Conv
End Sub

 

Private Sub MSComm1_OnComm() '串口中断
'On Error Resume Next
Static bFlag As Boolean
Static Xbyte As Long
Select Case MSComm1.CommEvent   '选择事件
Case comEvReceive '接收到字符
    
        Dim InByte() As Byte '定义一个二进制指针放接收到的数据
        InByte = MSComm1.Input '数据转移到指针
        Dim temp As Long
        Dim temp1 As Long
        Dim temp2 As Long
        Dim j As Long
        Dim counttrue As Integer
        counttrue = 1
      
       
         For j = 0 To UBound(InByte) '循环到指针上标
          ''  If ifhex = 1 Then '16进制显示处理
        '  inData = inData & Hex(InByte(j)) & " " '取出一个字节换为16进制显示用

           ' Else:
                  If InByte(j) < 128 And bFlag = 0 Then
                    If InByte(j) = 13 Then
                    inData = inData & vbCr 'Lf
                    Else
                    inData = inData & Chr(InByte(j)) 'ascii码显示处理
                   
                    End If
                  Else '此时为一个中文的前半部
                     If bFlag Then '上次收到半个中文没处理
                     temp1 = Xbyte
                     temp2 = InByte(j)
                     temp = (temp1 * 256 + temp2) - 65536
                     inData = inData & Chr(temp)
                     bFlag = 0
                     Else
                        If j <> UBound(InByte) Then
                        temp1 = InByte(j)
                        temp2 = InByte(j + 1)
                        temp = (temp1 * 256 + temp2) - 65536
                        inData = inData & Chr(temp) ' & "(*" & temp & "*) "
                        j = j + 1 '此次中断收到最后一个字节是前半个中文
                        Else
                       
                        Xbyte = InByte(j) '保存该字节
                        bFlag = 1 '置标志
                       
                        End If
                     End If
                 ' End If
            End If
        
        ' counttrue = 1
       
    Next j

 DoEvents

   ' Delay 1
 ' flag2 = False
  If InStr(inData, "+CMTI:") <> 0 And counttrue = 1 Then
       
            Text4.SelText = "新短信,请接收!" & vbCrLf
           ' Delay 1
            counttrue = counttrue + 1
 End If
  Text4.SelText = inData '将刚收到的字符串显示出来
    inData = ""
  Text4.SelStart = Len(Text4.Text) '光标置后
   
If Check1.Value Then
  MSComm1.Output = "at+cnma" & Chr(10) & Chr(13)
End If
Case comEventRxOver '接收缓冲区满的处理
MsgBox "接收缓冲区满了!" '发出警告
End Select
End Sub

 

短消息命令 1、AT+CSMS选择消息服务。支持的服务有GSM-MO、SMS-MT、SMS-CB。 2、AT+CNMA新信息确认应答。 3、AT+CPMS优先信息存储。这个命令定义用来读写信息的存储区域。 4、AT+CMGF优先信息格式。执行格式有TEXT方式和PDU方式。 5、AT+CSAS保存设置。保存+CSAS和+CSMP的参数。 6、AT+CRES恢复设置。 7、AT+CSDH显示文本方式的参数。 8、AT+CNMI新信息指示。这个命令选择如何从网络上接收短信息。 。。。。。。。 二.短信息 1.设置短消息模式 at+cmgf=? (0)=pdu (1)=text pdu 模式可以传送文字 text 模式只可以传送数字和字母 2.设置短消息中心 at+csca=“+8613800270500”回车(具体的号码由当地的运营商决定。) 3.接收短消息 at+cmgr=x 回车 (从 x 存储区读短消息) 例如: at+cmgr=1 +cmgr: "rec read","06014",,"06/12/12,10:11:21+32" 5c0a656c76845ba26237002c60a8768498845b588bdd8d395df27ecf4e0d8db3003200305143002 c8bf75c3d5feb5b5850a88 。。。。。。 ************************ - szTmp 0x1a2ffa9c "at+cscs="gsm"OK " [0x0] 0x61 'a' [0x1] 0x74 't' [0x2] 0x2b '+' [0x3] 0x63 'c' [0x4] 0x73 's' [0x5] 0x63 'c' [0x6] 0x73 's' [0x7] 0x3d '=' [0x8] 0x22 '"' [0x9] 0x67 'g' [0xa] 0x73 's' [0xb] 0x6d 'm' [0xc] 0x22 '"' [0xd] 0x0d ' ' [0xe] 0x0d ' ' [0xf] 0x0a ' ' [0x10] 0x4f 'O' [0x11] 0x4b 'K' [0x12] 0x0d ' ' [0x13] 0x0a ' ' [0x14] 0x00 '' [0x15] 0x00 '' *********************************** - szTmp 0x1a2ffa9c "AT+CSCA="15822901649"OK " [0x0] 0x41 'A' [0x1] 0x54 'T' [0x2] 0x2b '+' [0x3] 0x43 'C' [0x4] 0x53 'S' [0x5] 0x43 'C' [0x6] 0x41 'A' [0x7] 0x3d '=' [0x8] 0x22 '"' [0x9] 0x31 '1' [0xa] 0x35 '5' [0xb] 0x38 '8' [0xc] 0x32 '2' [0xd] 0x32 '2' [0xe] 0x39 '9' [0xf] 0x30 '0'
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值