Seite 1 von 1

QExtSerialPort unter Linux

Verfasst: 3. Dezember 2011 22:44
von Fuxi
Hallo, bitte um Hilfe.

Ich habe ein Programm, was die serielle Schnittstelle mit QExtSerialPort betreibt.

Unter Windows klappt alles prima.

Aber unter Linux werden keine Daten empfangen.

Hier ein Auschnitt :

port = new QextSerialPort(com, QextSerialPort::EventDriven);
connect(port, SIGNAL(readyRead()), this, SLOT(received()));
port->close();
port->open(QIODevice::ReadOnly);
if (!port->isOpen()) {
QMessageBox msgBox;
msgBox.setText("Comport nicht bereit !");
msgBox.exec();
} else {
port->setBaudRate(BAUD9600);
port->setFlowControl(FLOW_OFF);
port->setParity(PAR_ODD);
port->setDataBits(DATA_8);
port->setStopBits(STOP_1);
}


Geht das unter Linux ?

Danke
Herbert

Re: QExtSerialPort unter Linux

Verfasst: 4. Dezember 2011 13:34
von solarix
Welchen Wert hat "com" in "port = new QextSerialPort(com, QextSerialPort::EventDriven);"?

Re: QExtSerialPort unter Linux

Verfasst: 4. Dezember 2011 14:42
von Fuxi
Hallo

bei Windows com1 com2 usw
in linux ttyS0 ttyS1 usw

Danke

Qextserialport unter Linux

Verfasst: 6. Dezember 2011 21:50
von Fuxi
Hallo,

hat jemand Qextserialport / Qt unter Linux am laufen ?

Unter Windows klappt alles super, nur unter Linux bleibt das Programm hängen.

Es scheint auch so, das Eventdriven nicht funktoniert.

Bitte um Hilfe.

Danke
Herbert

Re: Qextserialport unter Linux

Verfasst: 7. Dezember 2011 07:52
von solarix
Bitte keine Doppelposts.. wenn du neue Erkenntnisse hast, trag diese doch im Originalpost ein.. (http://www.qtforum.de/forum/viewtopic.php?f=1&t=14485)

Re: Qextserialport unter Linux

Verfasst: 7. Dezember 2011 15:41
von surfman19
Verwendest du folgendes?
"/dev/ttyS0"
oder
"/dev/ttyS1"

was sagt QextSerialEnumerator::getPorts() ?

Re: Qextserialport unter Linux

Verfasst: 7. Dezember 2011 16:46
von jerry42
hi,
ich verwende auch ab und zu meine serielle Schnittstelle unter Linux (aber nicht mit Qt).
Sind für /dev/tty* auch entsprechend die Berechtigung da? Zumindest bei mir scheint standardmäßig nur root lesen/schreiben zu dürfen.
Nur eine Idee...

Gruß
jerry42

Re: Qextserialport unter Linux

Verfasst: 8. Dezember 2011 07:33
von Fuxi
Hallo und danke für die Anworten.

Läuft qextserialenumerator überhaupt unter Linux ?
Auszug aus dem Quelltext
#ifdef _TTY_POSIX_
qCritical("Enumeration for POSIX systems is not implemented yet.");
#endif /*_TTY_POSIX_*/

Habe ich aber nicht ausprobiert.
Wußte bis jetzt nicht wofür das gut ist.
Möchte doch nur Daten über die Serielle Schnittstelle unter Qt und Linux einlesen.

Unter Linux stürzt es dabei ab und unter Windows läuft alles prima.

ZU den Rechten :
Ich denke schon , das ich die habe.
Bin leider nicht so fit in Linux.
Kann aber mit einem Terminalprogramm und mit cat /dev/tty S0 Daten einlesen.
Ich stelle zur Zeit die Parameter für die Schnittstelle im Quelltext ein.
Ist es besser Sie mit stty direkt einzustellen ?

Danke
Herbert

Re: QExtSerialPort unter Linux

Verfasst: 9. Dezember 2011 01:53
von surfman19
vielleicht mal den debugger anschließen and rausfinden wo er abstuerzt?

bei mir steht hier:
/*POSIX CODE*/
#ifdef _TTY_POSIX_
#include "posix_qextserialport.h"
#define QextBaseType Posix_QextSerialPort

habe: qextserialport-1.2win-alpha und du?

Re: QExtSerialPort unter Linux

Verfasst: 10. Dezember 2011 19:08
von Fuxi
Danke surfman19

Ich habe auch die 1,2 win

Ich glaube bei readall stürzt er ab.

Aber nur unter Linux

Habe das aber jetzt anders gelöst.

Vielen dank

Herbert

Re: QExtSerialPort unter Linux

Verfasst: 10. Dezember 2011 19:27
von surfman19
wie hast es geloest?

Re: QExtSerialPort unter Linux

Verfasst: 16. Dezember 2011 07:40
von Fuxi
Hallo surfman19 und die anderen,

Mit :

open,
select
und read

Öffnen,
selectieren ob Daten da sind
Lesen.

Kannst mal googlen, steht
genug im Internet

Gruß
Herbert

Re: QExtSerialPort unter Linux

Verfasst: 7. Januar 2012 02:28
von surfman19
hast ein kurzes beispiel...? was meinst du mit select?

so:

Code: Alles auswählen

        char buff[1024];
  	int numBytes;

        port = new QextSerialPort("\dev\ttyS0");
	port->setBaudRate(bt);   
	port->setFlowControl(ft);
	port->setParity(pt);    
	port->setDataBits(dt);   
	port->setStopBits(st);
	port->open(QIODevice::ReadWrite);

	numBytes = port->bytesAvailable();
	qDebug("bytes available: %d", numBytes);
	if(numBytes > 0) 
	{
	    if(numBytes > 1024) numBytes = 1024;

	    int i = port->read(buff, numBytes);
            ...
       }

Re: QExtSerialPort unter Linux

Verfasst: 22. Februar 2012 14:18
von QtGuy
Hallo,

das Thema ist zwar nicht ganz neu, aber vielleicht hilft die Antwort ja doch jemandem weiter.

Und zwar habe ich vor einiger Zeit mal mit nem Arduino-Microcontroller rumgespielt und habe die einzelnen Pins des Controllers auch über QExtSerialPort seriell gesteuert.

Ich habe dazu eine ziemlich alte Version von QExtSerialPort verwendet und einige Bezüge zu Windows entfernt, da es sich sonst nicht compilieren liess unter OSX. Unter Linux und eben OSX läuft es aber problemlos.

Ich habe einmal ein unfertiges Projekt verpackt, welches ich gerade nochmal unter OSX mit Qt4.8 starten konnte. In dem Programm sieht man recht simpel, wie in der MainWindow.cpp der serielle Port angesprochen wird, wie die Verbindung aufgebaut wird und wie Daten gelesen und empfangen werden können.

Wenn man den entsprechenden Seriellen Port im Quellcode einträgt, sollte man damit einfach ein wenig rumtesten können.
Qarduino 2.zip
Beispiel für serielle Kommunikation mit Qt
(150.94 KiB) 361-mal heruntergeladen