Проблемы записи в последовательный порт QT 5.2 с Windows 7

Мы используем FTDI последовательный порт CHIP в нашем оборудовании. Теперь у нас есть рабочий код в Linux, и мы перешли на Windows 7. У нас странные проблемы.

Эта проблема:
Мы не можем записать данные в последовательный порт без запуска другого консольного приложения, которое делает это:

 serial.setPortName("COM3");
if (serial.open(QIODevice::ReadWrite)) {
bool success = serial.setBaudRate(QSerialPort::Baud9600) &
serial.setStopBits(QSerialPort::OneStop) &
serial.setDataBits(QSerialPort::Data8) &
serial.setParity(QSerialPort::NoParity) &
serial.setFlowControl(QSerialPort::NoFlowControl);
qDebug() << "Connected to usb device: " << (success ? "OK" : "FAIL");

while(true) {
if(serial.waitForReadyRead(-1)) {
QByteArray out = serial.readAll();
for(int i=0; i< out.length(); i++) {
qDebug() << (int) out[i];
}
}
}
serial.close();

Так что это просто цикл с прочитать все. Аппаратные средства ничего не отправляют, поэтому чтение — это просто бесконечный цикл. После закрытия и запуска нашей программы записи она работает правильно.

char* input;
input = new char[size+3];
QByteArray bytearr;

for(int i=0;i<size+2;i++) {
input[i] = (char) package[i];
bytearr.append((unsigned char) package[i]);
}QString serialPortName = "COM3";
QSerialPort serialPort;
serialPort.setPortName(serialPortName);
serialPort.open(QIODevice::ReadWrite);
serialPort.write(bytearr);
serialPort.flush();
serialPort.close();

После запуска read все работает, но без read all ничего не получится. Что мы делаем не так?
Благодарю.

3

Решение

У нас была похожая проблема в нашем приложении с платой с чипом FTDI. Мы попытались записать байты со скоростью 19200 бод / с, хотя в реальном времени они имели скорость около 1200 бод / с (с помощью осциллографа). Проблема заключалась в закрытии последовательного порта сразу после записи байта. Помогло только ожидание с использованием QThread :: msleep (5) перед закрытием порта. Кажется, что устройство сбрасывается или что-то во время закрытой операции, и последние байты отправляются с ложной скоростью передачи и другими параметрами.

2

Другие решения

Я обнаружил, что SW последовательного порта QT требует, чтобы вы работали с событиями QT.
Помещение qApp-> processEvents () в цикл до того, как чтение заставило меня работать.

(QT 4.8.5 в Windows-7)

1

По вопросам рекламы [email protected]