BEGIN PGM 25x_SlotRough MM
*############################
*# Funktion fr Nutenzyklen
*# Schruppen
*# 24.11.2008 L.Buchner
*# Argumente:
*#    - Q40            Zyklusnummer
*#    - Q43            Werkzeugradius * Messfaktor Ebene
*#    - Q51            Tiefe
*#    - Q52            Starthhe
*#    - Q54            berlappungsfaktor
*#    - Q55            Anfahrradius
*#    - Q63            halbe Schruppbreite
*#    - Q69            Bearbeitungssinn +1 / -1
*#    - Q73            Startwinkel
*#    - Q74            Endwinkel
*#    - Q80            Drehlage
*#    - Q81            Mitte X
*#    - Q82            Mitte Y
*#    - Q85            Teilkreisradius
*#    - Q99            ANGLE
*# Rckgaben:
*############################

*############################
*# global belegte Parameter und Konstanten
*############################
; Q1                    CCX-Start
; Q2                    CCY-Start
; Q3                    Konturpunktwinkel Start
; Q4                    Konturpunktwinkel Ende
; Q5                    akt halbe Breite
; Q6                    Anfahrradius
; Q11                    CCX-Ende
; Q12                    CCY-Ende
; Q20                    aktuelle Tiefe
; Q21                    X-Punkt 1 bei CC-Start
; Q22                    X-Punkt 1 bei CC-End
; Q23                    X-Punkt 2 bei CC-Start
; Q24                    X-Punkt 4 bei CC-End
; Q25                    Anzahl der Zustellungen
; Q26                    Zustellung pro Konturumlauf
; Q31                    Y-Punkt 1 bei CC-Start
; Q32                    Y-Punkt 1 bei CC-End
; Q33                    Y-Punkt 2 bei CC-Start
; Q34                    Y-Punkt 4 bei CC-End


