RS232 経由で .NET SerialPort クラスを使用して接続しているハードウェアがあります。ドキュメントによると、どのタイプのフロー制御もサポートしていません。
クエリとコマンドをデバイスに書き込むことができます。クエリの場合、読み取りにすぐに応答します。デバイスのエコーがオンになっていて、コマンドの書き込み後に読み取りを行う必要がある場合、コマンドの書き込みも正常に機能します。コマンドとレスポンスは最大 7 文字です。
ただし、エコーがオフで、2 つのコマンドを立て続けに書き込むと、書き込みの間に Thread.Sleep(15) を挿入しない限り、2 番目のコマンドは実行されません。の上。
必ずしもエコーがオンになることを保証することはできませんし、明示的にオンにすることも実際にはオプションではないため、基本的には動作を見つけたときに処理する必要があります。
SerialPort は次のように設定されます。
SerialPort _serialPort = new SerialPort
{
PortName = "COM1",
BaudRate = 9600,
Parity = Parity.None,
DataBits = 8,
ReadTimeout = 5000,
WriteTimeout = 5000,
NewLine = "\x0D"
};
そして、私はそれと通信するために WriteLine と ReadLine を使用しています。
スレッドをスリープ状態にするのはハックのように感じます。私はすべてのグーグルで代替手段を見つけていません。
それで、私は何かを逃しましたか、シリアルポートへの次のコマンド書き込みをいつ実行できるか、または Thread.Sleep が私の多くのものであるかを確認できる方法はありますか?