BEGIN PGM 25x_SlotFinish MM
*############################
*# Funktion fr Nutenzyklen
*# Schlichten
*# 24.11.2008 L.Buchner
*# Argumente:
*#    - Q40            Zyklusnummer
*#    - Q51            Tiefe
*#    - Q52            Starthhe
*#    - Q55            Anfahrradius
*#    - Q56            berlappungsfaktor
*#    - Q62            Schrupptiefe absolut
*#    - Q64            halbe Schlichtbreite
*#    - Q69            Bearbeitungssinn +1 / -1
*#    - Q73            Startwinkel
*#    - Q74            Endwinkel
*#    - Q81            Mitte X
*#    - Q82            Mitte Y
*# Rckgaben:
*############################
*############################
*# global belegte Parameter und Konstanten
*############################
; Q0
; Q1                    CCX-Start
; Q2                    CCY-Start
; Q3                    X-Start
; Q4                    Y-Start
; Q5                    akt halbe Breite
; Q6                    Anfahrradius
; Q7                    Konturwinkel Start
; Q8                    Konturwinkel Ende
; Q9                    keine spiralfrmige Erweiterung
; Q11                    CCX-Ende
; Q12                    CCY-Ende
; Q13                    ABS( aktuelle Tiefe )
; Q14                    ABS( Schrupptiefe )
; 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"
        *############################
        *# 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
        Q13 = ABS(Q51)                                      ; akt Tiefe
        Q14 = ABS(Q62)                                      ; Schrupptiefe
        FN 11: IF +Q13 GT +Q14 GOTO LBL "253_COMPL"         ; // Seite schlichten
            Q5 = Q64
            Q52 = Q51 - SGN ( Q201 ) * Q200                 ; neue Starthhe
            L  Z+Q52 R0 FMAX
            L  Z+Q51 R0 FQ206                               ; Eintauchvorschub (CR 61470)
            FN 9: IF +0 EQU +0 GOTO LBL "253_NOT_COMPL"
        LBL "253_COMPL"                                     ; // Tiefe schlichten
            Q52 = Q51 - SGN ( Q201 ) * (Q200 + Q369)        ; neue Starthhe
            L  Z+Q52 R0 FMAX
            SEL CYCLE "25x_SlotPlunge"                      ; // Zyklus wegen Q-Parameter-Konflikt in SlotPlunge
            CYCL CALL
        LBL "253_NOT_COMPL"
        FN 12: IF +Q43 LT +Q64 GOTO LBL "253_FACE"          ; // nur Endtiefe bearbeiten, wenn Nutbreite==Werkzeugradius
            L  X+Q11 Y+Q12 Z+Q51 R0 FQ206
            L  X+Q1 Y+Q2 FQ385
            FN 9: IF +0 EQU +0 GOTO LBL "END"
        LBL "253_FACE"
        FN 9: IF +Q69 EQU -1 GOTO LBL "253_DIRNEG"
            ;/**************************
            ; Positiver Drehsinn
            ;***************************/
            Q3 = Q83 + 90                                   ; Konturwinkel Start
            Q4 = Q84 + 90                                   ; Konturwinkel Ende
            Q5 = Q5 + Q43 * Q54
            Q9 = 0                                          ; spiralf. Erweitern
            FN 12: IF +Q5 LT +Q64 GOTO LBL "253_DIRPOS_S0_RUN"
                Q5 = Q64
                Q9 = 1                                      ; kein spiralf. Erweitern
                CALL LBL "FEED_IPRE_FIN_LATERAL"
            LBL "253_DIRPOS_S0_RUN"
            CALL LBL "FEED_IPRE_FIN_DEPTH"
            Q6 = ( Q5 - Q43 ) / Q55                         ; Anfahrradius
            CC  X+Q1 Y+Q2
            APPR PLCT PR+Q5 PA+Q4 RQ6 RL FQ385
            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 +Q64 GOTO LBL "253_DIRPOS_S0_END"
                Q5 = Q5 + 2 * Q43 * Q54
                FN 12: IF +Q5 LT +Q64 GOTO LBL "253_DIRPOS_S0_LAST"
                    Q5 = Q64
                    CALL LBL "FEED_IPRE_FIN_LATERAL"
                LBL "253_DIRPOS_S0_LAST"
                CTP PR+Q5 PA+Q3
                FN 9: IF +0 EQU +0 GOTO LBL "253_DIRPOS_S0_LOOP"
            LBL "253_DIRPOS_S0_END"
            FN 9: IF +Q9 EQU +1 GOTO LBL "253_DIRPOS_S0_SPIEND"
                CP IPA+180 DR+
            LBL "253_DIRPOS_S0_SPIEND"
            DEP PLCT  PR+0 PA+Q84 RQ6
            FN 9: IF +0 EQU +0 GOTO LBL "END"
            LBL "253_DIRNEG"
            ;/**************************
            ; Negativer Drehsinn
            ;***************************/
            FN 9: IF +426 EQU +1 GOTO LBL "253_DIRNEG_S1"
            Q3 = Q83 - 90                                       ; Konturwinkel Start
            Q4 = Q84 - 90                                       ; Konturwinkel Ende
            Q5 = Q5 + Q43 * Q54
            Q9 = 0                                              ; spiralf. Erweitern
            FN 12: IF +Q5 LT +Q64 GOTO LBL "253_DIRNEG_S0_RUN"
                Q5 = Q64
                Q9 = 1
                CALL LBL "FEED_IPRE_FIN_LATERAL"
            LBL "253_DIRNEG_S0_RUN"
            CALL LBL "FEED_IPRE_FIN_DEPTH"
            Q6 = ( Q5 - Q43 ) / Q55                             ; Anfahrradius
            CC  X+Q1 Y+Q2
            APPR PLCT PR+Q5 PA+Q4 RQ6 RR FQ385
            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 +Q64 GOTO LBL "253_DIRNEG_S0_END"
                Q5 = Q5 + 2 * Q43 * Q54
                FN 12: IF +Q5 LT +Q64 GOTO LBL "253_DIRNEG_S0_LAST"
                    Q5 = Q64
                    CALL LBL "FEED_IPRE_FIN_LATERAL"
                LBL "253_DIRNEG_S0_LAST"
                CTP PR+Q5 PA+Q3
                FN 9: IF +0 EQU +0 GOTO LBL "253_DIRNEG_S0_LOOP"
            LBL "253_DIRNEG_S0_END"
            FN 9: IF +Q9 EQU +1 GOTO LBL "253_DIRNEG_S0_SPIEND"
                CP  IPA-180 DR-
            LBL "253_DIRNEG_S0_SPIEND"
            DEP PLCT  PR+0 PA+Q84 RQ6
            FN 12: IF +Q5 LT +Q64 GOTO LBL "253_DIRNEG"
            FN 9: IF +0 EQU +0 GOTO LBL "END"
