2013-12-15 88 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 –