2011-03-30 78 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 *。