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


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 18:10 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