2011-03-30 64 views
1

我正在開發QtCreator中的Qt/C++程序,它使用QextSerialPort從串行端口讀寫數據。我的程序向Rhino Mark IV控制器發送命令,並且必須讀取這些命令的響應(以防萬一它們產生任何響應)。我的開發和部署平臺是Windows XP Professional。QextSerialPort的字符編碼問題(Qt/C++)

當Mark IV向命令發送響應並且我的程序從串口緩衝區讀取該響應時,數據沒有正確編碼;我的程序似乎沒有得到普通的ASCII數據。例如,當Mark IV發送ASCII「0」(十進制48)後跟一個回車符(十進制13)時,我的緩衝區(char *)得到-80和13.字符未正確編碼,但回車確實。我曾嘗試使用read (char *data, qint64 maxSize)readAll()

我一直監視串行端口的通信使用兩個監視器即解釋ASCII數據,並顯示對應的字符,並以兩種方式發送的數據似乎正確編碼(它們實際上是正確顯示)。鑑於QByteArray不解釋任何字符編碼,並且我已經嘗試使用read (char *data, qint64 maxSize)readAll(),我已經拋棄了這個問題可能是由Qt引起的。但是,我不確定問題是否由QextSerialPort引起,因爲我的程序正確發送(寫入)數據,但沒有讀取正確的字節。

我也嘗試過使用超級終端手動與Mark IV控制器通話,並且通信也正確發生。我建立與以下parammeters使用超級終端的連接:

  • 波特率:9600
  • 數據位:8
  • 奇偶校驗位:0
  • 停止位:1個
  • 流控制:硬件

我的程序使用相同的參數設置串口。超級終端的作品,我的程序沒有。

我開始使用qextserialport.sourceforge.net的QextSerialPort 1.1,然後嘗試使用QextSerialPort on Google Code的最新源代碼,問題仍然存在。

什麼導致了錯誤的字符編碼?

我需要做些什麼來解決這個問題?

回答

0

最後,我意識到我沒有正確配置串口,as suggested by Judge Maygarden。我沒有在設備手冊中找到該信息,而是在爲該設備開發的軟件產品手冊中找到該信息。

正確的方法來設置串行端口用於連接到Mark IV的控制器是設置

  • 波特率:9600
  • 數據位:7
  • 奇偶:甚至
  • 停止位:2位
  • 流控制:硬件

Howev呃,我仍然想知道爲什麼超級終端即使配置錯誤也能正確顯示字符。

1

48與-80的氣味像一個簽名字符與unsigned char不匹配對我。嘗試使用顯式unsigned char *而不是char *。