2014-04-20 4 views
0

Я пытаюсь отправить сообщение с GSM-модема. Я могу отправить AT-команды, ответ OK без ОШИБКИ. Но проблема в том, что я не могу отправить сообщение или прочитать сообщение.Отправка и получение SMS-сообщений с GSM-модема

Я реализовал 3 функции:

  1. подключения к порту
  2. прочитанной SMS
  3. Отправить SMS
  4. Ручки

1. Подключение к порту:

Private Sub BtnConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnConnect.Click 
      If SerialPort1.IsOpen Then 
       SerialPort1.Close() 
       BtnConnect.Text = "Connect" 
      Else 
       Try 
        With SerialPort1 
         .PortName = Trim(Mid(ComboBox1.Text, 1, 5)) 
         .BaudRate = 9600 
         .Parity = IO.Ports.Parity.None 
         .DataBits = 8 
         .StopBits = Ports.StopBits.One 
         .Handshake = Ports.Handshake.None 
         .RtsEnable = True 
         .DtrEnable = True 
         .Open() 
         .WriteLine("AT+CNMI=1,2,0,0,0" & vbCrLf) 'send whatever data that it receives to serial port 
        End With 
        BtnConnect.Text = "Disconnect" 
       Catch ex As Exception 
        BtnConnect.Text = "Connect" 
        MsgBox(ex.Message) 
       End Try 
      End If 

     End Sub 

2. Чтение SMS

 Private Sub btn_read_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btn_read.Click 
      Try 
       SerialPort1.WriteLine("AT" & vbCrLf) 'is modem okay? 
       Thread.Sleep(1000) 

       SerialPort1.WriteLine("AT+CMGF=1" & vbCrLf) 'To format SMS as a TEXT message 
       Thread.Sleep(1000) 

       SerialPort1.WriteLine("AT+CPMS=""SM""" & vbCrLf) ' Select SIM storage 
       Threading.Thread.Sleep(1000) 

       SerialPort1.WriteLine("AT+CMGL=""REC UNREAD""" & vbCrLf) 'read unread messages 
       Threading.Thread.Sleep(1000) 

       SerialPort1.WriteLine("AT+CMGL=""ALL""" & vbCrLf) 'print all message 
       Threading.Thread.Sleep(1000) 
      Catch ex As Exception 
       MsgBox(ex.Message) 
      End Try 
     End Sub 

3. Отправить SMS

Private Sub btn_send_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btn_send.Click 
     Try 
      With SerialPort1 
       .WriteLine("AT" & vbCrLf) 
       Threading.Thread.Sleep(1000) 
       .WriteLine("AT+CMGF=1" & vbCrLf) 'Instruct the GSM/GPRS modem to operate in SMS text mode 
       Threading.Thread.Sleep(1000) 
       .WriteLine("AT+CMGS=""9802100355""" & vbCr) 'sender ko no. rakhne ho tyo txtnumber ma 
       Threading.Thread.Sleep(1000) 'thapeko 
       .WriteLine("This is test message" & vbCrLf & Chr(26)) 'txtmessage automatic huna parchha haina? 

      End With 


     Catch ex As Exception 
      MsgBox(ex.Message) 
     End Try 
    End Sub 

4. Рукоятки для данных, полученных в последовательный порт

Private Sub serialport1_datareceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived 
    'Pause while all data is read 
    System.Threading.Thread.Sleep(300) 
    rcvdata = SerialPort1.ReadExisting() 
    MsgBox(rcvdata, , "Response From AT") 
    rcvdata = "" 

End Sub 

Где я пропустил что-нибудь? При отправке SMS я получаю ошибку CMS 500. С программным обеспечением от модема я могу читать и отправлять смс. Но мне нужно реализовать свое собственное программное обеспечение.

+0

Проверьте, зарегистрирован ли модем в сети, используя AT + CREG? Я вижу, что при подключении к порту вы не вводите ПИН-код для своей SIM-карты и не убедитесь, что модем готов и зарегистрирован, прежде чем продолжить. – aldridmc

ответ

0

Это может привести к нескольким причинам этой ошибки. Сначала проверьте свою сеть. Второй номер номера службы сообщений, используя команды AT, и сохраните эту настройку. Надеюсь, что это поможет вам

+0

MSC no установлен. Сеть прекрасна. – kinkajou

0

В вашей второй функции, вы можете попробовать объявить строковую переменную для получения данных, например:

With serialport1 
    rcvdata="" 
    .Write(All AT commands) 
    Threading.Thread.Sleep(1000) 
    Msgbox(rcvdata.Tostring) 
End With 

Вы можете добавить обработчик DataReceived читать все байты:

Dim entrada As String = " " 
Dim numeros As Integer = SerialPort1.BytesToRead 
For i As Integer = 1 To numeros 
    entrada&= Chr(SerialPort1.ReadChar) 
Next 
chama(entrada) 
Private Sub chama(ByVal dados As String) 
    rcvdata &= dados 
End Sub 
+0

Можете ли вы добавить краткое объяснение того, как это работает и как оно решает проблему афера? –

0
AT+CMGS=""9802100355" 

Ваш номер телефона не так то почему вы получаете ошибку 500, вам необходимо ввести полный номер телефона, включая 0 на фронте.

Смежные вопросы