AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Comport-Exception abfangen und verbindung schließen
Thema durchsuchen
Ansicht
Themen-Optionen

Comport-Exception abfangen und verbindung schließen

Ein Thema von delphifant · begonnen am 4. Feb 2009 · letzter Beitrag vom 22. Apr 2009
Antwort Antwort
Seite 1 von 2  1 2      
delphifant

Registriert seit: 20. Dez 2007
Ort: nähe Freiburg
14 Beiträge
 
Delphi 2006 Professional
 
#1

Comport-Exception abfangen und verbindung schließen

  Alt 4. Feb 2009, 20:23
Hallo zusammen,
seit geraumer Zeit erfreue iich mich über die Komponete TComPort. Sie funktioniert eigentlich richtig gut nur bei einer Exception
geht sich richtig ab.Ich bin jetzt schon länger auf der suche nach einer Möglichkeit eine TComport-Excetion sauber abzufangen und meine Verbindung sauber zu schließen. Es handelt sich um Exception die ausgelöst wird im Falle bei dem Abbruch der Kommunikation (z.B. Kabel ziehen).

Vielleicht hatte bei euch auch jemand das Problem und könnte mir einen Tip geben.

Im voraus Danke
Gruß

Delphifant
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: Comport-Exception abfangen und verbindung schließen

  Alt 4. Feb 2009, 20:43
Was hast du bisher versucht? try-except-end-Blöcke? Was für eine Exception kommt genau?
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

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

Re: Comport-Exception abfangen und verbindung schließen

  Alt 4. Feb 2009, 21:12
try-except funktioniert doch bestens dabei.

Welche Exception bekommst du denn? Bei mir kam noch nie ein Fehler beim Kabelziehen.
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
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.858 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Comport-Exception abfangen und verbindung schließen

  Alt 4. Feb 2009, 22:51
Hallo delphifant,

Zitat von divBy0:
Bei mir kam noch nie ein Fehler beim Kabelziehen.
Das kann ich bestätigen, in meinem Programm lassen ich einen Trigger mitlaufen, damit das Programm mitbekommt, wenn keine Daten übertragen werden.

Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

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

Re: Comport-Exception abfangen und verbindung schließen

  Alt 4. Feb 2009, 23:47
Zeig mal deinen Code, wo die Exception auftritt bitte.
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
delphifant

Registriert seit: 20. Dez 2007
Ort: nähe Freiburg
14 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Comport-Exception abfangen und verbindung schließen

  Alt 5. Feb 2009, 10:30
Hallo erstmal danke für eure schnelle Reaktion...

Es Handelt sich hier um das ständige abfragen von Messwerten einer Elektronik...
Delphi-Quellcode:
//++++++++++++++++++++++++++++++++++
//Sender der Message an über Comport
//++++++++++++++++++++++++++++++++++
function TForm1.SendMessagetoCOM(const FTCMessage: String; const interval: word ; var ErrorMsg: String; bSetRich: Boolean): boolean;
var
 iDelay : word;
 i : integer;
 MyChar : Char;
 wfmo,
 LoopMax : word;
begin
 result:= false;
 if ComPort.Connected then
 begin
   
   //MPCComData ist eine globaler Variable (Record)
   MPCComData.text := '';
   iDelay := COM_DELAY; //Const
   wfmo := 0;
   LoopMax := COM_LOOP_RECIEVED;

   MPCComData.bRecieved:= True;
  
  
   // Sender der Chars (mit einer Delay) wegen hoher Bautrate 921600
   for I := 1 to length(FTCMessage) do
   begin
       MyChar:= FTCMessage[i];
       ComPort.WriteStr(MyChar);
       delay( iDelay);
   end;

  i := 0;
  ErrorMsg := '';

  // Schleife wird durchlaufen und bei Event oder nach Durchlauf von Loop beendet...
  // Rückantwort verarbeiten...
  repeat
    wfmo := WaitForMultipleObjects(length(EventRecieveds), @EventRecieveds, False, interval );

    Application.ProcessMessages; //Nur bei Hautthread benötigt...
    inc(i);
    if Application.Terminated then i:=LoopMax; // oder Thread.terminated
  until (wfmo <> WAIT_TIMEOUT) or ( i = LoopMax);

   MPCComData.bRecieved:= false;

   if wfmo=0 then
   begin
     if bSetRich then
      RiCOMText.Lines.Add(MPCComData.text);
     result:= true;
   end;

    case wfmo of
      WAIT_OBJECT_0 + 0: ErrorMsg := rsEventRecieved;
      WAIT_OBJECT_0 + 1: ErrorMsg := rsEventCustomer;
      WAIT_OBJECT_0 + 2: ErrorMsg := Format(rsEventSignaled, [WAIT_OBJECT_0 + 3]);
      WAIT_TIMEOUT: ErrorMsg:= rsTimeOut;
    else
     ErrorMsg:= 'Error';
    end;

    if i= LoopMax then
     ErrorMsg:= 'Loop to end';
 end;
