AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Ablauf für Fräsmaschine programmieren
Thema durchsuchen
Ansicht
Themen-Optionen

Ablauf für Fräsmaschine programmieren

Ein Thema von 100nF · begonnen am 26. Sep 2008 · letzter Beitrag vom 21. Nov 2008
 
100nF

Registriert seit: 7. Nov 2004
639 Beiträge
 
#11

Re: Ablauf für Fräsmaschine programmieren

  Alt 1. Okt 2008, 18:10
okay, ich hab mal was zusammengekritzelt...
Delphi-Quellcode:
var
  Befehl_vorhanden,
  Maschine_Bereit: boolean;

  Schritte_X,
  Schritte_Y,
  Schritte_Z,
  Geschwindigkeitsfaktor_X,
  Geschwindigkeitsfaktor_Y,
  Geschwindigkeitsfaktor_Z,
  GF_Down_X,
  GF_Down_Y,
  GF_Down_Z: Integer;

procedure main; // die Hauptprozedur des Programmes
begin
  Alles_Initialisieren; // z.B. die Serielle Schnittstelle initialisieren, Pins auf Ausgang schalten usw.

  begin Endlosschleife // Läuft ewigs durch, hört nie auf =)
    RS232_Senden_Empfangen; // Siehe weiter unten

    if Befehl_Vorhanden and Maschine_Bereit then // Wenn ein Befehl vorhanden ist und kein Fräsvorgang in arbeit ist...
      Befehl_auswerten; // ...wird der Befehl ausgewertet (siehe weiter unten)
  end;
end;


procedure RS232_Senden_Empfangen;
begin
  Buffer_mit_Empfangsdaten_füllen; // Was in der Zwischenzeit empfangen wurde, wird in den Buffer geladen

  If Buffer_voll then // wenn der Buffer voll ist...
    Sende_Wartebefehl_an_PC; //... wird dem PC mitgeteilt dass er warten muss mit der Übermittlung
  
  If Buffer_leer then // Wenn der Buffer leer ist...
  begin
    Befehl_vorhanden := false; // Wird die Variable auf false gesetzt...
    Sende_Bereit_an_PC; // ...und dem PC mitgeiteilt dass er wieder Daten senden soll
  end
  else
    Befehl_vorhanden := true; // Wenn der Buffer nicht leer ist, wird die Variable auf true gesetzt
end;

procedure Befehl_auswerten; // Wertet den Empfangenen Befehl aus
begin
  Buffer_auslesen; // Der Empfangsfuffer der RS232 wird ausgelesen
  Buffer_splitten(Startbyte, Message_Size, Command_Byte, Payload, Command_Byte, Checksumme, Stopbyte); // Das Telegramm wird in die einzelnen bestandteile zerlegt
  
  // Startbyte usw überprüfen...

  Case Command_Byte of // Wenn der Befehl...
    Kalibrieren: Prozedur_Kalibrieren(Payload); // ...eine Kalibrierung ankündigt, wird diese ausgeführt
    G-Code: Run_G-Code(Payload); //...ein G-Code ankündigt, wird dieser weiterverarbeitet
  End;
end;

procedure Run_G-Code(Payload: G-Code); // Der Empfangene G-Code wird verarbeitet
begin
  Befehl_auslesen; // Liest aus dem Payload heraus, ob M0, M1, G00, G01 usw.
  
  Case Payload.Befehl of // Enthält "M0", "G00" usw.
    M0: ... ;
    M1: ... ;
    ...
    G00: Fahre_Zu_Position(Payload.X, Payload.Y, Payload.Z, schnell); // Die Fräse muss schnell an die angekündigte Position fahren
    G01: Fahre_Zu_Position(Payload.X, Payload.Y, Payload.Z, schnell); // Die Fräse muss an die angekündigte Position fahren
    ...
  end;
end;


procedure Fahre_Zu_Position(X, Y, Z, Geschwindigkeit); // Die Position X, Y, Z wird mit der entsprechenden Geschwindigkeit angefahren
begin
  Maschine_Bereit := false; // Damit Keine zweite Befehlsauswertung stattfinden kann

  Schritte_X := X - Istposition_X; // Die Differenz zwischen Soll- und Istposition ermitteln
  Schritte_Y := Y - Istposition_Y;
  Schritte_Z := Z - Istposition_Z;

  Geschwindigkeitsfaktor_X_berechnen; // Die Wartezeit zwischen den einzelnen Pins ein-/ausschalten berechnen
  Geschwindigkeitsfaktor_Y_berechnen;
  Geschwindigkeitsfaktor_Z_berechnen;

  GF_Down_X := Geschwindigkeitsfaktor_X; // Variable setzten
  GF_Down_Y := Geschwindigkeitsfaktor_Y;
  GF_Down_Z := Geschwindigkeitsfaktor_Z;

  timer_X_Intervall := Geschwindigkeit; // Den Intervall für die Geschwindigkeit
  timer_Y_Intervall := Geschwindigkeit;
  timer_Z_Intervall := Geschwindigkeit;

  timer_X_aktivieren; // Die Timer werden aktiviert
  timer_Y_aktivieren;
  timer_Z_aktivieren;
end;

procedure Timer_x; // 3 Mal das "selbe" für X, Y, Z)
begin
  GF_Down_X := GF_Down_X - 1; // Die Wartezeit wird immer eines weniger
  
  if GF_Down_X = 0 then // Wenn die Wartezeit gleich Null ist...
  begin
    If Pin_Ein then // ...Wird der Takt-Pin getoggelt
      Pin_aus
    else
      Pin_ein;
    
    GF_Down_X := Geschwindigkeitsfaktor_X; // ...wird die Wartezeit wieder heraufgesetzt

    Schritte_X := Schritte_X - 1; // ...wird die Anzahl zu erledigender Schritte verringert

    If Schritte_X = 0 then // Wenn alle Schritte ausgeführt wurden...
    begin
      Timer_X_deaktivieren; // ...wird der Timer_X deaktiviert
      If (Schritte_Y = 0) and (Schritte_Z = 0) then //...und wenn alle Schritte (X, Y, Z) ausgeführt wurden...
        Maschine_Bereit := true; //...wird die Bereitschaft auf true gestellt damit der nächste Befehl verarbeitet werden kann
    end;
  end;
end;
hast du dir das in ungefähr so vorgestellt?
Soll natürlich nur den Ablauf darstellen, ich programmier den µC natürlich nicht in Delphi^^

mfg
Urban
  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 04:47 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