BEGIN PGM 25x_SlotPlunge MM
*############################
*# Funktion fr Nutenzyklen
*# Eintauchen
*# 24.11.2008 L.Buchner
*# Argumente:
*#	- Q40			Zyklusnummer
*#	- Q51			Tiefe
*#	- Q52			Starthhe
*#	- Q73			Startwinkel
*#	- Q74			Endwinkel
*#	- Q80			Drehlage
*#	- Q81			Mitte X
*#	- Q82			Mitte Y
*#	- Q85			Teilkreisradius
*#	- Q99			ANGLE
*# Rckgaben:
*############################
*############################
*# global belegte Parameter und Konstanten
*############################
; Q0					Bogenlnge
; Q1					max. Tiefe pro Bewegung
; Q2					ntige Tiefe
; Q3					ntige Anzahl
; Q4					ntiger Endwinkel
; Q5					Tiefe pro Bewegung
; Q6					inkr Weg X
; Q7					inkr Weg Y
; Q9					Zhler
*##############################
*# Zyklus 253
*##############################
FN 10: IF +Q40 NE +253 GOTO LBL "PLUNGE253_END"
	FN 9: IF +426 EQU +1 GOTO LBL "END"
	FN 9: IF +Q366 EQU +0 GOTO LBL "PLUNGE253_VERT"
	FN 9: IF +Q99 EQU +90 GOTO LBL "PLUNGE253_VERT"
	*############################
	*# pendelnd Eintauchen
	*# wenn der Eintauchwinkel ausreichend ist,
	*# wird nur eine Hin- und Herbewegung ausgefuehrt
	*# dann wird auch die Bogenlaenge reduziert
	*############################
	CC  IX+0 IY+0
	Q0 = Q218 - Q219											; max. Pendellnge
	Q1 = 2 * Q0 * TAN(Q99)										; max. Tiefe pro HinHer
	Q2 = SGN(Q201) * ( Q51 - Q52 )								; noetige Tiefe
	Q3 = INT( Q2 / Q1 )	+ 1										; noetige Anzahl
	Q4 = Q0														; noetiger Pendelweg
	Q5 = SGN(Q201) * ( Q2 / Q3 ) / 2							; Zustellung pro Hin oder Her
	Q6 = Q4 * COS Q80											; inkr Weg X
	Q7 = Q4 * SIN Q80											; inkr Weg Y
	Q9 = 0														; init Zaehler
	FN 11: IF +Q3 GT +1 GOTO LBL "PLUNGE253_OSCILOOP"
		Q4 = Q2 / ( 2 * TAN(Q99) )								; noetiger Pendelweg
		Q6 = Q4 * COS Q80										; inkr Weg X
		Q7 = Q4 * SIN Q80										; inkr Weg Y

	LBL "PLUNGE253_OSCILOOP"
		L  IX+Q6 IY+Q7 IZ+Q5 R0 FQ206
		L  IX-Q6 IY-Q7 IZ+Q5
		Q9 = Q9 + 1												; inkr Zaehler
	FN 12: IF +Q9 LT +Q3 GOTO LBL "PLUNGE253_OSCILOOP"
	FN 9: IF +0 EQU +0 GOTO LBL "PLUNGE253_END"		; break
	*############################
	*# vertikal Eintauchen
	*# nur bei ANGLE == 90
	*############################
	LBL "PLUNGE253_VERT"
	LP PR+Q85 PA+Q83 R0 FMAX
	L  Z+Q52 R0 FMAX
	L  Z+Q51 FQ206
	FN 9: IF +0 EQU +0 GOTO LBL "PLUNGE253_END"		; break
LBL "PLUNGE253_END"
*##############################

*##############################
*# Zyklus 254
*##############################
FN 10: IF +Q40 NE +254 GOTO LBL "PLUNGE254_END"
	FN 9: IF +Q366 EQU +0 GOTO LBL "PLUNGE254_VERT"
	FN 9: IF +Q99 EQU +90 GOTO LBL "PLUNGE254_VERT"
	*############################
	*# pendelnd Eintauchen
	*# wenn der Eintauchwinkel ausreichend ist,
	*# wird nur eine Hin- und Herbewegung ausgefuehrt
	*# dann wird auch die Bogenlaenge reduziert
	*############################
	CC  X+Q81 Y+Q82
	Q0 = Q375 * PI * Q248 / 360									; Bogenlaenge
	Q1 = 2 * Q0 * TAN(Q99)										; max. Tiefe pro HinHer
	Q2 = SGN(Q201) * ( Q51 - Q52 )								; noetige Tiefe
	Q3 = INT( Q2 / Q1 )	+ 1										; noetige Anzahl
	Q4 = Q74													; noetiger Endwinkel
	Q5 = SGN(Q201) * ( Q2 / Q3 ) / 2							; Zustellung pro Hin oder Her
	Q9 = 0														; Zaehler
	FN 11: IF +Q3 GT +1 GOTO LBL "PLUNGE254_OSCILOOP"
		Q0 = Q2 / ( 2 * TAN(Q99) )								; noetige Bogenlaenge
		Q4 = Q73 + ( 360*Q0 ) / ( PI*Q375 )					; noetiger Endwinkel
	LBL "PLUNGE254_OSCILOOP"
		CP PA+Q4 IZ+Q5 DR+ R0 FQ206
		CP PA+Q73 IZ+Q5 DR-
		Q9 = Q9 + 1												; inkr Zaehler
	FN 12: IF +Q9 LT +Q3 GOTO LBL "PLUNGE254_OSCILOOP"
	FN 9: IF +0 EQU +0 GOTO LBL "PLUNGE254_END"		; break
	*############################
	*# vertikal Eintauchen
	*# nur bei ANGLE == 90
	*############################
	LBL "PLUNGE254_VERT"
	LP PR+Q85 PA+Q73 R0 FMAX
	L  Z+Q52 R0 FMAX
	L  Z+Q51 FQ206
	FN 9: IF +0 EQU +0 GOTO LBL "PLUNGE254_END"		; break
LBL "PLUNGE254_END"
*##############################
LBL "END"
END PGM MM
