2013-12-15 59 views
0

我想用我的诺基亚手机(C1-01)使用AT命令发送短信,并且我可以使用此vb.net代码成功发送短信。通过诺基亚移动通过AT命令发送短信

Button_Send_Click: 

Dim SMSPort = New SerialPort 
    With SMSPort 
     .PortName = "COM2" 
     .BaudRate = 9600 
     .Parity = Parity.None 
     .DataBits = 8 
     .StopBits = StopBits.One 
     .Handshake = Handshake.None 
     .DtrEnable = True 
     .RtsEnable = True 
     .NewLine = vbCrLf 
    End With 

    SMSPort.Open() 

    SMSPort.Write("AT+CMGF=1" & vbCrLf) 
    Threading.Thread.Sleep(200) 

    SMSPort.Write("AT+CMGS=" & Chr(34) & TextBox1.Text & Chr(34) & vbCrLf) 'TextBox1.text = Recipient mobile number and chr(34) = " 
    Threading.Thread.Sleep(200) 

    SMSPort.Write("TEST MESSAGE" & Chr(26)) 'chr(26) = → 
    Threading.Thread.Sleep(200) 

    MsgBox(SMSPort.ReadExisting()) 

    SMSPort.Close() 

它的正常工作的第一时间,消防此代码后,我收到短信我的手机TEST MESSAGE(辉煌),但是,当我按在我收到的短信我的手机在第二次发送按钮,其中包含: AT+CMGF=1 AT+CMGS=+92XXYYYYYY TEST MESSAGE

为什么在第二次它包括“AT命令即AT + CMGF等......”在SMS? 如何从中删除不需要的文本? 我也尝试SMSPort.DiscardInBuffer()SMSPort.DiscardOutBuffer()打开和关闭我的串行端口(SMSPort)之前的属性,但我的问题不解决。 我GOOGLE了很多,但都是徒劳的,请帮我解决这个问题。

平台:微软的Visual Basic 2010与.NET 2.0

+0

只是好奇你为什么在诺基亚手机上使用AT命令。如果你使用GSM库,这将会容易得多。我使用了几个开源库,它们工作正常。我还在连接到一个准系统GSM模块的微控制器上完成了AT命令,事情是......你将不得不使用一些延迟,这样GSM模块才能赶上你发送给它的东西:) –

回答

1

首先,你必须认真重做AT命令处理,以

  • 阅读并解析还给的每一个响应行调制解调器,直到你得到最终的结果代码。这适用于每一个命令行调用,没有任何例外。有关更多详细信息,请参阅this answer
  • 永远不要在任何处理AT命令的代码中调用Threading.Thread.Sleep。有关中止下一个命令的风险的更多详细信息,请参阅this answer
  • 对于AT+CMGS特别是你也MUST在发送数据前等待“\ n \ r>”响应,有关更多详细信息,请参阅this answer(再次)。

在解决这些基本问题之前,您不能指望任何成功的行为。

+0

谢谢你的回答,但已经太晚了,我现在正在另一个项目上工作。但很快我会重新打开这个项目,如果你的答案会有帮助,我会接受它。 @hlovdal –

-1

试试这个

Dim SMSPort = New SerialPort 
    With SMSPort 
     .PortName = "COM2" 
     .BaudRate = 9600 
     .Parity = Parity.None 
     .DataBits = 8 
     .StopBits = StopBits.One 
     .Handshake = Handshake.None 
     .DtrEnable = True 
     .RtsEnable = True 
     .NewLine = vbCrLf 
End With 

SMSPort.Open() 

SMSPort.WriteLine("AT" & Chr(13)) 
Threading.Thread.Sleep(200) 

SMSPort.WriteLine("AT+CMGF=1" & Chr(13)) 
Threading.Thread.Sleep(200) 

SMSPort.WriteLine("AT+CMGS=" & Chr(34) & TextBox1.Text & Chr(34)) 
Threading.Thread.Sleep(200) 

SMSPort.WriteLine("TEST MESSAGE" & Chr(26)) 
Threading.Thread.Sleep(200) 

MsgBox(SMSPort.ReadExisting()) 

SMSPort.Close() 

添加SMSPort.WriteLine( “AT” & CHR(13)),我写替换用的WriteLine和删除vbCrlf。还增加了CHR(13)SMSPort.WriteLine( “AT + CMGF = 1”)

0

OK,我遇到了同样的问题走到今天,我解决它通过添加 “\ r \ n” 到底在发送CTRL + Z(字符26)之前的消息。你可以试试它只是“\ n”

+0

谢谢您的回答,但已经太晚了,我目前正在另一个项目中工作。但很快我会重新开放这个项目,如果你的答案会有帮助,我一定会接受它。 @ aly.yousuf7 –