1

RS232 プログラミングの問題で頭が真っ白になりました。

シリアルポートに書き込んでいるいくつかの文字を含む char[7] バッファがあります。Serial Port Monitor プログラムを使用して、ポートからの着信と発信を監視しています。

ポートに送信しているバッファには含まれています

a5 00 01 00 0b 4a

モニター プログラムに到達すると、モニター プログラムは以下を表示できることを示します。

3f 00 01 00 0b 4a

そのため、ヘッダー文字が間違って監視されているか、プログラムの途中で変更されています。

私は困惑しており、これを回避する方法がわかりません。

これは、バッファを作成するために使用しているコードです。

        char[]cmdBuffer=createCommandBuffer(0, 4, 1);
        cmdBuffer[4] = Convert.ToChar(what);
        placeChecksums(cmdBuffer);
        serialPort.Write(cmdBuffer, 0, cmdBuffer.Length);

呼び出す前にブレークポイントで cmdBuffer の内容を確認しましたがserialPort.Write、それらは正しいです。モニター プログラムが間違っているとしか結論付けられませんが、それを使用して、同じボー レートで実行されている他のソフトウェアを監視すると、正しく監視されます。

他の誰かがこの同じ問題を抱えていましたか?

4

1 に答える 1

3

文字を処理していますが、値をバイトとして表現しました。

物事を単純化するために、可能な限りどこでもバイナリ データを使用することを個人的におa5勧め3fEncodingますSerialPort。値 0xA5 は ASCII には存在しないため、「?」に変換されます。代わりは。

これが本当にテキストであることが意図されている場合は、エンコーディングを適切に変更します。ただし、バイナリ データであることが意図されている場合は、代わりにバイナリ API を使用します (文字、文字配列、および文字列ではなく、バイトおよびバイト配列を扱います)。

于 2012-05-23T12:59:03.327 に答える