LBL "253_END"
*##############################

*##############################
*# Zyklus 254
*##############################
FN 10: IF +Q40 NE +254 GOTO LBL "254_END"
        *############################
        *# Schlichten:
        *# berechne Geo-Daten
        *# init. Breite mit Werkzeugradius,
        *# bzw. mit Nutbreite, wenn Schnitt
        *# in vorgeschruppter Hoehe
        *############################
        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                                            ; aktuelle halbe Breite
        Q13 = ABS(Q51)
        Q14 = ABS(Q62)
        FN 11: IF +Q13 GT +Q14 GOTO LBL "254_COMPL"         ; // Seite schlichten
            Q5 = Q64
            Q52 = Q51 - SGN ( Q201 ) * Q200                 ; neue Starthhe
            L  Z+Q52 R0 FMAX
            L  Z+Q51 R0 FQ206                               ; Eintauchvorschub (CR 61470)
            FN 9: IF +0 EQU +0 GOTO LBL "254_NOT_COMPL"
        LBL "254_COMPL"                                     ; // Tiefe schlichten
            Q52 = Q51 - SGN ( Q201 ) * (Q200 + Q369)        ; neue Starthhe
            L  Z+Q52 R0 FMAX
            SEL CYCLE "25x_SlotPlunge"                      ; // Zyklus wegen Q-Parameter-Konflikt in SlotPlunge
            CYCL CALL
        LBL "254_NOT_COMPL"
        FN 12: IF +Q43 LT +Q64 GOTO LBL "254_FACE"          ; // nur Endtiefe bearbeiten, wenn Nutbreite==Werkzeugradius
            L  Z+Q51 R0 FQ206
            CC X+Q81 Y+Q82
            CP PA+Q74 DR+ FQ385
            FN 9: IF +0 EQU +0 GOTO LBL "END"
        LBL "254_FACE"
        FN 9: IF +Q69 EQU -1 GOTO LBL "254_DIRNEG"          ; negative Richtung
        LBL "254_DIRPOS"
        ;/**************************
        ; Positiver Drehsinn
        ;***************************/
        Q5 = Q5 + Q43 * Q54
        Q9 = 0                                              ; spiralf. Erweitern
        FN 12: IF +Q5 LT +Q64 GOTO LBL "254_DIRPOS_RUN"
            Q5 = Q64
            Q9 = 1                                          ; kein spiralf. Erweitern
            CALL LBL "FEED_IPRE_FIN_LATERAL"
        LBL "254_DIRPOS_RUN"
        CALL LBL "FEED_IPRE_FIN_DEPTH"
        Q6 = ( Q5 - Q43 ) / Q55                             ; Anfahrradius
        CC  X+Q1 Y+Q2
        APPR PLCT PR+Q5 PA+Q3 RQ6 RL FQ385
        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 +Q64 GOTO LBL "254_DIRPOS_END"
            Q5 = Q5 + 2 * Q43 * Q54
            FN 12: IF +Q5 LT +Q64 GOTO LBL "254_DIRPOS_LAST"
                Q5 = Q64
                CALL LBL "FEED_IPRE_FIN_LATERAL"
            LBL "254_DIRPOS_LAST"
            CTP PR+Q5 PA+Q73
            FN 9: IF +0 EQU +0 GOTO LBL "254_DIRPOS_LOOP"
        LBL "254_DIRPOS_END"
        FN 9: IF +Q9 EQU +1 GOTO LBL "254_DIRPOS_S0_SPIEND"
            CP  IPA+180 DR+
        LBL "254_DIRPOS_S0_SPIEND"
        DEP PLCT  PR+0 PA+Q73 RQ6
        FN 12: IF +Q5 LT +Q64 GOTO LBL "254_DIRPOS"
        FN 9: IF +0 EQU +0 GOTO LBL "254_END"
        LBL "254_DIRNEG"
        ;/**************************
        ; Negativer Drehsinn
        ;***************************/
        Q5 = Q5 + Q43 * Q54
        Q9 = 0                                              ; spiralf. Erweitern
        FN 12: IF +Q5 LT +Q64 GOTO LBL "254_DIRNEG_RUN"
            Q5 = Q64
            Q9 = 1                                          ; kein spiralf. Erweitern
            CALL LBL "FEED_IPRE_FIN_LATERAL"
        LBL "254_DIRNEG_RUN"
        CALL LBL "FEED_IPRE_FIN_DEPTH"
        Q6 = ( Q5 - Q43 ) / Q55                             ; Anfahrradius
        CC  X+Q1 Y+Q2
        APPR PLCT PR+Q5 PA+Q73 RQ6 RR FQ385
        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 +Q64 GOTO LBL "254_DIRNEG_END"
            Q5 = Q5 + 2 * Q43 * Q54
            FN 12: IF +Q5 LT +Q64 GOTO LBL "254_DIRNEG_LAST"
                Q5 = Q64
                CALL LBL "FEED_IPRE_FIN_LATERAL"
            LBL "254_DIRNEG_LAST"
            CTP PR+Q5 PA+Q3
            FN 9: IF +0 EQU +0 GOTO LBL "254_DIRNEG_LOOP"
        LBL "254_DIRNEG_END"
        FN 9: IF +Q9 EQU +1 GOTO LBL "254_DIRNEG_S0_SPIEND"
            CP  IPA-180 DR-
        LBL "254_DIRNEG_S0_SPIEND"
        DEP PLCT  PR+0 PA+Q73 RQ6
        FN 12: IF +Q5 LT +Q64 GOTO LBL "254_DIRNEG"
        FN 9: IF +0 EQU +0 GOTO LBL "254_END"
LBL "254_END"
FN 9: IF +0 EQU +0 GOTO LBL "END"
;/**************************************
* integrierte Module
;***************************************/
LBL "FEED_IPRE_FIN_LATERAL"
FN 9: IF +Q439 EQU +0 GOTO LBL "FEED_IPRE_FIN_LATERAL_END"
    M110
    LBL "FEED_IPRE_FIN_LATERAL_END"
    LBL 0
LBL "FEED_IPRE_FIN_DEPTH"
    FN 9: IF +Q5 EQU +Q64 GOTO LBL "FEED_IPRE_FIN_DEPTH_END"
    FN 12: IF +Q439 LT +2 GOTO LBL "FEED_IPRE_FIN_DEPTH_END"
        M110
    LBL "FEED_IPRE_FIN_DEPTH_END"
    LBL 0
LBL "END"                                                   ; Ende
M111                                                        ; Vorschub auf Mittelpunktsbahn
END PGM MM
