0

だから私はデバイスと話しています.TXピンとRXピンは実際には内部で結合されています. デバイスにデータを送信すると、イベントによって同じデータが取得されSerialPort.DataReceivedます。

データが送信された後にのみ、このイベントをトリガーしたいと思います。
データを送信する前に単にサブスクライブを解除しようとしましたが、一度サブスクライブSerialPort.Writeが呼び出されましたが、書き込み関数は別のスレッドで処理されているように見えるため、サブスクライブがすぐに行われるため、データを受信します。

サブスクライブに使用できる「DataSendComplete」タイプのイベントはないようです。何か案は?

編集:追加しようとしました

if (serialPort.BytesToWrite != 0)
            return;   

しかし、イベントがトリガーされるまでに、すべてのデータが既に送信されていると思います。

4

1 に答える 1

1

これを確実に行う方法はなく、正しいタイミングを得ることができない可能性があります。ドライバーが送信バッファーから UART にデータを物理的に送信する正確な時間、および UART が FIFO 内のバイトを送信する正確な時間は、ユーザー モード プログラムでは決定できません。ドライバーだけがそれを撃つことができ、このオプションはありません。

このデバイスが Hayes コマンド セットを使用している場合は、ATE0 コマンドのように、デバイスでエコーをオフにするオプションを探す必要があります。または、DataReceived イベント ハンドラーで送信したバイト数を単に破棄します。

于 2013-01-23T21:07:12.033 に答える