Serial / rs232 - Alternative ideen zu QextSerialPort
Serial / rs232 - Alternative ideen zu QextSerialPort
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
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
die Read Funktion mit nem Timeout von 0:
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
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");
}
}
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
Timeout verlangt zwei Argumente
Syntax:
vielleicht ist dass das Prob
Syntax:
Code: Alles auswählen
void QextSerialPort::setTimeout (ulong sec, ulong millisec) [virtual]
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
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
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
@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
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
-
methusalem
- Beiträge: 186
- Registriert: 11. August 2005 08:21