end;

//++++++++++++++++++++++++++++++++++
// Empfangen der Daten
//++++++++++++++++++++++++++++++++++
procedure TForm1.ComPortRxChar(Sender: TObject; Count: Integer);
var
  Str: String;
  i : integer;
   rxBuffer: String ;
begin
  ComPort.ReadStr(Str, Count);

  if MPCComData.bRecieved then
  begin
    for i := 1 to length(str) do
    begin
      if (str[i] = #10) or (str[i] = #13) then
      begin
        MPCComData.text := rxbuffer;
        MPCComData.bRecieved := false;
        SetEvent(EventRecieveds[0]);
        break;
      end
      else
        rxbuffer:=rxbuffer+str[i];
    end;
  end;
end;
Wegen der hohen Bautrate ist kein Software-Handshake möglich... also muß ich immer auf eine Antwort warten, damit ich auch eine Steuerung über meine Software ermöglich kann...

Gruß

Delpifant
Gruß

Delphifant
  Mit Zitat antworten Zitat
delphifant

Registriert seit: 20. Dez 2007
Ort: nähe Freiburg
14 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Comport-Exception abfangen und verbindung schließen

  Alt 5. Feb 2009, 11:51
Ich habe noch eines vergessen...

Die Exception werden zu einen eigenen Exception-Handler weitergleitet...wo sie auch ankommen.
Delphi-Quellcode:
procedure TForm1.HandleOnException(Sender: TObject; E: Exception);
begin
 
  if (E is EComPort) then
  begin
    //-> Hier wird die Exception hingeleitet
    // Jedoch fand ich noch keinen Weg meine Exception
    // sauber zu verarbeiten
    
     MessageDlg(E.Message, mtError, [mbOk], 0);
  end
  else begin
    screen.Cursor:=crDefault;
    MessageDlg(E.Message, mtError, [mbOk], 0);
  end;
end;
Ok, das noch (es ist eine EComPort-Exception)

P.S. die Sache mit dem Trigger hört sich interessant an
Zitat:
in meinem Programm lassen ich einen Trigger mitlaufen
Vielleicht könnte das schon helfen...könnte hier ein kleine Hilfe gebrauchen
Gruß

Delphifant
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.858 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Comport-Exception abfangen und verbindung schließen

  Alt 5. Feb 2009, 19:08
Hallo delphifant,

da war ich auf den falschen Dampfer. Ich benutze eine andere Komponente ist auch kostenlos, vielleicht lohnt es sich diese mal anzusehen.

TurboPower Async Prof.

Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
delphifant

Registriert seit: 20. Dez 2007
Ort: nähe Freiburg
14 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Comport-Exception abfangen und verbindung schließen

  Alt 5. Feb 2009, 21:53
Die TComport-Komponente hat viele gute Seiten...wenn ich jedoch nicht eine Möglichkeit finde das Problem zu lösen werde ich mich wohl nach Alternativen umschauen müssen. Ich habe auch die Komponente
Zitat:
Turbo Power Asynnc Prof
angeschaut...aber die TComport hat es mir angetan. Jedoch finde ich die Idee mit dem Triggern immer noch nicht die schlechteste
Gruß

Delphifant
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#10

Re: Comport-Exception abfangen und verbindung schließen

  Alt 6. Feb 2009, 07:35
Du hast meiner Meinung nach noch keine Antwort auf die Verwendung von try...except-Blöcken gegeben. Ich verarbeite meine Exceptions von TComport damit und das funktioniert gut.

Deine Art, Daten zu empfangen, passt nicht gut zur hohen Baudrate. Ich habe das in einer Anwendung mit hoher Datenrate über einen Timer gelöst, der dann den Buffer einsammelt und sortiert.

Grüße, Messie
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 12:26 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