9

SerialPortクラスを使用して外部デバイスと通信しています。私は毎秒300ボーで通信を開始しますが、最初の「ハンドシェイク」の後、デバイスで指定されたボーレート(通常は9600 Bps)に切り替える必要があります。

ボーレートを上げた後も通信を続けようとして失敗しましたが、理由はわかりません。それは私の質問につながります:ボーレートを変更する適切な方法は何ですか?接続が開いているときに実行できますか、それとも最初に接続を閉じる必要がありますか?

ドキュメントでこれに関する情報を見つけることができませんでした...

私は両方を試しましたが、両方の方法で失敗しました。そのため、明らかな何かが欠けているに違いないと思いました。

4

2 に答える 2

12

これまでの私の経験から、最も安全な方法は、最初に接続を閉じ、レートを変更してから、再度開くことです。速度が変更されたことを確認するためにいくつかの制御文字を送信するのをおそらく待機するため、デバイスはこれを気にしません。

ポートが開いているときにボーレートを変更してみることができますが、これにより、バッファで無効な文字が検出される可能性があります(デバイスとプロトコルによって異なります)。つまり、変更後すぐにバッファをクリアする必要があります(を使用してSerialPort.DiscardInBuffer()) 。

于 2011-04-28T07:01:42.530 に答える
6

開いているときにSerialPort.BaudRateを変更できることがわかりました。しかし、@ Grooの回答で言及されているSerialPort.DiscardInBufferは、良いヒントです。

于 2011-05-28T20:10:51.077 に答える