Hallo,
ich habe hier ein seltsames Problem mit einem USB Seriell Adapter von Digitus.
Und zwar habe ich ein Programm geschrieben, welches über die serielle Schnittstelle mit unserer Hardware kommuniziert. Ich benutze dazu die Async Pro Komponenten. Das Programm läuft jetzt auch schon seit mehreren Jahren ohne Probleme bei der Kommunikation zu haben.
Jetzt häufen sich aber die Klagen von Kunden die den Digitus Konverter benutzen, dass das Programm abstürzt. Ich habe mir jetzt auch so einen Konverter besorgt und kann das Problem mehr oder weniger nachvollziehen. Und zwar habe ich mir eine Schleife gebaut, die 100 mal das gleiche ausliest. Mal komme ich durch, mal bleibt das Programm auch schon beim ersten mal stehen. Es ist also nicht vorhersagbar reproduzierbar. Ich habe jetzt schon zwei Stellen gefunden an denen mein Programm hängen bleibt. Zum einem ist es eine Stelle bei der ich darauf warte dass der Outbuffer geleert ist
while (ApdComPort1.OutBuffUsed<>0)
und beim simplen Schließen des Ports
ApdComPort1.Open:=false;
Wie gesagt, bei physikalisch vorhandenen Schnittstellen funktioniert der Code einwandfrei, weswegen ich hier auch nicht mehr zeige, aber bei diesem Digitus habe ich ein Problem.
Meine Vermutung geht dahin, dass unsere Hardware Signale auf irgendeine Leitung des Kabels sendet, was den Digitus Konverter aus der Bahn wirft. (Diese Vermutung wird auch dadurch bestärkt, dass ich eine Hardare dazwischen gesetzt habe die nur RxD und TxD durchlässt). Da man den Fehler aber nicht sauber reproduzieren kann, bin ich mir nicht sicher ob ich Ihn in diesem Fall vielleicht einfach nicht gesehen habe.
Letztendlich ist mir auch egal, woher der Fehler kommt, da wir unsere Hardware wahrscheinlich nicht ändern werden, aber ich hätte gerne das mein Programm weiterhin bedienbar beleibt bzw. eine Fehlermeldung bringt. Bei dem while (ApdComPort1.OutBuffUsed<>0 kann ich mir ja noch vorstellen dass ich mir eine Endlosschleife im Fehlerfall gebaut habe, aber beim Port.Open fehlt mir die Idee.
Darum hat einer von Euch eine Idee, wie ich der Sache auf den Grund gehen kann ? Ich erhalte keine
Exception und das Programm reagiert einfach nicht mehr. Auf einem unserer XP Rechner geht es sogar so weit dass der ganze Rechner ausgeschaltet werden muss, da sich das Programm noch nicht einmal mehr vom Taskmanager beenden läßt. Mit meinem Windows 7 Rechner kann ich den Prozess zumindest immer abschiessen. Ich bin für jede Idee dankbar und werde es testen, obwohl ich momentan mich kaum trauen würde zu sagen, jetzt ist der Fehler behoben.