2016-02-05 6 views
0

Итак. Я использую этот код, чтобы прочитать некоторые данные от powertek pa4400a, и иногда я могу читать его без проблем, но иногда я получаю странные ответы. Я даже не могу понять, что означают символы.Искаженные ответы на последовательный порт

QSerialPort asd; 
asd.setBaudRate(QSerialPort::Baud19200); 
asd.setDataBits(QSerialPort::Data8); 
asd.setFlowControl(QSerialPort::NoFlowControl); 
asd.setParity(QSerialPort::NoParity); 
asd.setStopBits(QSerialPort::OneStop); 
asd.setPortName("ttyUSB0"); 
asd.open(QSerialPort::ReadWrite); 
asd.write(com); 
asd.waitForReadyRead(10000); 
QString ans = asd.readAll(); 

Строка анс должна выглядеть следующим образом:

"00.00E+0; 00.00E+0;+00.00E+0; 00.00E+0; 000:00:00;<<END OF DATA>>" 

Но я получаю что-то вроде этого:

"\xFB" 

или любой другой материал, который не так.

Я получил правильный ответ много раз, но что-то случилось, и я больше не могу читать информацию.

+0

Вы ничего плохого не делаете, но у меня нет хорошего опыта с псевдосинхронным кодом, который использует любые методы 'waitForXxx'. Посмотрите, можете ли вы реализовать свою систему команд и ответов, используя подход из [этого ответа] (http://stackoverflow.com/a/32595398/1329652). На какой платформе это? –

+0

Windows, но проблема была в управлении потоком. Я переключился на HardwareControl, и теперь он работает. – Alex

ответ

1

Проблема была в том, что машина, с которой я отправляла команды, использовала HardwareControl, но я использовал NoFlowControl, и это испортило мои ответы.

Смежные вопросы