1

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の最新のソースコードを試してみましたが、問題は解決していません。

間違った文字エンコードの原因は何ですか?

この問題を解決するにはどうすればよいですか?

4

2 に答える 2

1

48対-80は、私には符号付き文字と符号なし文字の不一致のようなにおいがします。char*の代わりに明示的なunsignedchar*を試してください。

于 2011-03-30T11:39:53.583 に答える
0

最後に、メイガーデン裁判官が提案したように、私はシリアルポートを正しく構成していないことに気づきました。その情報はデバイスのマニュアルにはありませんでしたが、そのデバイス用に開発されたソフトウェア製品のマニュアルにはありませんでした。

Mark IVコントローラーに接続するためのシリアルポートを設定する正しい方法は、設定することです。

  • ボーレート:9600
  • データビット:7
  • パリティ:偶数
  • ストップビット:2ビット
  • フロー制御:ハードウェア

ただし、設定が間違っていても、ハイパーターミナルで文字が正しく表示されたのはなぜか疑問に思っています。

于 2011-04-13T12:18:56.727 に答える