Qt-serial-port: schreiben und Lesen von Daten

Ich bin in der Lage, eine Verbindung zu meinem seriellen port, aber ich brauche zum Lesen von Daten aus es die ganze Zeit.

Es arbeitet für etwa 39 Minuten, aber nachdem es nicht an der Linie serial.flush().

Wenn ich halt Qt und neu starten, es hält auch am serial.flush(). Ich muss neu starten mein modem zu lassen, es funktioniert wieder...

Ich bin mir nicht sicher, ich bin der Ausführung dieses richtig...

//Open Serial connexion
QSerialPort serial;
serial.setPortName("usbserial-26214A");
serial.open(QIODevice::ReadWrite);
serial.setBaudRate(QSerialPort::Baud115200);
serial.setDataBits(QSerialPort::Data8);
serial.setParity(QSerialPort::NoParity);
serial.setStopBits(QSerialPort::OneStop);
serial.setFlowControl(QSerialPort::HardwareControl);

if (serial.isOpen() && serial.isWritable())
{
qDebug() << "Serial is open";

QByteArray output;
QByteArray input;

  while(true)
  {
  output = "AT+CPMS=\"SM\"\r";
  serial.write(output);
  serial.flush();
  serial.waitForBytesWritten(1000);
  serial.waitForReadyRead(1000);
  input = serial.readAll();
  }
}

//EDIT

wenn das löschen flush es funktioniert, aber der code geht wirklich schnell. Es warten nicht WaitFor...

Nach dem 2. loop, die er nicht mal Zeit hat, Daten zu Lesen.

serial.isOpen() && serial.isWritable() sendet immer true in der while-Schleife.

Programm Stoppt bei flush nach 30 Minuten!

  • Wenn waitForBytesWritten() sollte es sicher sein das weglassen der flush(). Ich denke, das wird nicht das problem lösen wenn. Ist es möglich, führen Sie einfach einen soft-reset immer vor AT+CPMS-Sequenz? Nicht sicher, dass die Verbindung ein problem in Bezug auf Ihre Anwendung.
  • Wenn das löschen flush Linie, loop geht wirklich schnell und don ' T scheint zu waitFor.... Wie man einen soft-reset?
  • Funktioniert die Anwendung weiterhin, indem Sie einfach powercycling das modem ? Oder haben Sie auch an die App starten ? Im ersten Fall würde ich davon ausgehen, dass das modem zu stecken. Vielleicht sollten Sie das Debuggen der Staat das modem und überprüfen, ob es Befehle zu beleben es.
  • Durch powercycling das modem, es funktioniert. Auch ich habe die app starten, weil ich kann nicht finden Fehler... serial.isOpen() || serial.isWritable()wahr ist und serial.errorString null ist
  • Siehe edits
  • Warum sind Sie blockiert in den ersten Platz? Warum sind Sie nicht unter Verwendung des async-API?
  • Wie macht man das? Kann das das problem lösen?
  • Check dieser aus. Ich habe dieses Beispiel vor einer Weile, also im Grunde setzen Sie Ihre readAll () - Aufruf in den Griff geschriebene bytes-slot. Es muss nicht unbedingt lösen Ihr Problem, aber es wird Euch gehen, und sollten Sie schreiben Sie Ihren code wie diesem sowieso.
  • Danke werde ich ändern, aber keine Ahnung warum flush funktioniert nicht, nach 30 Minuten? und wieder funktioniert, wenn powercycling das modem?
  • Keine Ahnung, aber Sie könnten auch versuchen, öffnen Sie im ungepufferten Modus statt bündig.

InformationsquelleAutor gr3g | 2014-10-20
Schreibe einen Kommentar