Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Dienst sendet nicht über serielle Schnittstelle (https://www.delphipraxis.net/118425-dienst-sendet-nicht-ueber-serielle-schnittstelle.html)

Gloegg_FHBI 7. Aug 2008 14:23


Dienst sendet nicht über serielle Schnittstelle
 
Hallo Forum,

Ich habe eine DLL geschrieben, in der verschiedene Befehle für ein Gerät, welches über eine serielle Schnittstelle angeschlossen ist, gekapslet werden. Wird diese DLL in ein normales Programm eingebunden funktioniert alles wunderbar. Wird die DLL jedoch von einem Dienst benutzt, schlägt das Senden immer fehl.
Woran könnte das liegen?

Als Komponente verwende ich die TComport (http://sourceforge.net/projects/comport/).

SirThornberry 7. Aug 2008 15:33

Re: Dienst sendet nicht über serielle Schnittstelle
 
geben die funktionen keine Fehlercodes zurück? Es könnte daran liegen das die Komponente es nicht beherascht oder das dem Dienst einfach die Rechte fehlen

Gloegg_FHBI 7. Aug 2008 15:46

Re: Dienst sendet nicht über serielle Schnittstelle
 
Nein, leider gibts keine Fehlercodes. Die Komponente ist im normalen Einsatz eigentlich sehr robust...
Wie verschaffe ich denn dem Dienst höhere Rechte?

Dezipaitor 7. Aug 2008 16:39

Re: Dienst sendet nicht über serielle Schnittstelle
 
schonmak den Dienst debuggt? Irgendwo wird es ja fehlschlagen.
Dienste haben schon die höchsten Rechte (außer Kernel). D.h. zwar nicht, dass ein Dienst immer alle Rechte haben muss, aber er kann sie sich verschaffen.
Aber ich sehe da keine Rechte-Probleme mit dem Ports.

Reinhard Kern 7. Aug 2008 21:56

Re: Dienst sendet nicht über serielle Schnittstelle
 
Hallo,

vielleicht setzt die Komponente was interaktives voraus (Fenster für Fehlermeldung usw.) und spielt deshalb nicht mit - ein Dienst darf Fehler nur ins Log eintragen, der Bildschirm steht dem Dienst nicht zur Verfügung.

Falls das so ist, hilft nur ein Redesign der Komponente oder stattdessen die Benutzung der WIN32-API direkt.

Gruss Reinhard

Gloegg_FHBI 8. Aug 2008 09:00

Re: Dienst sendet nicht über serielle Schnittstelle
 
gedebuggt hab ich den Dienst noch nicht, aber ich hab einfach in die entsprechende Prozedur in jede zweite Zeile ein EventLogger.LogMessage eingebaut. Und in der Ereignisanzeige hören die Einträge an dem Punkt auf, bevor eine Zeichenkette über den COM-Port gesendet wird.

@Reinhard
Ich glaube nicht, das es an soetwas liegt. Die Komponente wird ja innerhalb einer DLL erzeugt und benutzt. Da gibts ja auch keine Fenster oder ähnliches. Testweise hatte ich den Dienst auch schon auf interaktiv gesetzt, hat aber nix gebracht.

Was mich noch wundert (und mir grade just eingefallen ist), dass ich am Anfang, wenn der Dienst geladen wird, für jeden verfügbaren COM-Port einen Thread erzeuge und kurz einen Befehl sende und warte ob eine passende Antwort zurückkommt. Diese Threads beenden sich dann entweder nach einer kurzen Zeitspanne oder wenn die passende Antwort gekommen ist. Das ganze ist als eine Art Autoerkennung gedacht und funktioniert wunderbar.

Je länger ich darüber nachdenke, desto wahrscheinlicher ist, das diese Threads (bzw. der eine, der das Gerät gefunden hat) sich nicht richtig beenden und den COM-Port noch in Beschlag nehmen.

Gloegg_FHBI 13. Aug 2008 10:18

Re: Dienst sendet nicht über serielle Schnittstelle
 
So, habs getestet, es lag tatsächlich an dem Thread, der sich nicht richtig beendet, nachdem er den richtigen Port gefunden hat.
Danke für eure Hilfe.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:01 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-2025 by Thomas Breitkreuz