Frage

Ich bin das Senden von SMS durch AT-Befehle mit GSM-Mobiltelefon. Ich möchte wie Tausende Großteil der Nachricht senden. Ich habe gelesen, dass von GSM-Mobil wir 6-8 SMS pro Minute senden. Aber wenn ich Nachrichten senden und dann jemand gehen und jemand nicht. Ich erhalte Informationen aus Excel-Datei bedeutet, Zielnummer und Nachrichtentext. Können Sie mir sagen, warum einige SMS gehen und einige nicht. Mein Code ist

        SmsFields smsObj = null;
        List<SmsFields> smsColl = null;
        SerialPort serialport = null;
        StringBuilder strbuild = new StringBuilder();
        try
        {
            //Validate the form 
            if (!Validation()) return;

            serialport = new SerialPort();

            ////Sets the properties of serial port object
            serialport.PortName = cboPort.SelectedItem.ToString();
            serialport.BaudRate = 9600;
            serialport.Parity = Parity.None;
            serialport.DataBits = 8;
            serialport.StopBits = StopBits.One;
            serialport.Handshake = Handshake.RequestToSend;
            serialport.DtrEnable = true;
            serialport.RtsEnable = true;

            //Open the port to send sms
            serialport.Open();

            //Check if port is opened or not
            if (!serialport.IsOpen)
            {
                MessageBox.Show("Serial port is not opened. Please try with other port");
                return;
            }

            //Create smsFields class's object and fill the data in the generic collection
            smsObj = SmsFields.Instance;
            smsColl = smsObj.FillData(txtFilePath.Text);

            if (smsColl == null)
            {
                MessageBox.Show("No data found in the excel table");
                return;
            }
            //Gets the single record from SmsFields class and sends the message
            foreach (SmsFields sms in smsColl)
            {

                //checks phone status
                serialport.WriteLine("AT" + Environment.NewLine);
                //Configures message as SMS (0 for PDU format) and (1 for text format)
                serialport.WriteLine("AT+CMGF=1" + Environment.NewLine);

                //Sets message center number
                serialport.WriteLine("AT+CSCA=\"" + txtServiceNo.Text + "\"" + Environment.NewLine);

                //Sets destination number
                serialport.WriteLine("AT+CMGS=\"" + sms.DestinationNo + "\"" + Environment.NewLine);

                //Specifies message and sends Ctrl+z
                serialport.WriteLine(sms.Message + (char)26);

                //Displays buffer containing output messages
                System.Threading.Thread.Sleep(4000);
   }
War es hilfreich?

Lösung

Ich denke, Ihr Problem ist, dass Sie nicht für das Endergebnis Code warten (das heißt OK, ERROR und ein paar andere), bevor der nächste Befehl gesendet. Das Problem dabei ist, dass der neue Befehl einen Abbruch des laufenden Befehls auslösen, wenn sie nicht beendet ist. Um Zitat V.250 :

  

5.6.1 Aborting Befehle

     

...

     

Aborting   von Befehlen wird durch die durchgeführt   Übertragung von der DTE an die DCE   von einem beliebigen Zeichen.

So immer , wenn AT-Befehle zu senden, können Sie muss warten, bis das endgültige Ergebnis Code, bevor der nächste Befehl gesendet wird.

Darf ich schlage vor, Refactoring serialport.WriteLine("ATxxx" + Environment.NewLine) in eine sendCommand(serialport, "ATxxx") Funktion? Und dann können Sie für das Endergebnis Code am Ende dieser Funktion fügen Sie warten.

Andere Tipps

Versuchen Sie, um zu sehen, ob es ein Muster auf die Nachrichten, die nicht gesendet werden. Denn dann könnte es ein Problem mit dem Zahlenformat oder ungültigen Zeichen in der Nachricht sein.

Auch einige Hinweise:

  1. Sie machen keine Fehlerprüfung. Ich würde sicherstellen, dass ich die erwartete Antwort bekam nach jedem Befehl aufrufen.

  2. Sie verwenden Environment.NewLine jede Zeile zu beenden. Ich gehe davon aus, dass dies eine Eigenschaft ist, die mit dem zugrunde liegenden Betriebssystem ändert. Das Standard-AT ist jedoch sehr klar auf genau, welche Zeichen für die Beendigung Kommandozeilen zu verwenden.

  3. Mobiltelefone sind echte Bastarde. Nur weil Sie die Beschreibung oder Dokumentation folgen, bedeutet nicht, sie tun. Es sei angenommen, dass jedes Handy-Modell von allen anderen anders verhält. Siehe Punkt 1.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top