Einzelnen Beitrag anzeigen

Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#35

AW: Exception während RS232 Datenempfang

  Alt 20. Mär 2020, 08:17
Delphi-Quellcode:
procedure TForm11.processM6Message();
begin
  try
    with Status.CNC do begin
      if (ZREFE <> CNC_Status_Alt.ZREFE) or F_Neu
      then begin             {Referenzstatus-Ausgabe}
        violett(Image1);
        case ZREFE of
          0:WriteXY(Image1,27,5,'Referenz nicht angefahren');
          1:WriteXY(Image1,27,5,'Referenz am anfahren ');
          2:begin
            gruen(Image1);
            WriteXY(Image1,27,5,'Referenz angefahren ')
          end;
        //otherwise;
        end; {case}
        gruen(Image1);
      end; {then}
      {WriteXY(22,25,' 2        ');}  {==testpunkt ================}
      ByteAusgabe(Image1,CNC_Status_Alt.ZINP1,ZINP1,F_Neu,27, 7); {System-}
      ByteAusgabe(Image1,CNC_Status_Alt.ZINP2,ZINP2,F_Neu,27, 8); {Eingangszustaende}
      ByteAusgabe(Image1,CNC_Status_Alt.ZOUT1,ZOUT1,F_Neu,27,9); {System-}
      ByteAusgabe(Image1,CNC_Status_Alt.ZOUT2,ZOUT2,F_Neu,27,10); {Ausgangszustaende}
      { -----Achsen Status Ausgabe---------------- }
      for i:= 1 to 8
        do ByteAusgabe(Image1,Achsen_Status_alt[i],Achsen_Status[i],F_Neu,27,13 + i);
      Achsen_Status_alt:= Achsen_Status;
      {----- Achsen Endlage Ausgabe -----------}
      for i:= 1 to 8
        do ByteAusgabe(Image1,Achsen_Endlage_alt[i],Achsen_Endlage[i],F_Neu,37,13 + i);
      Achsen_Endlage_alt:= Achsen_Endlage;
      {---------------------------}
      if FLAG <> 1                {Endlage inaktiv}
      then begin
        ByteAusgabe(Image1,CNC_Status_Alt.POSA1,POSA1,F_Neu,27,11); {Poser-Zustaende}
        ByteAusgabe(Image1,CNC_Status_Alt.POSA2,POSA2,F_Neu,27,12);
      end; {then}
      WriteXY(Image1,22,25,' 3 '); {==testpunkt ==============}
      CNC_Status_Alt:=Status.CNC; { MAN Bildschirm }
      //Taste:=' ';
      //ZeichenLesen(false,Taste);
      WriteXY(Image1,22,25,' 4 '); {==testpunkt ============}
      {-------- versuch1 --------------------}
      { if (ord(Taste) <> #0) then WriteXY(12,25,Taste);}
      WriteXY(Image1,22,25,' 5 '); {==testpunkt =============}
      {---------------------------------------}
      //case upshift(Taste) of
        //'A':F_obereAchsen:=Not F_obereAchsen {Anzeigen (toggeln)}
      //otherwise;
      //end; {case}
    end; {with}
  except
    on e:Exception do
      raise Exception.Create(format('Error on processM6Message',[e.Message]));
  end;
end;

procedure TForm11.processM4Message();
begin
  try
    WriteXY(Image1,22,25,' 6 '); {==testpunkt ============}
    //getblk(false);
    WriteXY(Image1,22,25,' 7 '); {==testpunkt ============}
    IstWertAnzeige(Image1);   {getblk drin }
    WriteXY(Image1,22,25,' 8 '); {==testpunkt ============}
    F_Neu:=false;
    WriteXY(Image1,22,25,' 9'); {==testpunkt ===LOOP End=====}
  except
    on e:Exception do
      raise Exception.Create(format(('Error on processM4Message',[e.Message]));
  end;
end;

procedure processStartMessage();
begin
  try
    //InterEnable;{ist nicht mehr aktiv}
    //getblk(false);
    //StatusBild;

    F_obereAchsen:=false;F_obereAchsenAlt:=true; {Ausgabe erzwingen}
    Init_IstWerte(IstWerte_Alt);
    F_Neu:=true;
    //getblk(false);
    IstWertAnzeige(Image1);
    //getblk(false);
    F_MSynch:=false;{Meldungen duerfen zwischendurch eingelesen werden}
  except
    on e:Exception do
      raise Exception.Create(format('Error on processStartMessage',[e.Message]));
  end;
end;

procedure TForm11.ManWindowMessage( var Message : TMessage );
var MessageData : PDataMessage;
    GetMessageData : PDataMessage;
    NCSatz    :T_NCSatz;
    Parity    :char;
    Data    :stringx;
begin
  // InitializeCriticalSection(EmpfangCS); das würde ich in FormCreate verlegen.
  EnterCriticalSection(EmpfangCS);
  try
    case Message.WParam of
      START: processStartMessage;

      M6: processM6Message;

      M4: processM4Message;
    end;
  finally
    LeaveCriticalSection(EmpfangCS);
  end;
.. die Case-Anweisungen in eigene Methoden gepackt.
Die Event-Handling Methode gewinnt dadurch an Übersichtlichkeit.

.. und vielleicht bei der Verschickung von Nachrichten von postMessage auf sendMessage umstellen.
Hintergrund: https://www.delphipraxis.net/122733-...ndmessage.html

Grüße
Klaus
Klaus

Geändert von Klaus01 (20. Mär 2020 um 08:21 Uhr)
  Mit Zitat antworten Zitat