2017-02-23 7 views
1

私はモデム通信ツールのGUIを書いています。これはATコマンドを受け取り、モデムで実行した後にモデムから結果を返すことができます。受信したデータを処理するためにシリアルポートのdatareceivedイベントを使用しますが、モデムからの応答だけでなく、ATコマンドも含まれています。今、私はので、それはあると思う:モデムは、モデムがコマンドを実行します)、その後datareceivedイベントシリアルポートの読み取り結果にはレスポンスが含まれていますが、これを解決する方法も示しています。

3をトリガし、それを受け取る

1)私のGUI

2からのコマンドで送信)、返事もdatareceivedイベントをトリガ。

4)受信したデータは、その後、私の指定されたコマンドの両方を含み、また応答

例えば:

入力:+ COPS AT = 0

出力:+ COPS = 0OK AT

入力(OKは、モデムの応答である):AT

出力:ATOK(OKがあるモデム応答)

MSDNで解決策を見つけることができませんでした。モデムには2つの異なるバッファがありますか? これを解決するには?

void serialPort_DataReceived(object s, SerialDataReceivedEventArgs e) 
{ 

    if (e.EventType != SerialData.Chars) 
    { 
     return; 
    } 
    try 
    { 
     System.Threading.Thread.Sleep(1000); 
     string indata = atPort.ReadExisting(); 
     string status = timeStamp.ToShortDateString() + " " + timeStamp.ToUniversalTime() + " " + "Read from Modem: " + indata; 
     this.Invoke(new MethodInvoker(delegate() { this.listBox_CommandOutput.Items.Add(status); })); 
    } 
    catch (Exception ex) 
    { 

    } 
} 


private void executeCommandLine() 
{ 
    if (this.textBox_CommandLine.Text != "") 
    { 
     try 
     { 
      atPort.DiscardInBuffer(); 
      atPort.DiscardOutBuffer(); 
      this.atPort.Write(this.textBox_CommandLine.Text.ToString()+"\\r"); 
      this.listBox_CommandOutput.Items.Add(timeStamp.ToShortDateString() + " " + timeStamp.ToUniversalTime() + " " + "Write to Modem: " + this.textBox_CommandLine.Text.ToString()); 

     } 
     catch (Exception exc) 
     { 
      this.listBox_CommandOutput.Items.Add(exc.ToString()); 
     } 
    } 
    else MessageBox.Show("Command can't be void.", "COM talk", MessageBoxButtons.OK); 

}

答えて

3

問題はあなたのコードではありません。

は、ここに私のコードです。モデムの中にはデフォルトでエコーモードを使用しています。送信者に送信されたすべての文字を送信者にエコーします(ターミナルのように使用することができます)。あなたは、ATコマンドを使用してエコーモードを無効にすることができ

ATE0 
+1

パーフェクトは、それが動作しますが、私は私が与えるコマンドを繰り返し表示されません。ありがとうございました! – Aaron

関連する問題