*##############################
*# Zyklus 253
*##############################
FN 10: IF +Q40 NE +253 GOTO LBL "253_END"

    *############################
    *# nur Planen,
    *# wenn Nutbreite==Werkzeugradius
    *############################
    FN 12: IF +Q43 LT +Q63 GOTO LBL "253_FACE"
        CC  X+Q81 Y+Q82
        LP PR+Q85 PA+Q84 R0 FQ207
        L  Z+Q203
        FN 9: IF +0 EQU +0 GOTO LBL "253_END"
    LBL "253_FACE"

    *############################
    *# Schruppen:
    *# berechne Geo-Daten
    *############################
    Q1 = Q81 + Q85 * COS Q83                               ; CCX-Start
    Q2 = Q82 + Q85 * SIN Q83                               ; CCY-Start
    Q11 = Q81 + Q85 * COS Q84                              ; CCX-End
    Q12 = Q82 + Q85 * SIN Q84                              ; CCY-End
    Q5 = Q43                                               ; aktuelle halbe Breite
    FN 9: IF +Q69 EQU -1 GOTO LBL "253_DIRNEG"


        *############################
        *# Positive Richtung
        *# Strategieauswahl (default S0)
        *############################
        LBL "253_DIRPOS"
        FN 9: IF +426 EQU +1 GOTO LBL "253_DIRPOS_S1"

            *############################
            *# Spiralfrmiges Ebenenschruppen (Strategie 0)
            *############################
            LBL "253_DIRPOS_S0"
            Q3 = Q83 + 90                                                    ; Konturwinkel Start
            Q4 = Q84 + 90                                                    ; Konturwinkel Ende
            Q5 = Q5 + Q43 * Q56
            FN 12: IF +Q5 LT +Q63 GOTO LBL "253_DIRPOS_S0_RUN"
                Q5 = Q63
            LBL "253_DIRPOS_S0_RUN"
			FN 10: IF +Q439 NE +3 GOTO LBL "Grund_ohne_Vorschubanpassung"
				M110
			LBL "Grund_ohne_Vorschubanpassung"
            Q6 = ( Q5 - Q43 ) / Q55                            ; Anfahrradius
            CC  X+Q1 Y+Q2
            APPR PLCT PR+Q5 PA+Q4 RQ6 RL FQ207
            CP IPA+180 DR+
            LBL "253_DIRPOS_S0_LOOP"
            CC  X+Q11 Y+Q12
            LP PR+Q5 PA+Q3
            CP  IPA+180 DR+
            CC  X+Q1 Y+Q2
            LP PR+Q5 PA+Q4
            FN 9: IF +Q5 EQU +Q63 GOTO LBL "253_DIRPOS_S0_END"
                Q5 = Q5 + 2 * Q43 * Q56
                FN 12: IF +Q5 LT +Q63 GOTO LBL "253_DIRPOS_S0_LAST"
                    Q5 = Q63
                LBL "253_DIRPOS_S0_LAST"
			FN 10: IF +Q439 NE +3 GOTO LBL "Seite_ohne_Vorschubanpassung"
				M110
			LBL "Seite_ohne_Vorschubanpassung"
                CTP PR+Q5 PA+Q3
                FN 9: IF +0 EQU +0 GOTO LBL "253_DIRPOS_S0_LOOP"
            LBL "253_DIRPOS_S0_END"
            CP IPA+180 DR+
            DEP PLCT  PR+0 PA+Q84 RQ6
            FN 9: IF +0 EQU +0 GOTO LBL "253_END"

            *############################
            *# Helikalschruppen (Strategie 1)
            *############################
            LBL "253_DIRPOS_S1"
            Q20 = Q52                                                                        ; Starthhe

            Q5 = Q5 + Q43 * Q54                                                ; Nutradius
            FN 12: IF +Q5 LT +Q63 GOTO LBL "253_DIRPOS_RS1"
                Q5 = Q63
            LBL "253_DIRPOS_RS1"

            Q4 = ( Q5 - Q43 ) * PI                                            ; Strecke eines Kreises (Mittelpunktsbahn)
            Q21 = Q1 + Q5 * COS( Q83 + 90 )                            ; P1 X
            Q31 = Q2 + Q5 * SIN( Q83 + 90 )                            ; P1 Y
            Q22 = Q11 + Q5 * COS( Q83 + 90 )                        ; P2 X
            Q32 = Q12 + Q5 * SIN( Q83 + 90 )                        ; P2 Y
            Q23 = Q11 + Q5 * COS( Q84 + 90 )                        ; P3 X
            Q33 = Q12 + Q5 * SIN( Q84 + 90 )                        ; P3 Y
            Q24 = Q1 + Q5 * COS( Q84 + 90 )                            ; P4 X
            Q34 = Q2 + Q5 * SIN( Q84 + 90 )                            ; P4 Y

            Q3 = SQRT( SQ(Q22 - Q21) + SQ(Q32 - Q31) )    ; Strecke einer Seite
            Q7 = 2*Q3 + 2*Q4                                                        ; Gesamtstrecke
            Q26 = Q7 * TAN Q99                                                    ; maximale Zustellung
            Q25 = INT( ( Q52 - Q51 ) / Q26 + Q57 )            ; Zustellungen
            Q26 = ( Q52 - Q51 ) / Q25                                        ; Zustellung pro Umlauf
            FN 9: IF +Q98 EQU +0 GOTO LBL "253_DIRPOS_RS1_LCUT"
            FN 12: IF +Q26 LT +Q98 GOTO LBL "253_DIRPOS_RS1_LCUT"
                Q25 = INT( ( Q52 - Q51 ) / Q98 + Q57 )        ; Zustellungen
                Q26 = ( Q52 - Q51 ) / Q25                                    ; Zustellung pro Umlauf
            LBL "253_DIRPOS_RS1_LCUT"

            Q6 = ( Q5 - Q43 ) / Q55                                        ; Anfahrradius
            L  Z+Q52 R0 FMAX
            APPR LCT X+Q21 Y+Q31 RQ6 RL FQ207

            LBL "253_DIRPOS_S1_DEPTH"
                CC  X+Q11 Y+Q12
                Q20 = Q20 + SGN(Q201) * Q26 * (Q3/Q7)
                L  X+Q22 Y+Q32 Z+Q20
                Q20 = Q20 + SGN(Q201) * Q26 * (Q4/Q7)
                CP  IPA+180 Z+Q20 DR+
                CC  X+Q1 Y+Q2
                Q20 = Q20 + SGN(Q201) * Q26 * (Q3/Q7)
                L  X+Q24 Y+Q34 Z+Q20
                Q20 = Q20 + SGN(Q201) * Q26 * (Q4/Q7)
                CP  IPA+180 Z+Q20 DR+
            FN 10: IF +Q20 NE +Q51 GOTO LBL "253_DIRPOS_S1_DEPTH"

            CC  X+Q11 Y+Q12
            L  X+Q22 Y+Q32
            CP  IPA+180 DR+
            CC  X+Q1 Y+Q2
            L  X+Q24 Y+Q34
            CP  IPA+180 DR+
            DEP PLCT  PR+0 PA+Q84 RQ6

            FN 12: IF +Q5 LT +Q63 GOTO LBL "253_DIRPOS_S1"
            FN 9: IF +0 EQU +0 GOTO LBL "253_END"


        *############################
        *# Negative Richtung
        *# Strategieauswahl (default S0)
        *############################
        LBL "253_DIRNEG"
        FN 9: IF +426 EQU +1 GOTO LBL "253_DIRNEG_S1"

            *############################
            *# Spiralfrmiges Ebenenschruppen ( Strategie 0 )
            *############################
            Q3 = Q83 - 90                                                    ; Konturwinkel Start
            Q4 = Q84 - 90                                                    ; Konturwinkel Ende
            Q5 = Q5 + Q43 * Q56
            FN 12: IF +Q5 LT +Q63 GOTO LBL "253_DIRNEG_S0_RUN"
                Q5 = Q63
            LBL "253_DIRNEG_S0_RUN"
			FN 10: IF +Q439 NE +3 GOTO LBL "Grund_ohne_Vorschubanpassung_Neg"
				M110
			LBL "Grund_ohne_Vorschubanpassung_Neg"
            Q6 = ( Q5 - Q43 ) / Q55                            ; Anfahrradius
            CC  X+Q1 Y+Q2
            APPR PLCT PR+Q5 PA+Q4 RQ6 RR FQ207
            CP IPA-180 DR-
            LBL "253_DIRNEG_S0_LOOP"
            CC  X+Q11 Y+Q12
            LP PR+Q5 PA+Q3
            CP  IPA-180 DR-
            CC  X+Q1 Y+Q2
            LP PR+Q5 PA+Q4
            FN 9: IF +Q5 EQU +Q63 GOTO LBL "253_DIRNEG_S0_END"
                Q5 = Q5 + 2 * Q43 * Q56
                FN 12: IF +Q5 LT +Q63 GOTO LBL "253_DIRNEG_S0_LAST"
                    Q5 = Q63
                LBL "253_DIRNEG_S0_LAST"
			FN 10: IF +Q439 NE +3 GOTO LBL "Seite_ohne_Vorschubanpassung_Neg"
				M110
			LBL "Seite_ohne_Vorschubanpassung_Neg"
                CTP PR+Q5 PA+Q3
                FN 9: IF +0 EQU +0 GOTO LBL "253_DIRNEG_S0_LOOP"
            LBL "253_DIRNEG_S0_END"
            CP  IPA-180 DR-
            DEP PLCT  PR+0 PA+Q84 RQ6
            FN 12: IF +Q5 LT +Q63 GOTO LBL "253_DIRNEG"
            FN 9: IF +0 EQU +0 GOTO LBL "253_END"


            *############################
            *# Helikalschruppen (Strategie 1)
            *############################
            LBL "253_DIRNEG_S1"
            Q20 = Q52                                                            ; Starthhe

            Q5 = Q5 + Q43 * Q54                                    ; Nutradius
            FN 12: IF +Q5 LT +Q63 GOTO LBL "253_DIRNEG_RS1"
                Q5 = Q63
            LBL "253_DIRNEG_RS1"

            Q4 = ( Q5 - Q43 ) * PI                                ; Strecke eines Kreises (Mittelpunktsbahn)
            Q21 = Q1 + Q5 * COS( Q83 + 90 )                ; P1 X
            Q31 = Q2 + Q5 * SIN( Q83 + 90 )                ; P1 Y
            Q22 = Q11 + Q5 * COS( Q83 + 90 )            ; P2 X
            Q32 = Q12 + Q5 * SIN( Q83 + 90 )            ; P2 Y
            Q23 = Q11 + Q5 * COS( Q84 + 90 )            ; P3 X
            Q33 = Q12 + Q5 * SIN( Q84 + 90 )            ; P3 Y
            Q24 = Q1 + Q5 * COS( Q84 + 90 )                ; P4 X
            Q34 = Q2 + Q5 * SIN( Q84 + 90 )                ; P4 Y

            Q3 = SQRT( SQ(Q22 - Q21) + SQ(Q32 - Q31) )    ; Strecke einer Seite
            Q7 = 2*Q3 + 2*Q4                                                        ; Gesamtstrecke
            Q26 = Q7 * TAN Q99                                                    ; maximale Zustellung
            Q25 = INT( ( Q52 - Q51 ) / Q26 + Q57 )            ; Zustellungen
            Q26 = ( Q52 - Q51 ) / Q25                                        ; Zustellung pro Umlauf
            FN 9: IF +Q98 EQU +0 GOTO LBL "253_DIRNEG_RS1_LCUT"
            FN 12: IF +Q26 LT +Q98 GOTO LBL "253_DIRNEG_RS1_LCUT"
                Q25 = INT( ( Q52 - Q51 ) / Q98 + Q57 )        ; Zustellungen
                Q26 = ( Q52 - Q51 ) / Q25                                    ; Zustellung pro Umlauf
            LBL "253_DIRNEG_RS1_LCUT"

            Q6 = ( Q5 - Q43 ) / Q55                                        ; Anfahrradius
            L  Z+Q52 R0 FMAX
            APPR LCT X+Q24 Y+Q34 RQ6 RR FQ207

            LBL "253_DIRNEG_S1_DEPTH"
                CC  X+Q11 Y+Q12
                Q20 = Q20 + SGN(Q201) * Q26 * (Q3/Q7)
                L  X+Q23 Y+Q33 Z+Q20
                Q20 = Q20 + SGN(Q201) * Q26 * (Q4/Q7)
                CP  IPA-180 Z+Q20 DR-
                CC  X+Q1 Y+Q2
                Q20 = Q20 + SGN(Q201) * Q26 * (Q3/Q7)
                L  X+Q21 Y+Q31 Z+Q20
                Q20 = Q20 + SGN(Q201) * Q26 * (Q4/Q7)
                CP  IPA-180 Z+Q20 DR-
            FN 10: IF +Q20 NE +Q51 GOTO LBL "253_DIRNEG_S1_DEPTH"

            CC  X+Q11 Y+Q12
            L  X+Q23 Y+Q33
            CP  IPA-180 DR-
            CC  X+Q1 Y+Q2
            L  X+Q21 Y+Q31
            CP  IPA-180 DR-
            DEP PLCT  PR+0 PA+Q84 RQ6

            FN 12: IF +Q5 LT +Q63 GOTO LBL "253_DIRNEG_S1"
            FN 9: IF +0 EQU +0 GOTO LBL "253_END"


