AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi COM-Port ließt nach Neustart nicht

COM-Port ließt nach Neustart nicht

Ein Thema von Jens Hartmann · begonnen am 7. Dez 2009 · letzter Beitrag vom 15. Dez 2009
Antwort Antwort
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#1

COM-Port ließt nach Neustart nicht

  Alt 7. Dez 2009, 17:17
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
ComPort.Close und starte Sie erneut, mit
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.

MFG

Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
letsfetz

Registriert seit: 25. Mär 2005
Ort: Großraum Stuttgart
23 Beiträge
 
Delphi 7 Personal
 
#2

Re: COM-Port ließt nach Neustart nicht

  Alt 7. Dez 2009, 17:28
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
Michael
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#3

Re: COM-Port ließt nach Neustart nicht

  Alt 7. Dez 2009, 17:30
Denn Programmstart in der Autostart, oder vieleicht einen Timer, der erst 30 Sek. später die Verbindung herstellt.

Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
WoGe

Registriert seit: 16. Jun 2005
Ort: Kelkheim
178 Beiträge
 
Delphi 10.3 Rio
 
#4

Re: COM-Port ließt nach Neustart nicht

  Alt 7. Dez 2009, 17:31
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
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#5

Re: COM-Port ließt nach Neustart nicht

  Alt 7. Dez 2009, 17:57
Es ist ein ganz normaler serielle Port

MFG

Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.021 Beiträge
 
Delphi XE2 Professional
 
#6

Re: COM-Port ließt nach Neustart nicht

  Alt 7. Dez 2009, 19:33
Hast du mal mit Portmon geschaut was mit dem Port passiert?
Marc
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt, die 10. summt die Melodie von Tetris... | Wenn das die Lösung ist, dann hätte ich gerne mein Problem zurück! | engbarth.es
  Mit Zitat antworten Zitat
letsfetz

Registriert seit: 25. Mär 2005
Ort: Großraum Stuttgart
23 Beiträge
 
Delphi 7 Personal
 
#7

Re: COM-Port ließt nach Neustart nicht

  Alt 7. Dez 2009, 20:27
Zitat von Jens Hartmann:
Denn Programmstart in der Autostart, oder vieleicht einen Timer, der erst 30 Sek. später die Verbindung herstellt.

Gruß Jens
Nein ich meine ein Programm im Autostart, welches dein Prog. erst startet wenn alle Windowsdienste laufen. Ich sag dies deshalb weil ich auch schon so ähnliche "Timingprobleme" hatte, da das Programm direkt im Autostart war und im Form.Create Sachen passiert sind die im Windows während der Startphase einfach noch nicht zur Verfügung standen.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#8

Re: COM-Port ließt nach Neustart nicht

  Alt 8. Dez 2009, 19:50
Zitat von divBy0:
Hast du mal mit Portmon geschaut was mit dem Port passiert?
Nein habe ich nicht. Werde ich aufjedenfall mal machen. Jedoch kann ich an Hand von meinem Programm erkenne, das Daten kommen. Ich habe eine Control-LED programmiert, die immer dann AKTIV ist, wenn die Funktion "READPACKET" durchlaufen wird.

Daher weiß ich das aufjedenfall gelesen wird. Aber mit PortMon werde ich mal testen.

Zitat von letsfetz:
Nein ich meine ein Programm im Autostart, welches dein Prog. erst startet wenn alle Windowsdienste laufen. Ich sag dies deshalb weil ich auch schon so ähnliche "Timingprobleme" hatte, da das Programm direkt im Autostart war und im Form.Create Sachen passiert sind die im Windows während der Startphase einfach noch nicht zur Verfügung standen.
Da gebe ich Dir recht. Ich habe allerdings, meine Funktion wie folgt aufgebaut...

Delphi-Quellcode:

...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;
Danke schon mal für Eure Tips.

Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#9

Re: COM-Port ließt nach Neustart nicht

  Alt 9. Dez 2009, 16:55
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 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.

Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#10

Re: COM-Port ließt nach Neustart nicht

  Alt 15. Dez 2009, 21:26
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:
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.
Danke schon mal für Euro Kommentare.

Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz