2016-11-07 13 views
0

と私の目標は、SMSを送信することでした。私はこれを達成することができ、メッセージが送信されました。これは、WriteLine()メソッドが正常に完了したことを示すものです。しかし、私は受信バッファ内の応答を得ることができないようです。私はここでいくつかの答えをstackoverflowで見てエコーをオンにしました。、しかし、私はシリアルポート接続を開くことによって、ATコマンドを送信しようとした無応答

しかし、まだ応答がありません。私はThread.Sleep()を使用して待って、また、ハンドラを使用して、p_DataReceivedを試みました。まだ応答はありません。

一つの例は、「OK」の応答を持っている必要があり、コマンド「AT」シンプルになります。しかし、誰応答は任意のポインタは

(すなわちBytesToReadプロパティのサイズが0である)私はD-Linkのdwm222 4G LTEのUSBアダプタで

これをしようとしているすべてではありませんいただければ幸いです!

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

はあなたのイベントが発火しているのですか?メッセージボックスにnullが表示されていますか? –

+0

イベントがトリガーされず、応答STRが空です(レスポンスSTR = "")。 –

+0

別の質問:異なる "mySerialPort.NewLine ="設定を試すことができますか? Windowsの場合、 "Environment.NewLine"は "\ r \ n"です(CR + LF)。そして、おそらくあなたのモデムは "CR"だけでanwers。試してみる価値がある:mySerialPort.NewLine = "\ r"、またはC#でこのコードが正しいかどうか。 –

答えて

0

は、私はあなたがDTRとRTSを有効に

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

zainに感謝して、バッファをクリアするために使用します。私の主な問題は、バッファサイズが0、つまりBytestoReadが0だったことです。DTRとRTSを有効にすることが解決策であることが分かりました。 –

1

はのバッファをいっぱいに新鮮な着信データは、私はあなたのイベントハンドラで修正したこのコードを試してみ得る必要がありますので、あなたがするたびにバッファ捨てるべきだと思いますシリアルポートオブジェクト。

 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 
関連する問題