BEGIN PGM 427 MM 
FN 18: SYSREAD Q0 = ID2000 NR10 IDX4158
FN 9: IF +Q0 EQU +1 GOTO LBL 254
FN 18: SYSREAD Q0 = ID990 NR2 IDX16
FN 9: IF +Q0 EQU +0 GOTO LBL 254
Q198 = 427
CALL PGM INIT.CYC
;** Tastkugelradius umladen
Q4 = Q2
FN 10: IF +Q267 NE +0 GOTO LBL 12
FN 14: ERROR= 1042
LBL 12
;** Nur WZ-Achse X, Y, Z erlaubt
FN 12: IF +Q109 LT +3 GOTO LBL 2
FN 14: ERROR= 1079
LBL 2
Q320 = Q320 + Q2 + Q3
FN 12: IF +Q261 LT +Q260 GOTO LBL 130
FN 0: Q260 =+Q261
LBL 130
FN 1: Q1 =+Q109 + +1
FN 18: SYSREAD Q0 = ID270 NR1 IDXQ1
FN 11: IF +Q0 GT +Q260 GOTO LBL 120
L  Z+Q260 R0 FQ59
LBL 120
FN 9: IF +Q272 EQU +1 GOTO LBL 21
FN 9: IF +Q272 EQU +2 GOTO LBL 31
FN 9: IF +Q272 EQU +3 GOTO LBL 41
FN 14: ERROR= 1064
;X-Achse (Hauptachse)
LBL 21
Q1 = Q263 + ( - Q320 * Q267 )
Q2 = 0
FN 9: IF +Q267 EQU -1 GOTO LBL 22
FN 9: IF +Q109 EQU +0 GOTO LBL 23
Q2 = Q41
FN 9: IF +0 EQU +0 GOTO LBL 23
LBL 22
Q2 = 180
FN 9: IF +Q109 EQU +0 GOTO LBL 23
Q2 = Q41 + 180
LBL 23
L  X+Q1  Y+Q264 R0 FQ59
TCH PROBE 1.0 BEZUGSPUNKT POLAR
TCH PROBE 1.1 X WINKEL:+Q2
TCH PROBE 1.2  Z+Q261
CALL PGM SUB_POSREAD.CYC
;Kugelradius verrechnen
Q160 = Q141 + ( Q267 *  Q4  )
FN 9: IF +0 EQU +0 GOTO LBL 98
;Y-Achse (Nebenachse)
LBL 31
Q1 = Q264 + ( - Q320 * Q267 )
Q2 = 90
FN 9: IF +Q267 EQU -1 GOTO LBL 32
FN 9: IF +Q109 EQU +1 GOTO LBL 33
Q2 = Q41 + Q2
FN 9: IF +0 EQU +0 GOTO LBL 33
LBL 32
Q2 = 270
FN 9: IF +Q109 EQU +1 GOTO LBL 33
Q2 = Q41 + 270
LBL 33
L  X+Q263  Y+Q1 R0 FQ59
TCH PROBE 1.0 BEZUGSPUNKT POLAR
TCH PROBE 1.1 X WINKEL:+Q2
TCH PROBE 1.2  Z+Q261
CALL PGM SUB_POSREAD.CYC
;Kugelradius verrechnen
Q160 = Q142 + ( Q267 * Q4 )
FN 9: IF +0 EQU +0 GOTO LBL 98
;in Werkzeugachse tasten
LBL 41
Q1 = Q261 + ( - Q320 * Q267 )
Q2 = 0
FN 9: IF +Q267 EQU -1 GOTO LBL 42
FN 9: IF +Q109 EQU +2 GOTO LBL 43
Q2 = Q41
FN 9: IF +0 EQU +0 GOTO LBL 43
LBL 42
Q2 = 180
FN 9: IF +Q272 EQU +3 GOTO LBL 43
FN 9: IF +Q109 EQU +2 GOTO LBL 43
Q2 = Q41 + 180
LBL 43
L  X+Q263  Y+Q264 R0 FQ59
TCH PROBE 1.0 BEZUGSPUNKT POLAR
TCH PROBE 1.1 Z WINKEL:+Q2
TCH PROBE 1.2  Z+Q1
CALL PGM SUB_POSREAD.CYC
;Tasterlaenge
Q160 = Q143 - Q114
FN 10: IF +Q113 NE +1 GOTO LBL 98
Q160 = Q143 - ( Q114 * 25.4 )
LBL 98
L  Z+Q260 FQ59
FN 10: IF +Q272 NE +1 GOTO LBL 150
; Messachse = 1. Achse  
Q168 = Q160 - Q263
FN 9: IF +0 EQU +0 GOTO LBL 160
LBL 150
FN 10: IF +Q272 NE +2 GOTO LBL 151
; Messachse = 2. Achse  
Q168 = Q160 - Q264
FN 9: IF +0 EQU +0 GOTO LBL 160
LBL 151
; Messachse = 3. Achse  
Q168 = Q160 - Q261
LBL 160
FN 10: IF +Q113 NE +1 GOTO LBL 170
Q288 = Q288 / 25.4
Q289 = Q289 / 25.4
Q263 = Q263 / 25.4
Q264 = Q264 / 25.4
Q160 = Q160 / 25.4
Q168 = Q168 / 25.4
Q261 = Q261 / 25.4
LBL 170
;FCL lesen
FN 18: SYSREAD Q0 = ID630 NR1
FN 12: IF +Q0 LT +2 GOTO LBL 190
;Schnelles Antasten
FN 18: SYSREAD Q189 = ID370 NR6
FN 9: IF +Q189 EQU +1 GOTO LBL 192
LBL 190
FN 9: IF +Q281 EQU +0 GOTO LBL 198
FN 9: IF +Q281 EQU +1 GOTO LBL 193
FN 12: IF +Q0 LT +2 GOTO LBL 191
FN 9: IF +Q189 EQU +0 GOTO LBL 193
LBL 191
FN 10: IF +Q281 NE +2 GOTO LBL 198
LBL 192
;Screen-Ausgabe
FN 16: F-PRINT 427PROT.A / SCREEN:
FN 17: SYSWRITE ID 990 NR9 =+1
FN 16: F-PRINT 427PROT.A / SCLR:
FN 9: IF +0 EQU +0 GOTO LBL 198
LBL 193
;File-Ausgabe
FN 16: F-PRINT 427PROT.A / TCHPR427.TXT
LBL 198
FN 10: IF +Q113 NE +1 GOTO LBL 171
Q168 = Q168 * 25.4
LBL 171
Q19 = Q160
Q29 = Q288
Q39 = Q289
Q40 = 12
CALL PGM CHCK_STA.CYC
FN 18: SYSREAD Q35 = ID1000 NR7483 ;MP7483: Werkzeugname/nummer erlaubt
FN 18: SYSREAD Q30 = ID30 NR52 IDX330 ;ABFRAGE, OB TOOLNAME PROGR. IST
FN 9: IF +Q30 EQU -1 GOTO LBL 181 ; Parameter nicht definiert
FN 9: IF +Q30 EQU +0 GOTO LBL 45 ; Kein Name programmiert
FN 10: IF +Q35 NE +2 GOTO LBL 46
FN 14: ERROR= 1094 ;Toolname nicht erlaubt
LBL 46
FN 18: SYSREAD Q330 = ID990 NR10 IDX330 ;ZUM TOOLNAMEN EINE NUMMER SUCHEN
FN 10: IF +Q330 NE -1 GOTO LBL 34
FN 14: ERROR= 1092 ;ES KONNTE KEINE NUMMER GEFUNDEN WERDEN
LBL 45
FN 9: IF +Q330 EQU +0 GOTO LBL 181
FN 10: IF +Q35 NE +1 GOTO LBL 34
FN 9: IF +Q330 EQU +0 GOTO LBL 34 ;TOOLNR 0 immer erlaubt
FN 14: ERROR= 1093 ;Toolnummer nicht erlaubt
LBL 34
FN 11: IF +Q272 GT +2 GOTO LBL 184
QL100 = INT Q330 ; WZ-Nummer
QL101 = 10 * FRAC Q330 ; WZ-Index
FN 18: SYSREAD Q0 = ID50 NR22 IDXQL100.QL101
FN 9: IF +Q0 EQU +0 GOTO LBL 180
Q1 = ABS Q168
FN 11: IF +Q0 GT +Q1 GOTO LBL 180
FN 17: SYSWRITE ID 50 NR7 IDXQL100.QL101 =+1
FN 14: ERROR= 1065
LBL 184
QL100 = INT Q330 ; WZ-Nummer
QL101 = 10 * FRAC Q330 ; WZ-Index
FN 18: SYSREAD Q0 = ID50 NR21 IDXQL100.QL101
FN 9: IF +Q0 EQU +0 GOTO LBL 180
Q1 = ABS Q168
FN 11: IF +Q0 GT +Q1 GOTO LBL 180
FN 17: SYSWRITE ID 50 NR7 IDXQL100.QL101 =+1
FN 14: ERROR= 1065
LBL 180
FN 11: IF +Q272 GT +2 GOTO LBL 185
QL100 = INT Q330 ; WZ-Nummer
QL101 = 10 * FRAC Q330 ; WZ-Index
FN 18: SYSREAD Q0 = ID50 NR5 IDXQL100.QL101 ; DR 
Q0 = Q0 - ( Q168 * NEG Q267 )
FN 17: SYSWRITE ID 50 NR5 IDXQL100.QL101 =+Q0
FN 9: IF +0 EQU +0 GOTO LBL 181
LBL 185
FN 18: SYSREAD Q0 = ID50 NR4 IDXQL100.QL101 ; DL 
Q0 = Q0 - Q168
FN 17: SYSWRITE ID50 NR4 IDXQL100.QL101 =+Q0
LBL 181
FN 10: IF +Q309 NE +1 GOTO LBL 183
FN 12: IF +Q160 LT +Q288 GOTO LBL 182
FN 14: ERROR= 1058
LBL 182
FN 11: IF +Q160 GT +Q289 GOTO LBL 183
FN 14: ERROR= 1059
LBL 183
FN 17: SYSWRITE ID 990 NR1 =+0
FN 17: SYSWRITE ID 990 NR2 =+0
FN 10: IF +Q113 NE +1 GOTO LBL 254
Q168 = Q168 / 25.4
Q263 = Q263 * 25.4
Q264 = Q264 * 25.4
Q261 = Q261 * 25.4
LBL 254
END PGM 427 MM 
