BEGIN PGM 220 MM
FN 22: FUNCT QL0 FNR 900 PIN 70 PIN 220
FN 18: SYSREAD QL0 = ID992 NR30 ; 1=Bahnsteuerung
FN 18: SYSREAD QL1 = ID 992 NR 32 IDX 220 ; 0 = Zyklus 220 gesperrt
FN 10: IF +QL1 NE +0 GOTO LBL "enablePattern"
FN 14: ERROR= 1084  ; Bearbeitungszyklus nicht erlaubt
LBL "enablePattern"
Q200 = ABS Q200
Q204 = ABS Q204
Q241 = ABS Q241
Q244 = ABS Q244
Q250 = ABS Q250
Q251 = ABS Q251
Q252 = ABS Q252
Q301 = ABS Q301
FN 9: IF +QL0 EQU +1 GOTO LBL "MultiIpo_Para"
QL30 = 0
FN 9: IF +0 EQU +0 GOTO LBL "MultiIpo_Para_End"
LBL "MultiIpo_Para"
QL30 = ABS Q365
LBL "MultiIpo_Para_End"
FN 17: SYSWRITE ID 212 =+3
FN 18: SYSREAD Q147 = ID10 NR3
FN 10: IF +Q147 NE +0 GOTO LBL "defCycle"
FN 14: ERROR= 1027  ; kein Bearbeitungszyklus definiert
LBL "defCycle"
FN 18: SYSREAD QL1 = ID 992 NR 32 IDX Q147 ; 0 = Bearbeitungszyklus gesperrt
FN 10: IF +QL1 NE +0 GOTO LBL "enableCycle"
FN 14: ERROR= 1084  ; Bearbeitungszyklus nicht erlaubt
LBL "enableCycle"
FN 10: IF +Q147 NE +12 GOTO LBL 211
FN 14: ERROR= 1027
LBL 211
FN 10: IF +Q147 NE +254 GOTO LBL 210
FN 14: ERROR= 1084
LBL 210
FN 10: IF +Q147 NE +210 GOTO LBL 204
FN 14: ERROR= 1033
LBL 204
FN 10: IF +Q147 NE +211 GOTO LBL 203
FN 14: ERROR= 1034
LBL 203
FN 10: IF +Q147 NE +230 GOTO LBL 202
FN 14: ERROR= 1027
LBL 202
FN 10: IF +Q147 NE +231 GOTO LBL 201
FN 14: ERROR= 1027
LBL 201
FN 11: IF +Q147 GT +199 GOTO LBL 200
FN 18: SYSREAD Q148 = ID30 NR2
FN 0: Q149 =+Q201
FN 0: Q201 =+Q148
QL147 = 1	; Merker fr Sicherheitsabstand
LBL 200
DECLARE STRING QS30
QS30 = SYSSTR( ID10025 NR1 )
DECLARE STRING QS31 = "CfgGeoCycle"
DECLARE STRING QS32 = "displaySpindleErr"
Q130 = CFGREAD( KEY_QS30 TAG_QS31 ATR_QS32 )
FN 9: IF +Q130 EQU +0 GOTO LBL 199
FN 9: IF +Q147 EQU +17 GOTO LBL 199
FN 9: IF +Q147 EQU +18 GOTO LBL 199
FN 9: IF +Q147 EQU +207 GOTO LBL 199
FN 9: IF +Q147 EQU +209 GOTO LBL 199
FN 9: IF +Q147 EQU +241 GOTO LBL 199
FN 9: IF +Q110 EQU +0 GOTO LBL 199
FN 9: IF +Q110 EQU +1 GOTO LBL 199
FN 14: ERROR= 1000 ; Spindel ?
LBL 199
DECLARE STRING QS30
QS30 = SYSSTR( ID10025 NR1 )
DECLARE STRING QS31 = "CfgGeoCycle"
DECLARE STRING QS32 = "displayDepthErr"
Q130 = CFGREAD( KEY_QS30 TAG_QS31 ATR_QS32 )
FN 9: IF +Q130 EQU +0 GOTO LBL 206
FN 9: IF +Q147 EQU +263 GOTO LBL 207
FN 9: IF +Q147 EQU +264 GOTO LBL 207
FN 9: IF +Q147 EQU +265 GOTO LBL 207
FN 9: IF +Q147 EQU +267 GOTO LBL 207
FN 12: IF +Q201 LT +0 GOTO LBL 206
FN 9: IF +Q201 EQU +0 GOTO LBL 206
FN 9: IF +0 EQU +0 GOTO LBL 208
LBL 207
FN 11: IF +Q201 GT +0 GOTO LBL 208
FN 9: IF +Q147 EQU +265 GOTO LBL 209
FN 9: IF +Q147 EQU +267 GOTO LBL 209
FN 11: IF +Q356 GT +0 GOTO LBL 208
LBL 209
FN 12: IF +Q358 LT +0 GOTO LBL 206
FN 9: IF +Q358 EQU +0 GOTO LBL 206
LBL 208
FN 14: ERROR= 1077
LBL 206
FN 10: IF +Q109 NE -1 GOTO LBL 198
FN 14: ERROR= 1001
LBL 198
FN 11: IF +Q241 GT +0 GOTO LBL 197
FN 14: ERROR= 1017
LBL 197
FN 9: IF +Q147 EQU +204 GOTO LBL 192
FN 9: IF +Q147 EQU +263 GOTO LBL 191
FN 9: IF +Q147 EQU +264 GOTO LBL 191
FN 9: IF +Q147 EQU +265 GOTO LBL 191
FN 9: IF +Q147 EQU +267 GOTO LBL 191
FN 9: IF +Q147 EQU +240 GOTO LBL 160
FN 9: IF +0 EQU +0 GOTO LBL 161
LBL 160
FN 9: IF +Q343 EQU +0 GOTO LBL 161
FN 12: IF +Q344 LT +0 GOTO LBL 162
FN 0: Q131 =-1
FN 9: IF +0 EQU +0 GOTO LBL 190
LBL 162
FN 0: Q131 =+1
FN 9: IF +0 EQU +0 GOTO LBL 190
LBL 161
FN 9: IF +Q201 EQU +0 GOTO LBL 254
FN 12: IF +Q201 LT +0 GOTO LBL 196
FN 0: Q131 =-1
FN 9: IF +0 EQU +0 GOTO LBL 190
LBL 196
FN 0: Q131 =+1
FN 9: IF +0 EQU +0 GOTO LBL 190
LBL 191
FN 9: IF +Q201 EQU +0 GOTO LBL 253
Q356 = ABS Q356 * ( - 1 )
Q358 = ABS Q358 * ( - 1 )
FN 12: IF +Q201 LT +0 GOTO LBL 187
Q356 = ABS Q356
Q358 = ABS Q358
FN 9: IF +0 EQU +0 GOTO LBL 185
LBL 253
FN 9: IF +Q147 EQU +265 GOTO LBL 252
FN 9: IF +Q147 EQU +267 GOTO LBL 252
FN 9: IF +Q356 EQU +0 GOTO LBL 252
FN 12: IF +Q356 LT +0 GOTO LBL 187
FN 9: IF +0 EQU +0 GOTO LBL 185
LBL 252
FN 9: IF +Q358 EQU +0 GOTO LBL 254
FN 12: IF +Q358 LT +0 GOTO LBL 187
LBL 185
FN 0: Q131 =-1
FN 9: IF +0 EQU +0 GOTO LBL 190
LBL 187
FN 0: Q131 =+1
FN 9: IF +0 EQU +0 GOTO LBL 190
LBL 192
FN 9: IF +Q249 EQU +0 GOTO LBL 254
FN 12: IF +Q249 LT +0 GOTO LBL 195
FN 0: Q131 =+1
FN 9: IF +0 EQU +0 GOTO LBL 190
LBL 195
FN 0: Q131 =-1
LBL 190 ; Hier fngt eigentlich der Lochkreis an
FN 10: IF +Q247 NE +0 GOTO LBL 193
FN 10: IF +Q245 NE +Q246 GOTO LBL 194
FN 14: ERROR= 1038
LBL 194
Q142 = ABS ( Q246 - Q245 )
FN 12: IF +Q142 LT +360.0001 GOTO LBL 193
FN 14: ERROR= 1039
LBL 193
CALL LBL 99
FN 4: Q135 =+Q244 DIV +2
FN 0: Q136 =+Q245
FN 1: Q132 =+Q246 + -Q245
FN 8: Q133 =+Q132 LEN +0
FN 0: Q137 =+Q241
FN 0: Q139 =+Q247
FN 0: Q145 =+Q216 ; Teilkreismitte X
FN 0: Q146 =+Q217 ; Teilkreismitte Y
FN 9: IF +Q241 EQU +1 GOTO LBL 4
FN 9: IF +Q133 EQU +360 GOTO LBL 4
FN 2: Q137 =+Q137 - +1
LBL 4
FN 10: IF +Q139 NE +0 GOTO LBL 5
FN 4: Q139 =+Q132 DIV +Q137
LBL 5
FN 0: Q138 =+1		
Q141 = Q203 + Q200 * Q131 ; Sicherheitsabstand
Q144 = Q204 ; Speichern der sicheren Hhe
Q143 = Q203 + Q204 * Q131 ; Sichere Hoehe am Ende der Bearbeitungen wiederherstellen
FN 11: IF +Q204 GT +Q200 GOTO LBL "SafeHightEnd_OK"
    Q143 = Q203 + Q200 * Q131
