Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   TApdComPort Exception (https://www.delphipraxis.net/215797-tapdcomport-exception.html)

DaCoda 8. Sep 2024 19:50

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 :-)

jaenicke 8. Sep 2024 20:03

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.

himitsu 8. Sep 2024 21:20

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

DaCoda 9. Sep 2024 05:37

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 :-)

himitsu 9. Sep 2024 11:00

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.
https://github.com/CWBudde/ComPort-Library
https://sourceforge.net/projects/comport/
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.)

DaCoda 10. Sep 2024 15:40

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.

jaenicke 11. Sep 2024 21:24

AW: TApdComPort Exception
 
Zitat:

Zitat von DaCoda (Beitrag 1540799)
Ich habe es bis jetzt nicht hinbekommen

Ohne den passenden Stacktrace lässt sich dazu nicht viel sagen, da ich keine passende Hardware mehr zum Testen habe.

himitsu 11. Sep 2024 23:04

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

DaCoda 12. Sep 2024 10:25

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 :-)

DaCoda 14. Sep 2024 13:20

AW: TApdComPort Exception
 
Ich habe im Netz einen Lösungsansatz gefunden, der für meine Zwecke nützlich war.

Code:
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;
Vielleicht ist das ja für Andere auch nützlich...


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:11 Uhr.
Seite 1 von 2  1 2      

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