2016-11-07 1 views
0

J'ai essayé d'envoyer des commandes AT en ouvrant une connexion de port série et mon but était d'envoyer un SMS. J'ai été capable de réaliser cela et le message a été envoyé, ce qui est un signe que la méthode WriteLine() se termine avec succès. Cependant, je n'arrive pas à obtenir de réponse dans mes tampons de réception. J'ai activé l'écho en examinant certaines réponses ici sur stackoverflow.AT Command Works, mais pas de réponse

Mais il n'y a toujours pas de réponse. J'ai essayé d'attendre en utilisant Thread.Sleep() et aussi en utilisant le gestionnaire, p_DataReceived. Il n'y a toujours pas de réponse. Un exemple serait la simple commande "AT" qui devrait avoir une réponse "ok". Mais il n'y a pas de réponses à tous (taille de la propriété est à savoir BytesToRead 0)

J'essaie avec ce dwm222 de D-Link 4G LTE adaptateur USB

Tous les pointeurs seraient grandement appréciés!

private void button_Click(object sender, RoutedEventArgs e) 
    { 



     mySerialPort = new SerialPort("COM15"); 
     mySerialPort.BaudRate = 9600; 
     mySerialPort.Parity = Parity.None; 
     mySerialPort.StopBits = StopBits.One; 
     mySerialPort.DataBits = 8; 

     mySerialPort.Handshake = Handshake.None; 
     mySerialPort.NewLine = Environment.NewLine; 

     mySerialPort.DataReceived += new SerialDataReceivedEventHandler(p_DataReceived); 
     mySerialPort.Open(); 
     mySerialPort.DiscardInBuffer(); 
     mySerialPort.DiscardOutBuffer(); 


     mySerialPort.WriteLine("ATE1"); //turn on echo 


     mySerialPort.WriteLine("AT"); //test response 


     Thread.Sleep(3000); 
     string responseSTR = mySerialPort.ReadLine(); 

     if (responseSTR.Contains("OK")) //empty string 
     { 

      MessageBox.Show(responseSTR); 
     } 

     this.SendSms("+XXXXXXXXXXXXXXXXXXX", "Hello From C#"); 

     mySerialPort.Close(); 

    } 

    public void p_DataReceived(object sender, SerialDataReceivedEventArgs e) 
    { 
     string s = (sender as SerialPort).ReadExisting(); 
     buff += s; 
     MessageBox.Show(buff); 
    } 

    void SendSms(string destination, string text) 
    { ........} 
+0

Est-ce que votre événement est en cours? et la boîte de message affiche null? –

+0

aucun événement déclenché et responseSTR est vide, c'est-à-dire responseSTR = "". –

+0

Une autre question: Pouvez-vous essayer différents paramètres "mySerialPort.NewLine ="? Parce que "Environment.NewLine" est "\ r \ n" sous Windows (CR + LF). Et peut-être votre modem répond avec "CR" seulement. Mérite un essai: mySerialPort.NewLine = "\ r", ou quel que soit le code correct pour cela en C#. –

Répondre

0

je pense que vous devez jeter le tampon à chaque fois que vous devriez obtenir des données entrantes frais essayer ce code j'ai modifié dans votre gestionnaire d'événements

public void p_DataReceived(object sender, SerialDataReceivedEventArgs e) 
    { 
     string s = mySerialPort.ReadExisting(); 
     buff += s; 
     mySerialPort.DiscardInBuffer(); 
     mySerialPort.DiscardOutBuffer(); 
     MessageBox.Show(buff); 
    } 
+0

merci zain, je l'utiliserai pour effacer le tampon, mon problème principal était que le buffersize était à 0, par exemple BytestoRead est à 0. J'ai juste découvert que l'activation de DTR et de RTS était la solution. –

1

Activation DTR et RTS rempli le tampon du objet port série.

 mySerialPort = new SerialPort("COM17"); 
     mySerialPort.BaudRate = 9600; 
     mySerialPort.Parity = Parity.None; 
     mySerialPort.StopBits = StopBits.One; 
     mySerialPort.DataBits = 8; 

     mySerialPort.Handshake = Handshake.None; 
     mySerialPort.NewLine = Environment.NewLine; 

     mySerialPort.DataReceived += new SerialDataReceivedEventHandler(p_DataReceived); 

     mySerialPort.Open(); 
     mySerialPort.DiscardInBuffer(); 
     mySerialPort.DiscardOutBuffer(); 
     mySerialPort.DtrEnable = true; //this solved my problem 
     mySerialPort.RtsEnable = true; //this solved my problem