Öffnen serieller Schnittstelle schlägt fehl (ERROR FILE NOT FOUND)

28/02/2008 - 16:25 von peterbruells | Report spam
Hallo!

Ich habe hier ein Problem mit dem Ansprechen einer seriellen
Schnittstelle. (Visual C++ & QT Library)

Konkret habe ich ein Geràt, das ASCII auf eine serielle Schnittstelle
blàst. Eingebaut ist ein FTDI-Chip, so daß ich über USB eine
virtuelle serielle Schnittstelle habe. Da ich nicht weiß, auf welchen
Port Windows die legt, klappere ich COM1 bis COM9 ab, und versuche
dort die Geràteausgabe zu finden. Dann lese ich und schaue, ob das
mein Geràt ist und behalte dann die COM offen.

Das klappt auch - meistens. Leider nicht immer.

Manchmal schlàgt das CreateFileA fehl und es gibt ein
ERROR_FILE_NOT_FOUND (2).

Wenn ich danach etwas wie HyperTerminal oder HTerm benutze um die
Schnittstelle zu öffnen, dann klappt das sofort UND anschließend
klappt es auch mit meinem Programm.

Mittlerweile habe ich auch ein System wo ich das super reproduzieren
kann, immer nach der gleichen Methode:

* Rechner neu starten (ohne Geràt)
* Geràt anstöpseln
* Programm starten -> klappt nicht, ERROR_FILE_NOT_FOUND
* P. beenden
* Terminal Programm starten, Schnittstelle öffnen, Daten
auslesen, beenden
* Programm starten -> Schnittstelle wird erkannt.

Hier ist der relevante Code:


for (int pn=_portnumber; pn < 10; pn++ ) {
PORT = QString("COM%1:").arg(pn);
qDebug(QString("Sensor: TRYING PORT %1").arg(PORT));
hPort = CreateFileA( PORT ,GENERIC_READ, 0, NULL,
OPEN_EXISTING, 0, NULL);
qDebug("Createfile error %x", GetLastError());
}

if (hPort == INVALID_HANDLE_VALUE) {
qDebug(QString("Sensor: Cannot open IO port (error
%1)").arg(GetLastError()));
disconnect();
}



Hat hier jemand eine Idee? Laut Dokumentation und Beispiel glaube
ich alles richtig zu machen, aber irgendwas sehr esoterisches oder
sehr offensichtliches entgeht mir. :-(

for (int pn=_portnumber; pn < 10; pn++ ) {
PORT = QString("COM%1:").arg(pn);
qDebug(QString("Sensor: TRYING PORT %1").arg(PORT));
hPort = CreateFileA( PORT ,GENERIC_READ, 0, NULL,
OPEN_EXISTING, 0, NULL);
qDebug("Createfile error %x", GetLastError());
}
 

Lesen sie die antworten

#1 René König
29/02/2008 - 02:07 | Warnen spam
Hallo!

Versuch es bitte mal ohne Doppelpunkt am Ende:
QString("\\\\.\\COM%1").arg(pn)

Gruß,
René

Ähnliche fragen