2012-11-02 79 views
-1

我正在使用Teltonika G10 GSM調制解調器,並寫了一個基本程序來發送短信。我在每個AT命令之間放置了一個1.5秒的定時器,以允許調制解調器模擬等待調制解調器的「OK」。這現在工作,但我寧願使用分支語句等待實際響應,如「確定」或「錯誤」,而不是使用計時器。檢測調制解調器的響應?

 SerialPort1.Write("AT+CMGD=1,4" & vbCrLf) 
     Thread.Sleep(1250) 
     SerialPort1.Write("AT+CMGF=1" & vbCrLf) 
     Thread.Sleep(1250) 
     SerialPort1.Write("AT+CMGS=" & Chr(34) & "3475558223" & Chr(34) & vbCrLf) 
     Thread.Sleep(1250) 
     SerialPort1.Write(":|" & Chr(26)) 
+2

不要睡覺,使用SerialPort.ReadLine()來獲得響應。 –

+0

謝謝。得到它的工作,因爲它應該。 – GoodBoyNYC

回答

0

我是新來使用AT命令編程,並花了很多時間用膩子一個很好的協議,以獲得它的一個理解。 Hans Passant建議使用.ReadLine(),它的運行效果很好。

下面是一個很好的代碼示例。它基本上向調制解調器提交一個命令,並且只有在調制解調器響應「OK」時纔會繼續。

If modem.IsOpen() Then 
     modem.Write("AT+CMGD=" & Chr(34) & "ALL" & Chr(34) & vbCrLf) 'deletes last received message 
     'Sets Modem to Text 
     While (modem.ReadLine().ToString <> "OK") 
      modem.Write("AT+CMGF=1" & vbCrLf) 
     End While 
     While (modem.ReadLine().ToString <> "OK") 
      modem.Write("AT+CSMP=17,167,0,0" & vbCrLf) 
     End While 

     While (modem.ReadLine().ToString <> "OK") 
      modem.Write("AT+CNMI=1,1,0,0,0" & vbCrLf) 
     End While 
    End If