2

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 が私の多くのものであるかを確認できる方法はありますか?

4

3 に答える 3

0

残念ながら、私のシステムではフロー制御がサポートされていないため、Thread.Sleep が解決策のようです。
エコーがオンかどうかを確認し、オンの場合は ReadLine を使用し、オフの場合は Thread.Sleep(15) を使用するようにコードを設定しました。
気持ち悪いですが、確実に動くので、それでいいのです。

于 2012-06-20T09:22:31.060 に答える
0

http://msmvps.com/blogs/coad/archive/2005/03/23/SerialPort-_2800_RS_2D00_232-Serial-COM-Port_2900_-in-C_2300_-.NET.aspx

ハンドシェイク プロパティを RTSCTS に設定し、CTS が true になったときに PinChanged イベントを処理しますか?

表で「出力」とマークされた行は、シリアル ポートによって高または低状態 (True または > > False) に設定でき、「入力」行は高または​​低として読み取ることができます。PinChanged イベントを使用して > > 入力ピンの 1 つが変更されたときに通知を受けることができます。Handshake プロパティは、RTS/CTS > > > (ハードウェア制御ラインを使用) または XON/XOFF (ソフトウェアを使用) またはその両方を使用するように設定できます。

コントロール ライン名 DB9 ピン SerialPort プロパティ I/O DTR データ ターミナル レディ 4 DtrEnable 出力 RTS 送信リクエスト 7 RtsEnable 出力 CTS 送信クリア 8 CtsHolding 入力 DSR データ セット レディ

于 2012-06-05T16:46:04.567 に答える