![]() |
COM-Port ließt nach Neustart nicht
Hallo zusammen,
habe einen Interesanten Fehler in meinem Programm. Ich lese wie vieleicht mittlerweile bekannt, Daten von der seriellen Schnittstelle ein, verarbeite diese und archivier die Daten dann in einer DB. Nach dem ich jetzt mehrere Test durchgeführt habe, ist mir aufgefallen, das wenn ich das Programm in die Autostart von Windows lege, an dem PC einen Stromausfall simuliere, und dieser dann wieder gestartet ist, meine Programm zwar sauber und ohne Fehler startet, die Verbindung aufbaut, (soweit mann das bei der seriellen Schnittstelle Verbindung nennen kann. Ich gehe ja nur in einen Lesemodus, da die Hardware nur senden kann.) jedoch keine Daten lesen tut. Trennen ich die Verbindung jetzt manuell mit der Funktion
Delphi-Quellcode:
und starte Sie erneut, mit
ComPort.Close
Delphi-Quellcode:
,
ComPort.Open
werden sofort Daten gelesen. Die serielle Schnittstelle lese ich mit der ComPortLib Komponente aus über die Komponente ComDataPacket. Hat jemand eine Idee, wie ich das Problem beseitigen kann, ohne den ComPort 2 mal zu öffnen und zu schließen. :gruebel: MFG Jens |
Re: COM-Port ließt nach Neustart nicht
Ich würde mal versuchen länger zu warten, damit alle Windowsfunktionen vollständig zur Verfügung stehen. Probier mal ob du den Programmstart nicht irgenwie um 30 sek verzögern kannst.
Kann sein, muss aber nicht ;-) |
Re: COM-Port ließt nach Neustart nicht
Denn Programmstart in der Autostart, oder vieleicht einen Timer, der erst 30 Sek. später die Verbindung herstellt.
Gruß Jens |
Re: COM-Port ließt nach Neustart nicht
Hallo
was für eine Hardware ist Dein serieller Port - Ein Echter oder USB2Seriell? Bei letzterem empfiehlt es sich eine Einschaltreihenfolge zu beachten: Erst die Geräte und dann den Rechner. Gruss wo |
Re: COM-Port ließt nach Neustart nicht
Es ist ein ganz normaler serielle Port
MFG Jens |
Re: COM-Port ließt nach Neustart nicht
Hast du mal mit
![]() |
Re: COM-Port ließt nach Neustart nicht
Zitat:
|
Re: COM-Port ließt nach Neustart nicht
Zitat:
Daher weiß ich das aufjedenfall gelesen wird. Aber mit PortMon werde ich mal testen. Zitat:
Delphi-Quellcode:
Danke schon mal für Eure Tips....Form.Create begin .. COMConnectTimer.Intervall := 30000; COMConnectTimer.Enabled := true; ... end; ... procedure TForm1.COMConnectTimer(Sender: TObject); begin ComPort1.Close; ComLoadSettings; ComPort1.Open; COMConnect.Enabled := false; end; procedure TForm1.ComLoadSettings; var Pfad :String; AppDataDir : string; sMessage : String; begin try AppDataDir := GetSpecialFolder(CSIDL_COMMON_APPDATA) + strAppDataDir; if not DirectoryExists(AppDataDir) then begin Servicememo.Lines.Add('Der Pfad '+AppDataDir+' konnte nicht gefunden werden'+#13+ 'ComPort wurde nicht initialisiert'); end else begin ComPort1.LoadSettings(stIniFile, AppDataDir + strIniFName); Servicememo.Lines.Add('ComPort wurde initialisiert am: '+DateTimeToStr(Now)); Servicememo.Lines.SaveToFile(AppDataDir + 'Service.txt'); end; except on e : Exception Do begin sMessage := e.Message; Servicememo.Lines.Add(sMessage); end; end; end; Gruß Jens |
Re: COM-Port ließt nach Neustart nicht
Hallo zusammen,
ich habe den Fehler gefunden. Da ich mit einem ComPort DataPacket arbeite, und meine Software mehrere Hardwarekomponenten enthält, muss dieses Packet beim herstellen der Verbindung die entsprechenden Start und Stop Strings zur Verfügung haben. Da diese Funktion nicht beim Form.Create oder BeforComPort.Open durchgeführt wurde, sondern fehlerhafter weiße :wall: in der Manuellen Verbindungsoption BTVerbinden.Click, konnte natürlich dieser String nie gesetzt werden. Nach dem manuellen Trennen und erneuten Verbinden war ja dann die Funktion da. Ich habe die Hardwareanpassung jetzt mit in das in die Funktion ComPortLoadSettings verlegt und siehe her, es funktioniert. Dooffer Fehler. Naja, gefunden beseitigt und geprüft. Danke trotz nochmal für die nützlichen Tips. :thumb: Gruß Jens |
Re: COM-Port ließt nach Neustart nicht
Hallo Leute,
ich hatte zwar das Problem gelößt, bin aber doch mal auf den Vorschlag mit dem Programm zum Starten eingegangen, um wirklich solche Laufzeiten etc. mal ausgleichen zu können. Wollte jetzt mal von Euch wissen, ob das so der richtige Weg ist. Hier mal der Code...
Delphi-Quellcode:
Danke schon mal für Euro Kommentare.
procedure TPSStarter.ProgbarTimerTimer(Sender: TObject);
var Zeit : integer; begin ProgBarStatus.Position := ProgBarStatus.Position + 200; Zeit := (Starter.Interval - ProgBarStatus.Position); Zeit := Zeit div 1000; Label1.Caption := 'Noch '+IntToStr(Zeit)+' Sekunden bis zum Start von Print && Save'; end; procedure TPSStarter.StarterTimer(Sender: TObject); begin if FileExists('.\Print & Save.exe') then begin ShellExecute(Application.Handle, 'open', ('.\Print & Save.exe'), nil, nil, SW_ShowNormal); Starter.Enabled := false; ProgbarTimer.Enabled := false; PSStarter.Close; end else begin ShowMessage('Beim Start von Print & Save ist ein Fehler aufgetreten'+sLineBreak+ 'Bitte starten Sie Print & Save erneut'+sLineBreak+sLineBreak+ 'Sollte es erneut zu einem Fehler kommen wenden Sie sich bitte an: '+sLineBreak+ 'hartmann + uebach Nachrichtentechnik GmbH'+sLineBreak+ 'Tel: 02739/8965-0'); PSStarter.Close; end; end; end. Gruß Jens |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:52 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