LBL "253_END"
*##############################


*##############################
*# Zyklus 254
*##############################
FN 10: IF +Q40 NE +254 GOTO LBL "254_END"

    *############################
    *# nur Planen,
    *# wenn Nutbreite==Werkzeugradius
    *############################
    FN 12: IF +Q43 LT +Q63 GOTO LBL "254_FACE"
        CC  X+Q81 Y+Q82
        CP  PA+Q74 DR+ R0 FQ207
        L  Z+Q203
        FN 9: IF +0 EQU +0 GOTO LBL "254_END"
    LBL "254_FACE"

    *############################
    *# Schruppen:
    *# berechne Geo-Daten
    *############################
    Q1 = Q375 / 2 * COS Q73 + Q81                          ; CCX-Start
    Q2 = Q375 / 2 * SIN Q73    + Q82                       ; CCY-Start
    Q3 = Q73 + 180                                         ; Konturwinkel Start
    Q11 = Q375 / 2 * COS Q74 + Q81                         ; CCX-Ende
    Q12 = Q375 / 2 * SIN Q74    + Q82                      ; CCY-Ende
    Q5 = Q43; * Q54                                         ; aktuelle halbe Breite

    FN 9: IF +Q69 EQU -1 GOTO LBL "254_DIRNEG"

        *############################
        *# Ebenenschruppen positive Richtung
        *############################
        LBL "254_DIRPOS"
        Q5 = Q5 + Q43 * Q56
        FN 12: IF +Q5 LT +Q63 GOTO LBL "254_DIRPOS_RUN"
            Q5 = Q63
        LBL "254_DIRPOS_RUN"
 		FN 10: IF +Q439 NE +3 GOTO LBL "Grund_254_ohne_Vorschubanp_Pos"
			M110
		LBL "Grund_254_ohne_Vorschubanp_Pos"
        Q6 = ( Q5 - Q43 ) / Q55                                ; Anfahrradius
        CC  X+Q1 Y+Q2
        APPR PLCT PR+Q5 PA+Q3 RQ6 RL FQ207
        CP IPA+180 DR+
        LBL "254_DIRPOS_LOOP"
        CC  X+Q81 Y+Q82
        CP  PA+Q74 DR+
        CC  X+Q11 Y+Q12
        CP  IPA+180 DR+
        CC  X+Q81 Y+Q82
        CP  PA+Q73 DR-
        CC  X+Q1 Y+Q2
        FN 9: IF +Q5 EQU +Q63 GOTO LBL "254_DIRPOS_END"
            Q5 = Q5 + 2 * Q43 * Q56
            FN 12: IF +Q5 LT +Q63 GOTO LBL "254_DIRPOS_LAST"
                Q5 = Q63
            LBL "254_DIRPOS_LAST"
 		FN 10: IF +Q439 NE +3 GOTO LBL "Seite_254_ohne_Vorschubanp_Pos"
			M110
		LBL "Seite_254_ohne_Vorschubanp_Pos"
            CTP PR+Q5 PA+Q73
            FN 9: IF +0 EQU +0 GOTO LBL "254_DIRPOS_LOOP"
        LBL "254_DIRPOS_END"
        CP  IPA+180 DR+
        DEP PLCT  PR+0 PA+Q73 RQ6
        FN 12: IF +Q5 LT +Q63 GOTO LBL "254_DIRPOS"
        FN 9: IF +0 EQU +0 GOTO LBL "254_END"

        *############################
        *# Ebenenschruppen negative Richtung
        *############################
        LBL "254_DIRNEG"
        Q5 = Q5 + Q43 * Q56
        FN 12: IF +Q5 LT +Q63 GOTO LBL "254_DIRNEG_RUN"
            Q5 = Q63
        LBL "254_DIRNEG_RUN"
 		FN 10: IF +Q439 NE +3 GOTO LBL "Grund_254_ohne_Vorschubanp_Neg"
			M110
		LBL "Grund_254_ohne_Vorschubanp_Neg"
        Q6 = ( Q5 - Q43 ) / Q55                        ; Anfahrradius
        CC  X+Q1 Y+Q2
        APPR PLCT PR+Q5 PA+Q73 RQ6 RR FQ207
        CP  IPA-180 DR-
        LBL "254_DIRNEG_LOOP"
        CC  X+Q81 Y+Q82
        CP  PA+Q74 DR+
        CC  X+Q11 Y+Q12
        CP  IPA-180 DR-
        CC  X+Q81 Y+Q82
        CP  PA+Q73 DR-
        CC  X+Q1 Y+Q2
        FN 9: IF +Q5 EQU +Q63 GOTO LBL "254_DIRNEG_END"
            Q5 = Q5 + 2 * Q43 * Q56
            FN 12: IF +Q5 LT +Q63 GOTO LBL "254_DIRNEG_LAST"
                Q5 = Q63
            LBL "254_DIRNEG_LAST"
 		FN 10: IF +Q439 NE +3 GOTO LBL "Seite_254_ohne_Vorschubanp_Neg"
			M110
		LBL "Seite_254_ohne_Vorschubanp_Neg"            
            CTP PR+Q5 PA+Q3
            FN 9: IF +0 EQU +0 GOTO LBL "254_DIRNEG_LOOP"
        LBL "254_DIRNEG_END"
        CP  IPA-180 DR-
        DEP PLCT  PR+0 PA+Q73 RQ6
        FN 12: IF +Q5 LT +Q63 GOTO LBL "254_DIRNEG"
        FN 9: IF +0 EQU +0 GOTO LBL "254_END"

LBL "254_END"
*##############################
M111 ; Vorschub auf Mittelpunktsbahn

END PGM MM
