2009-07-31 8 views
0

J'envoie des SMS par commandes AT avec téléphone portable GSM. Je veux envoyer la majeure partie du message comme des milliers. J'ai lu que par GSM mobile, nous pouvons envoyer 6-8 sms par minute. Mais quand j'envoie des messages, quelqu'un s'en va et quelqu'un d'autre. J'obtiens des informations de fichier Excel signifie le numéro de destination et le texte du message. Pouvez-vous me dire pourquoi certains sms vont et d'autres pas. Mon code estLes commandes SMS par AT avec GSM mobile donnent une erreur

 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); 
    } 

Répondre

1

Je pense que votre problème est que vous n'êtes pas en attente pour le code résultat final (à savoir OK, ERROR et quelques autres) avant d'envoyer la commande suivante. Le problème avec cela est que la nouvelle commande déclenchera un abandon de la commande en cours si elle n'est pas terminée. Pour citer V.250:

5.6.1 commandes

Abandon

...

de commandes Abandon est accompli par la transmission de l' DTE à DCE de tout caractère.

Alors TOUJOURS lors de l'envoi des commandes AT, vous MUST attente pour le code de résultat final avant d'envoyer la commande suivante.

Puis-je suggérer de refactoriser serialport.WriteLine("ATxxx" + Environment.NewLine) en une fonction sendCommand(serialport, "ATxxx")? Et puis vous pouvez ajouter attendre le code de résultat final à la fin de cette fonction.

0

Essayez de voir s'il y a un modèle pour les messages qui ne sont pas envoyés. Car alors il peut y avoir un problème avec le format numérique ou des caractères invalides dans le message.

En outre, quelques notes:

  1. Vous ne faites aucune vérification d'erreur. Je m'assurerais que j'ai reçu la réponse attendue après avoir appelé chaque commande.

  2. Vous utilisez Environment.NewLine pour terminer chaque ligne. Je suppose que c'est une propriété qui change avec le système d'exploitation sous-jacent. La norme AT est cependant très claire sur les caractères à utiliser pour terminer les lignes de commande.

  3. Les téléphones mobiles sont de véritables bâtards. Juste parce que vous suivez les spécifications ou la documentation ne signifie pas qu'ils le font. Supposons que chaque modèle de téléphone se comporte différemment des autres. Voir point 1.

+0

Merci pour la réponse, mais comme j'ai écrit que certains sms vont et certains montrant une erreur dans l'envoi. Alors, quelle devrait être la raison derrière tout cela? Parce que j'envoie un gros lot de sms. Je reçois la réponse de chaque commande par ceci. serialport.ReadExisting(); Pouvez-vous me dire pourquoi certains SMS vont et répondre «OK» et certains ne vont pas et répondre «Erreur»? – Deepak

+1

Avez-vous vérifié si les erreurs sont aléatoires ou si certains messages passent toujours et certains échouent toujours? Je suppose que le message ou l'adresse est toujours mal formé, ou votre téléphone ne peut pas traiter autant de messages. –

+0

Salut, Oui, vous avez raison. Je reçois un problème au hasard pour envoyer des sms. Plusieurs fois, des sms sont envoyés à certains membres et la prochaine fois ils ne seront pas envoyés à ces membres.Pourriez-vous s'il vous plaît laissez-moi savoir que ce problème peut être dans mon code. Merci pour la réponse – Deepak

Questions connexes