Serial / rs232 - Alternative ideen zu QextSerialPort

Verschiedenes zu Qt
Antworten
ape
Beiträge: 44
Registriert: 5. Dezember 2007 15:07

Serial / rs232 - Alternative ideen zu QextSerialPort

Beitrag von ape »

Hallo,

ich habe jetzt einige Tage (verzweifelt) damit verbracht QextSerialPort zu testen und in mein Programm einzubinden.

auf den ersten Blick funktioniert dies auch, jedoch stosse ich so langsam auf Probleme, limitierungen oder sonstige Engpässe

Beispiel:
Mein Programm kann mittels QextSerialPort:
* Verbindugen aufbauen
* Nach vorhanden COM Schnittstellen scannen
* Text über die Schnittstelle senden

jedoch geht exakt eine funktion nicht:
* READ

Je nach Timeout Setting erhalte ich beim REAd Versuch einfach keine Daten, oder Portmon listet Daten und das Programm raucht ab.

Ich habe inzwischen unter Windows folgende Versionen ausprobiert:
--
* 1.1 von SF.net
* 1.2-win alpha von SF.net
* CVS von SF.net
--

in keiner dieser 3 Versionen funktioerte die REAd funktion.
Interessanterweise sehe ich in Portmon, welches ich als Sniffer mitlaufen lasse auch bei Verwendung der QextSerialPort Examples (Qespta) nur einen funktionierende Write, aber kein READ.

Da ich anhand der Mailingliste und Sf.net selber eh den Eindruck habem dass das Projekt relativ tod ist, die Frage:

Gibt es andere ansätze ?
Ich bin nicht auf die Platformunabhängigkeit angewiesen. Windows reicht eigentlich in diesem Fall.

Oder kennt Ihr das READ Problem und euch fällt was ein ?


bin für jegliche Idee offen

Danke im vorraus
ape
archon
Beiträge: 117
Registriert: 22. August 2006 12:01

Beitrag von archon »

poste mal ein bischen code
ape
Beiträge: 44
Registriert: 5. Dezember 2007 15:07

Beitrag von ape »

die Read Funktion mit nem Timeout von 0:

Code: Alles auswählen

void MainWindow::readPort()
{
// READ-TEST BEGIN
QextSerialPort *CommPort = new QextSerialPort(selectedInterface);
//CommPort->setTimeout(1000);
CommPort->setTimeout(0);											
if (CommPort->open(QIODevice::ReadWrite))						
{
CommPort->flush();
		
// WRITE TEST
CommPort->write("Another Write Test v.1");

// READ TEST V.1
QByteArray buffer("");
const qint64 available = CommPort->bytesAvailable();
buffer = CommPort->read(available);
loggingBox->append("Content of buffer: " + buffer);
	

CommPort->close();					
// Port closen
}
else
{
// Debug info:	
loggingBox->append("NOT connected");
}	
}
dies als kleines Beispiel wie von dir verlangt.
Das WRITE klappt so 1a, READ wird auch im Sniffer geloggt, jedoch wie gesagt, bei Timeout > 0 erhalkte ich keine Daten und bei Timeout = 0 erhalte ich keine rückmeldung mehr vom Programm

Ist jetzt anhand der Testphase alles in der Read funktion,, nicht davon irritieren lassen
archon
Beiträge: 117
Registriert: 22. August 2006 12:01

Beitrag von archon »

Timeout verlangt zwei Argumente

Syntax:

Code: Alles auswählen

void QextSerialPort::setTimeout (ulong sec, ulong millisec) [virtual]
vielleicht ist dass das Prob
ape
Beiträge: 44
Registriert: 5. Dezember 2007 15:07

Beitrag von ape »

jo da kommt ein weiteres wunder in QextSerialPort.

Meine 1.2 alpha will nur einen wert...warum auch immer.
Ist mir in so manchen Threads auch schon aufgefallen
archon
Beiträge: 117
Registriert: 22. August 2006 12:01

Beitrag von archon »

komisch vielleicht ladst dir einfach statt über cvs die 1.2 über die homepage runter:

http://sourceforge.net/project/showfil ... id=244862


danach kopierst einfach mal ohne dll compilierung die qextserialbase h/cpp und die qextserialport h/cpp in dein verzeichnis
Gruss
methusalem
Beiträge: 186
Registriert: 11. August 2005 08:21

Beitrag von methusalem »

ich benutze die Version 1.1 und bei mir läuft das read() einwandfrei!

Code: Alles auswählen

void ReadThread::run(){

	int numBytes = 0;
	char buff[1024]="";

	serPort->open(QIODevice::ReadOnly);

	while(running){

		numBytes = serPort->bytesAvailable();
		
		if(numBytes > 0){

			count ++;
			strcpy(buff,"");
			
			if(numBytes > 1024){
				numBytes = 1024;
			}
		
			int i = serPort->read(buff, numBytes);
			buff[i] = '\0';
			
		}
		msleep(100);
	}
}

Martin
ape
Beiträge: 44
Registriert: 5. Dezember 2007 15:07

Beitrag von ape »

@methusalem:

ich frage mich schon länger, woher deine qextserialport.lib kommt

Wenn ich hier irgendein QextSerialPort compile erhalte ich eigentlich immer nur folgende Dateien:
* qextserialport.dll
* qextserialport.a
aber noch NIE die .lib


@archon:
ich habe mit 1.2 alpha angefangen, dann den sprung zurück auf 1.1. Daraufhin einen Patch der Mailingliste in 1.1 reingepatched und abschliessend ne CVS-version versucht (letzte hoffnung).
Sprich: obiger Link war mein erster Versuch :/


Warum mein Timeout nur ein INT will, versteh ich ebenso wenig....sorry, wenn das ganze hier konfus wirkt, aber diese REAd Funktion verursacht exakt diese funktionalität

Nur um anhaltspunkte zu sammeln:
habt ihr mal QESPTA (example folder) getestet ?
Auch bei dem EXAMPLE funzt bei mir KEIN READ.
Write wiederrum geht 1a, wie auch in meinem Projekt




gruss
ape
archon
Beiträge: 117
Registriert: 22. August 2006 12:01

Beitrag von archon »

Kannst du mal den orginal compiler output posten? Würd mich mal interessieren
methusalem
Beiträge: 186
Registriert: 11. August 2005 08:21

Beitrag von methusalem »

meine *.lib kommt heraus, wenn ich in der pro Datei static angebe und dann QExtSerialPort neu übersetze. Funktioniert aber bei mir auch mit der dll
Martin
ape
Beiträge: 44
Registriert: 5. Dezember 2007 15:07

Beitrag von ape »

Archon: bzgl Timeout mit 2 ints ?

Methusalem: ok, danke für den Hinweis
archon
Beiträge: 117
Registriert: 22. August 2006 12:01

Beitrag von archon »

ape hat geschrieben:Archon: bzgl Timeout mit 2 ints ?

Methusalem: ok, danke für den Hinweis
einfach mal alles...dann wie gesagt probier doch mal den fehler einzuschränken...wenn du probs mit dem linken zur lib hast dann (wie gesagt) kopier das zeug ins projektverzeichnis
Antworten