こんにちは、この質問を考えてくれてありがとう: 仮想シリアルポート経由でPCからechos組み込みシステムがコマンドを完了したときにコマンドを戻します。c#シリアルポートのエコーを待ち、それをチェックし、待ち時間がある
組み込みシステムによってコマンドが完了したときに、コマンドをうまく送信してエコーを見ることができますが、エコーされたコマンドが受信されるまでプログラムを待機または遅延させるのに問題があります。次のコマンドを送信してもよい。私は実装しようとしている "ハイレベル"フロー制御の一種と考えています。 コードはC#にあります。 PCと組み込みシステムの間で通信が失われてプログラムがフリーズしないようにするために、エコーを待ってタイムアウトしたいと思います。 これを行うためのきちんとした方法を提案できるwizzの子供たちはいますか? 私は偉大なC#プログラマーではなく、ただ学びました。このコマンドをTransmittするための呼び出しの例です
private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
// If the com port has been closed, do nothing
if (!comport.IsOpen) return;
// This method will be called when there is data waiting in the port's buffer
// Determain which mode (string or binary) the user is in
if (CurrentDataMode == DataMode.Text)
{
// Read all the data waiting in the buffer
string data = comport.ReadExisting();
// Display the text to the user in the terminal
Log(LogMsgType.Incoming, data);
}
else
{
// Obtain the number of bytes waiting in the port's buffer
int bytes = comport.BytesToRead;
// Create a byte array buffer to hold the incoming data
byte[] buffer = new byte[bytes];
// Read the data from the port and store it in our buffer
comport.Read(buffer, 0, bytes);
// Show the user the incoming data in hex format
Log(LogMsgType.Incoming, ByteArrayToHexString(buffer));
}
}
:
text = "AR" + 50 + "\r"; //transmit a command to move
this.comport.Write(text);
現在、私は時間遅延[スレッドを使用してい
これは私が持っている機能を受けています。 Sleep(TIMEGAP)]というメッセージが表示され、メッセージが実行され、組み込みシステムからのエコーバックが正常だと仮定しても、それをチェックしないで、完了まで確実に待つのに非常に長い時間待つ:
text = "AR" + 50 + "\r"; //transmit a command to move
this.comport.Write(text);
Thread.Sleep(TIMEGAP); //Timegap = 10000ms
私は本当に[Thread.Sleep(TIMEGAP)]の時間遅延呼び出しを、シリアルポートの応答を監視する関数/メソッドで置き換えて、送信されたものと同じであることを確認しますプログラムコードを次のコマンドに進めることができ、正しいエコー[上記の例ではAR50 \ r]が例えば5秒間に受信されない場合、プログラムはエラーを報告する。
提案がありますか?
ありがとうございました!
あなたがグローバルバッファに受信したデータを連結する必要がありますので、DataReceivedイベントは、完全なラインのために発生しません。 –
Thread.Sleep()の使用を検討し始めると、DataReceivedイベントを使用する良い理由がなくなります。SerialPort.Read()を使用して応答を取得してください。これが引き起こす可能性のある長い遅延に対処することは、通常次の問題です。ロックとハードプレイス。 –