Я разрабатываю программу Qt / C ++ в QtCreator, которая читает и записывает данные с / на последовательный порт, используя QextSerialPort.Моя программа отправляет команды контроллеру Rhino Mark IV и должна прочитать ответ этих команд (на случай, если они произведут какой-либо ответ).Моя платформа разработки и развертывания - Windows XP Professional.
Когда 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используя HyperTerminal, и связь также происходит правильно.Я установил соединение с помощью HyperTerminal со следующими параметрами:
- Скорость передачи: 9600
- Биты данных: 8
- Биты четности: 0
- Стоповые биты: 1
- Управление потоком: аппаратное обеспечение
Моя программа настраивает последовательный порт, используя те же параметры.HyperTerminal работает, моя программа - нет.
Я начал использовать QextSerialPort 1.1 с qextserialport.sourceforge.net , а затем попытался использовать последний исходный код из QextSerialPort в коде Google и проблема остается.
Что вызывает неправильную кодировку символов?
Что мне нужно сделать, чтобы решить эту проблему?