LBL "SafeHightEnd_OK"
FN 10: IF +Q301 NE +0 GOTO LBL "ModSecSafDist"
    Q204 = Q200 ; temp. Modifikation des 2. Sicherheitsabstands
LBL "ModSecSafDist"
Q140 = Q203 + Q204 * Q131 ; Sichere Hoehe zwischen Bearbeitungen
FN 11: IF +Q204 GT +Q200 GOTO LBL "SafeHight1_OK"
    Q140 = Q203 + Q200 * Q131
LBL "SafeHight1_OK"
FN 1: Q130 =+Q109 + +1
FN 18: SYSREAD Q130 = ID270 NR1 IDXQ130
FN 9: IF +Q131 EQU -1 GOTO LBL 120
FN 11: IF +Q130 GT +Q140 GOTO LBL 121
   Z+Q144 R0 FMAX
FN 9: IF +0 EQU +0 GOTO LBL 121
LBL 120
FN 12: IF +Q130 LT +Q140 GOTO LBL 121
   Z+Q140 R0 FMAX
LBL 121
QL10 = Q145 + Q135 * COS ( Q136 ) ; X-Position
QL11 = Q146 + Q135 * SIN ( Q136 ) ; Y-Position
FN 9: IF +QL0 EQU +1 GOTO LBL "MultiIpo1"
   X+QL10 FMAX
   Y+QL11 FMAX
