0

AT Command を使用して多数または一括の SMS を送信しようとしています。データグリッド内のすべての番号を送信しようとしましたが、最初の番号のみが送信されています。

これは私のコードです

    Dim sql As New MySqlDataAdapter("select StudentID, StudentName,StudentContact, DueDate  FROM issue inner join student on student.StudentID = issue.Student  ", conn)
     Dim ds As New DataSet
    sql.Fill(ds, 0)
    For i As Integer = 0 To ds.Tables(0).Rows.Count - 1
        Dim wholenum As String
        Dim wholesms As String
        wholenum = ds.Tables(0).Rows(i).Item(2).ToString
        wholesms = "Hello " & ds.Tables(0).Rows(i).Item(1).ToString & ",  this is your Due Date  " & ds.Tables(0).Rows(i).Item(3).ToString & " pls return it on your due date"

        If SerialPort1.IsOpen Then
            Try
                With SerialPort1
                    .Write("AT" & vbCrLf)
                    .Write("AT+CMGF=1" & vbCrLf)
                    .Write("AT+CMGS=" & Chr(34) & wholenum & Chr(34) & vbCrLf)
                    .Write(wholesms & Chr(26))



                    MsgBox("Success sa SEND")


                    'update one 

                    'Call ConnectDatabase()
                    'com = New MySqlCommand("UPDATE issue SET Sent='1' ", conn)
                    'com.ExecuteNonQuery()
                    'Call DisconnectDatabase()

                End With

            Catch ex As Exception
                MsgBox("Bad Signal or No load")
            End Try

        Else
            MsgBox("Pls insert a modem")
        End If

ループが機能していると思います。データグリッド ビュー内にいくつ入っているかという成功したメッセージが表示されるからです。ただし、最初の番号のみを送信します。

4

1 に答える 1

0

AT コマンドの処理を大幅に修正する必要があります。まず最初に、AT コマンド ラインを送信した後、モデムが送り返すすべてのものを読み取って解析"\r"する必要があります (ちなみに、これは vbCrLf ではなく、ただで終了する必要があります)。

最終結果コードを受け取る前に、新しいコマンド ラインの送信を開始しないでください。具体的には、プレフィックスAT+CMGSを受信する前に SMS ペイロードを送信しないでください。"\r\n >"

これらの問題は、これこの回答でカバーされています。しかし、最初にすべきことは、 V.250 仕様の第 5 章のすべてのテキストを読むことです。AT コマンドを使用する場合、これは非常に重要なドキュメントです。

于 2016-04-05T13:49:58.290 に答える