私はモデム通信ツールの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);
}
パーフェクトは、それが動作しますが、私は私が与えるコマンドを繰り返し表示されません。ありがとうございました! – Aaron