FN 9: IF +0 EQU +0 GOTO LBL "MultiIpo1_End"
LBL "MultiIpo1"
L  X+QL10  Y+QL11 FMAX
LBL "MultiIpo1_End"
FN 10: IF +QL147 NE +1 GOTO LBL "FlagSafDist_1" 
   Z+Q141 FMAX
LBL "FlagSafDist_1"
FN 17: SYSWRITE ID 212 =+0
FN 12: IF +Q147 LT +210 GOTO LBL "FlagCycle_1"
FN 11: IF +Q147 GT +215 GOTO LBL "FlagCycle_1"	
	Q197=1
LBL "FlagCycle_1"	
CYCL CALL
	Q197=0
FN 17: SYSWRITE ID 212 =+3
FN 9: IF +Q241 EQU +1 GOTO LBL 98
LBL 12
FN 1: Q138 =+Q138 + +1
FN 10: IF +Q301 NE +1 GOTO LBL 122
   Z+Q140 FMAX
LBL 122
FN 22: FUNCT QL20 FNR 900 PIN 2 ; STOPP bei Einzelsatz
FN 10: IF +QL30 NE +1 GOTO LBL 135 ; Verfahrart Kreis nur bei Bahnsteuerung
CC  X+Q145  Y+Q146
LP  PR+Q135  PA+Q136 FMAX
FN 1: Q136 =+Q136 + +Q139
FN 12: IF +Q139 LT +0 GOTO LBL 134
CP IPA+Q139 DR+ FMAX
FN 9: IF +0 EQU +0 GOTO LBL 136
LBL 134
CP IPA+Q139 DR- FMAX
FN 9: IF +0 EQU +0 GOTO LBL 136
LBL 135 ; Verfahrart Gerade
FN 1: Q136 =+Q136 + +Q139
QL10 = Q145 + Q135 * COS ( Q136 ) ; X-Position
QL11 = Q146 + Q135 * SIN ( Q136 ) ; Y-Position
FN 9: IF +QL0 EQU +1 GOTO LBL "MultiIpo2"
   X+QL10 FMAX
   Y+QL11 FMAX
FN 9: IF +0 EQU +0 GOTO LBL "MultiIpo2_End"
LBL "MultiIpo2"
L  X+QL10  Y+QL11 FMAX
LBL "MultiIpo2_End"
LBL 136
FN 10: IF +QL147 NE +1 GOTO LBL "FlagSafDist_2" 
   Z+Q141 FMAX
LBL "FlagSafDist_2"
FN 17: SYSWRITE ID 212 =+0
FN 12: IF +Q147 LT +210 GOTO LBL "FlagCycle_2"
FN 11: IF +Q147 GT +215 GOTO LBL "FlagCycle_2"	
	Q197=1
LBL "FlagCycle_2"	
CYCL CALL
	Q197=0
FN 17: SYSWRITE ID 212 =+3
FN 12: IF +Q138 LT +Q241 GOTO LBL 12
LBL 98
    Q204 = Q144
  Z+Q143 FMAX
LBL 99
FN 3: Q205 =+Q205 * +Q131
FN 3: Q212 =+Q212 * +Q131
FN 3: Q250 =+Q250 * +Q131
FN 3: Q252 =+Q252 * +Q131
FN 3: Q256 =+Q256 * +Q131
FN 3: Q257 =+Q257 * +Q131
FN 3: Q258 =+Q258 * +Q131
FN 3: Q259 =+Q259 * +Q131
LBL 0
FN 0: Q216 =+Q145
FN 0: Q217 =+Q146
FN 11: IF +Q147 GT +199 GOTO LBL 254
FN 0: Q201 =+Q149
LBL 254
FN 22: FUNCT QL0 FNR 900 PIN 70 PIN 0
END PGM 220 MM
