Forum: PC-Programmierung Qt: Problem mit readAll


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Olaf (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Moin da draussen,

Ich hab vor einiger Zeit mal ein Programm mit Qt geschrieben welches
den USB-Port meines Oszis ausgelesen hat. Der Oszi simuliert im prinzip 
eine
RS232.
Das hat auch mal funktioniert!

Mittlerweile habe ich leider einen neuen, Rechner, eine neue 
Linuxinstallation und wohl auch eine neuere Qt-Version. Aktuell ist es 
5.12.3, es war mal 5.7.

Folgendes passiert:

Ich loesche den Empfangsbuffer:

        serial->clear(QSerialPort::Input);
  serial->flush();

Ich sende dem Oszi die Aufforderung mir seinen ID-String zu schicken:

    sendString(MyString);

Ich warte eine Zeit lang mit waitForReadyRead

Ich lese mit serial->readAll().

Als Antwort bekomme ich das hier:
1`1`HAMEG,HMO2022,014315064,04.531 1`1`1`

Diese 1`, also 0x31 und 0x60 sind zuviel! Die Anzahl der ueberzaehligen 
Zeichen haengt von der Wartezeit ab. Warte ich also zwischen dem Buffer 
loeschen und dem Senden etwas habe ich vor der Antwort mehr Fehlzeichen, 
warte ich danach etwas laenger habe ich dort mehr Fehlzeichen.
Es sieht also so aus als wenn irgendwas den Buffer der virtuellen (USB!) 
seriellen Schnittstelle langsam mit falschen Zeichen füllt.
Hat da jemand eine Idee woran das liegen koennte?

Olaf

von Rolf M. (rmagnus)


Bewertung
0 lesenswert
nicht lesenswert
> Hat da jemand eine Idee woran das liegen koennte?

Liegt es denn wirklich an Qt? Du könntet die Schnittstelle ja mal mit 
einem seriellen Terminal öffnen und schauen, was dort rauskommt.

von Sven P. (haku) Benutzerseite


Bewertung
-1 lesenswert
nicht lesenswert
Ists Windows?
Läuft da noch irgendein dämlicher Maustreiber, der versucht, eine 
serielle Maus anzusprechen..?

von Olaf (Gast)


Bewertung
0 lesenswert
nicht lesenswert
> Liegt es denn wirklich an Qt?

Das frage ich mich auch. Bloederweise ist ja mittlerweile an meiner 
Umgebung alles anders. Leider laeuft hterm auf dem neuen System nicht 
mehr (libary-versionen, seufz) und mit minicom hab ich es gerade nicht 
geschafft was zu senden, oder es kam jedenfalls keine Antwort.
Da muss ich aber noch was graben oder ein kleines Testprogramm in C 
direkt auf dem Port hinzimmern.

> Ists Windows?

Das ist linux. Allerdings auch da koennte es sein das da irgendwas 
anderes den Port befingert. Zumal diese ueberzaehligen Zeichen so alle 
1-2s im Buffer auftauchen. Also relativ lahm. Allerdings wuerde ein 
getty ja eher den Oszi verwirren weil es was rausschickt. Das Oszi 
antwortet aber korrekt wenn man von den ueberzaehligen Zeichen absieht.

Ist jedenfalls mal ein interessantes Problem. :)

Olaf

von Jim M. (turboj)


Bewertung
0 lesenswert
nicht lesenswert
Schaul mal (z.B. mit lsof) nach ob der Port noch woanders geöffnet ist.

NetworkManager z.B. öffnet USB CDC Ports um USB 3G Modems anzusteuern. 
Das kann man sicherlich auch irgendwo unterbinden.

von kontext (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Kannst Du mal ein bisschen zusammenhängenderen Code posten?

Vom Öffnen der Schnittstelle, senden des Kommandos, Einlesen der Antwort 
bis zur Ausgabe des Strings.

Das irgendein anderes Programm oder der NetworkManager heimlich Daten in 
den Port schreibt, wäre ziemlich abenteuerlich.

von Frank K. (fchk)


Bewertung
0 lesenswert
nicht lesenswert
NetworkManager nicht, aber der ModemManager wäre ein Kandidat. Wenn Du 
keine LTE-Modems hast, kannst Du den ohne Probleme und ohne Nachteile 
deinstallieren.

fchk

von Olaf (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Also ich weiss zwar noch nicht wo es her kommt, aber es liegt nicht an 
Qt!

Ich hab gerade mal ein Programm mit dem Namen "scriptcommunicator" 
installiert. Das ist ein ziemlich cooles Terminalprogramm fuer Linux und 
Windows. (anschauen!)
https://sourceforge.net/projects/scriptcommunicator/

Sobald ich da den Port zum Oszi aufmache kommen die falschen Bytes rein.
Entweder das liegt am Kernel oder sonst wie am System. Und zwar so 4-5x 
pro
Sekunde.
Hm....

Olaf

von Frank K. (fchk)


Bewertung
0 lesenswert
nicht lesenswert
apt remove modem-manager

jetzt besser?

fchk

von Olaf (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ich hab den Modemmanager mal gerade entfernt. Hat aber nichts geändert.

Hier hat einer genau mein Problem mit anderer Hardware:

https://stackoverflow.com/questions/32831461/generic-usb-serial-device-continuously-gives-1

Allerdings funktioniert seine Loesung bei mir auch nicht. Muss ich noch 
weiter schauen...

Olaf

von Olaf (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Interessanterweise geht es jetzt doch...
Keine Ahnung was da schief gegangen ist. Das FTDI Geraet ist dem Kernel
eigentlich bekannt.

Olaf

von Rolf M. (rmagnus)


Bewertung
0 lesenswert
nicht lesenswert
Jim M. schrieb:
> Schaul mal (z.B. mit lsof) nach ob der Port noch woanders geöffnet ist.

Hast du das mal gemacht? Vielleicht findest du damit den Übeltäter.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.