#LABEL "automatischer Werkzeugwechsel"
bene 12.Sep.2022
feststehendes, lineares Magazin

#965  (Wechselposition 1.Werkzeug X)
#966  (Wechselposition 1.Werkzeug Y)
#967  (Wechselposition 1.Werkzeug Z)
#968  (Abstand T1 zu T2 entlang X-Achse)
#969  (Abstand T1 zu T2 entlang Y-Achse)
#970  (Anfahrdistanz X)
#971  (Anfahrdistanz Y)
#972  (Anfahrdistanz Z)
#973  (Anzahl Magazinpltze)
#940  (Status Werkzeugwechsel)
#920  (neues Werkzeug)
#950  (altes Werkzeug)

#I5   (Eingang Spindel Stillstand)
#I8   (Eingang Luftdrucksensor)
#I50  (Eingang Werkzeug geklemmt)
#I51  (Eingang Werkzeug ausgeworfen)
#I52  (Eingang Magazinklappe offen)
#I53  (Eingang Magazinklappe geschlossen)
#O13  (Ausgang Magazinklappe ffnen)
#O14  (Ausgang Spannzange ffnen)
#O15  (Ausgang Blasluft Kegelreinigung)

%
#2=2000 (Anfahrgeschwindigkeit mm/min)

PRINT "Automatischer Werkzeugwechsel alt=";#950;" neu=";#920
IF #920=#950 THEN
  RETURN (gleiches Werkzeug, fertig)
ENDIF
IF #965=0 | #966=0 | #967=0 | #973=0 THEN
  PRINT "Parameter #965..#973 nicht gesetzt, bitte Konfiguration berprfen"
  M2
ENDIF
IF #I5=0 THEN
  M9
  M5
ENDIF
IF #I5=0 THEN
  PRINT "Fehler: Spindel steht nicht still"
  M2
ENDIF
IF #940=0 THEN
  PRINT "Fehler: Zustand des Werkzeugwechslers ist undefiniert."
  PRINT "Achtung: Bitte zuerst alle Werkzeuge berpruefen und"
  PRINT "manuellen Wechsel oder 'nur Nummer setzen' durchfuehren"
  M2
ENDIF
IF #920<0 | #920>#973 THEN
  PRINT "Fehler: Werkzeugnummer ungueltig T=";T
  M2
ENDIF 
IF #I8=0 THEN
  PRINT "Fehler: Pneumatik Druck zu niedrig"
  M2
ENDIF
#7=#909 (Nullpunkt G53..G59 merken)
#940=0 (Wechselvorgang nicht abgeschlossen, falls Unterbrechung)
#O13=1 (Klappe auf)
G53
#0=(#950-1)*#968 (Offset Wechselplatz X)
#1=(#950-1)*#969 (Offset Wechselplatz Y)
G0 Z0 (ganz hoch)
G4 H10 UNTIL #I52=1 (Warten auf Klappe offen)
IF #I52=0 THEN
  PRINT "Fehler: Magazin Klappe nicht geoeffnet"
  #909=#7
  M2
ENDIF

IF #950>0 THEN (altes Werkzeug ablegen)
  G0 X=#965+#970+#0 Y=#966+#971+#1 (Sicherheitsposition)
  G0 Z=#967+#972 (ber Magazinplatz)
  G1 F=#2 Z=#967 (Z langsam anfahren)
  G1 X=#965+#0 Y=#966+#1 (seitlich einfahren)
ENDIF
#O14=1 (Werkzeug Klemmung auf)
G4 H3 UNTIL #I51=1 (warten auf Werkzeug ausgeworfen)
IF #I51=0 THEN
  PRINT "Fehler: Werkzeug nicht ausgeworfen"
  #909=#7
  M2
ENDIF
G0 Z=#967+#972 (Z hoch, Sicherheitsabstand)
#0=(#920-1)*#968 (Offset Wechselplatz X)
#1=(#920-1)*#969 (Offset Wechselplatz Y)
IF #920>0 THEN (neues Werkzeug aufnehmen)
  G0 X=#965+#0 Y=#966+#1 (Position ber dem Werkzeug)
  #O15=1 (Blasluft an)
  G1 F=#2 Z=#967 (Z langsam anfahren)
ENDIF
#O14=0 (Werkzeug Klemmung zu)
G4 H3 UNTIL #I50=1 (warten auf Werkzeug geklemmt)
#O15=0 (Blasluft aus)
IF #920>0 THEN
  G1 X=#965+#970+#0 Y=#966+#971+#1 (seitlich ausfahren)
ENDIF
G0 Z0 X=#965+#970+#0 Y=#966+#971+#1 (Z ganz hoch)
#O13=0 (Klappe zu)
#909=#7 (Nullpunkt G53..G59 zurcksetzen)
IF #I50=0 THEN
  PRINT "Fehler: Werkzeug nicht geklemmt / Werkzeug leer"
  M2
ENDIF
G4 H5 UNTIL #I53=1
IF #I53=0 THEN
  PRINT "Fehler: Magazin Klappe nicht geschlossen"
  M2
ENDIF
#950=#920 (letztes Werkzeug merken)
#940=1 (Wechsel erfolgreich)
RETURN

Simulation:
PRINT "Werkzeugwechsel simuliert T=";T
RETURN



