QextSerialPortを使用してシリアルポートとの間で読み取りおよび書き込みを行うQt/C++プログラムをQtCreatorで開発しています。私のプログラムはコマンドをRhinoMarkIVコントローラーに送信し、それらのコマンドの応答を読み取る必要があります(コマンドが応答を生成する場合に備えて)。私の開発および展開プラットフォームはWindowsXPProfessionalです。
Mark IVがコマンドへの応答を送信し、私のプログラムがその応答をシリアルポートバッファーから読み取る場合、データは適切にエンコードされていません。私のプログラムはプレーンASCIIデータを取得していないようです。たとえば、MarkIVがASCII「0」(10進数の48)に続いてキャリッジリターン(10進数の13)を送信すると、バッファ(char *
)は-80と13になります。文字は正しくエンコードされていませんが、キャリッジリターンは確かにあります。との両方read (char *data, qint64 maxSize)
を使ってみreadAll ()
ました。
ASCIIデータを解釈して対応する文字を表示する2台のモニターを使用してシリアルポートトラフィックを監視してきましたが、両方の方法で送信されたデータは正しくエンコードされているようです(実際には正しく表示されています)。それQByteArray
は文字エンコードを解釈せず、との両方read (char *data, qint64 maxSize)
を使用してみreadAll ()
たので、問題はQtが原因である可能性があることを破棄しました。ただし、私のプログラムはデータを適切に送信(書き込み)しますが、正しいバイトを読み取らないため、問題の原因がQextSerialPortであるかどうかはわかりません。
また、ハイパーターミナルを使用して手動でMark IVコントローラと通信しようとしましたが、通信も正しく行われます。次のパラメータを使用してハイパーターミナルを使用して接続を設定しました。
- ボーレート:9600
- データビット:8
- パリティビット:0
- ストップビット:1
- フロー制御:ハードウェア
私のプログラムは、同じパラメータを使用してシリアルポートを設定します。ハイパーターミナルは機能しますが、私のプログラムは機能しません。
qextserialport.sourceforge.netからQextSerialPort1.1を使い始めてから、Google CodeでQextSerialPortの最新のソースコードを試してみましたが、問題は解決していません。
間違った文字エンコードの原因は何ですか?
この問題を解決するにはどうすればよいですか?