【问题标题】:Sending And Receiving SMS From GSM modem从 GSM 调制解调器发送和接收短信
【发布时间】:2014-06-04 10:26:13
【问题描述】:

我正在尝试从 GSM 调制解调器发送消息。我可以提交 AT 命令,响应是 OK,没有任何 ERRORS。但问题是我无法发送消息或阅读消息。

我已经实现了 3 个功能:

  1. 连接到端口
  2. 阅读短信
  3. 发送短信
  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。阅读短信

      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.发送短信

 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 错误。使用调制解调器中的软件,我可以阅读和发送短信。但我需要在我的软件中实现我自己的。

【问题讨论】:

  • 查看调制解调器是否使用AT+CREG注册到网络?我在您的连接到端口例程中看到您没有为您的 SIM 卡输入 PIN 码,并且在继续之前没有确保调制解调器已准备好并已注册。

标签: vb.net serial-port gsm modem


【解决方案1】:

此错误可能有多种原因。首先检查您的网络。第二次使用 AT 命令设置消息服务中心号码并保存此设置。希望对你有帮助

【讨论】:

    【解决方案2】:

    在您的第二个函数中,您可以尝试声明一个字符串变量来接收数据,如下所示:

    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
    

    【讨论】:

    • 您能否添加一个简短的解释,说明它是如何工作的以及它如何解决提问者的问题?
    【解决方案3】:
    AT+CMGS=""9802100355"
    

    您的电话号码错误,这就是您收到错误 500 的原因,您需要在前面输入完整的电话号码,包括 0

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-10
      • 1970-01-01
      相关资源
      最近更新 更多