![]() |
TApdComPort Exception
Hallo,
ich habe in meinem Projekt Kommunikation mit einem Arduino an "COM3" mit Asynch-Pro (TApdComPort). Das läuft alles so weit auch richtig gut. Nur wenn man das Kabel abzieht (während der Port aktiv ist) bekomme ich eine Exception, die ich (bis jetzt) nicht abfangen und somit auch nicht behandeln kann. Meine Recherche hat hierzu bis jetzt leider nichts funktionierendes gebracht. Hat jemand von Euch da Erfahrung und einen Tipp ??? Danke :-) |
AW: TApdComPort Exception
Hast du denn mal den Stacktrace angeschaut, wenn die Exception auftritt? Da sollte sich doch eine Stelle finden lassen, an der man eingreifen kann.
|
AW: TApdComPort Exception
Du meinst das USB-Kabel ... nicht das Serielle-Kabel?
Letzteres bekommt ja niemand mit. :stupid: Hast du eine der anderen Komponenten versucht? CommunicationLab (nee) TComPortDrv TMS Async |
AW: TApdComPort Exception
Ja, wenn man das USB-Kabel zieht. Dann wird der Asynch-Pro ja praktisch der COM-port weggerissen... Mein Problem liegt vermutlich tiefer im System und gar nicht
in der Asynch-Pro Komponente. Aber da bin ich gerade etwas ratlos. Andere Komponenten habe ich bis jetzt nicht probiert. Mal schauen, wie ich das löse. Danke erst einmal für Eure Vorschläge :-) |
AW: TApdComPort Exception
Ach ja, die oben genannten verstecken sich aktuell im GetIt.
Es gab dort doch auch mal einen TComPort oder war's TSerialPort ... aber scheinbar nicht mehr. ![]() ![]() Ich glaub davon haben wir eine Version im Programm. Ich kann mich jetzt nicht erinnern, dass es knallte, wenn das USB-Gerät gezogen wurde, aber normals macht das bei uns auch niemand. Und meißtens verwenden wir eine DLL für den Zugriff auf die meist verwendetsten Geräte. Nur in selten Fällen direkt via ComPort auf ältere, bzw. andere alternative Geräte. Am Billigesten kann man ja mit CreateFile (oder AssignFile, TFileStream, ...) den Port öffnen.
Delphi-Quellcode:
'\\.\COM3'
Das Lesen aber leider im Thread (es ist leider nicht sicher zu lesen oder den Buffer zu prüfen, z.B. in einem Timer oder manuell im direkt z.B. nach dem Senden, ohne dass es hängen bleibt, falls/wenn grade keine Daten vorhanden sind und man vorher nicht definitiv sagen kann ob und wie viele Daten rein kommen) Aber wenn man nur sendet und praktisch nichts empfangen muß, dann geht das super und man hat die minimalste Implementation. BAUD usw. zu setzen kann man sich oft sparen, da meistens die Defaults/Systemvorgaben reichen und am Ende heutzutage selten wirklich seriell Daten übertragen werden, womit die physischen BAUD irrelevant sind. (ja, ich weiß dass USB auch seriell ist, aber das taktet sich selbst, inkl. Fehlerprüfung usw.) |
AW: TApdComPort Exception
Vielen Dank erst einmal für Eure Tipps.
Ich habe es bis jetzt nicht hinbekommen, aber vernachlässige das erst einmal für diesen Moment. Stecker ziehen kann ja aber passieren, deshalb werde ich da dann später noch mal weiter forschen :-) Eventuell kann man den Arduino ja auch ohne den "Virtuellen - Comport" ansprechen, direct über USB... Mal schauen. Ich werde dann ggf. noch mal die Ergebnisse hier posten. |
AW: TApdComPort Exception
Zitat:
|
AW: TApdComPort Exception
TCommPortDriver aus'm GetIt
Integerüberlauf in TCommPortDriver.OutFreeSpace, erst dann, wenn ich nach dem Trennen was senden will (beim Reset/Clear des ComErrors) ... die Komponente verträgt es nicht, dass neuerdings in neuen Delphi-Projekten standardmäßig die Bereichs-/Überlaufprüfungen aktiv sind. Ohne die Checks meckert nix. Roboterarm mit zwei irgendwelchen CP210x (selbstinstallierter Treiber) 'nen Arduino hab ich grad nicht zur Verfügung (abgesehn von einem ATiny85 von Digispark, aber der hat 'nen uralten Spezialtreiber und wäre eh nicht repräsentativ) Meine Testboards mit CP2102 oder 'nem chinesischen CH340 oder CH341A (mit eigenen Treibern), sowie einem FT232RL bzw. PL2303 mit Standardtreibern vom Windows ... die müsste ich erstmal suchen |
AW: TApdComPort Exception
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe jetzt mal MadExcept benutzt und der zeigt mir dann an, siehe beigefügtes Bild.
Mich bringt das aber auch nicht wirklich weiter :-) |
AW: TApdComPort Exception
Ich habe im Netz einen Lösungsansatz gefunden, der für meine Zwecke nützlich war.
Code:
Vielleicht ist das ja für Andere auch nützlich...
uses AwUser;
type TReaderException = procedure(ExceptObject: TObject; ExceptAddr: Pointer) of object; type TForm1 = class(TForm) private FOnReaderException:TReaderException; procedure OnReaderException(ExceptObject: TObject; ExceptAddr: Pointer); end; procedure TForm1.FormCreate(Sender: TObject); begin FOnReaderException:=OnReaderException; // Set global exception handler for AsyncPro GShowExceptionHandler:=@FOnReaderException; end; procedure TMainWin.OnReaderException(ExceptObject: TObject; ExceptAddr: Pointer); begin // Eigenes Exception-Handling end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz