QUOTE (GreenVeltlins77 @ 14.02.2012, 19:32 Uhr)
Am Interessantesten ist, ob es ab Satz 24 geht.
..
22 FN 0: Q55 =+Q150 (Wert kann positiv sowie negativ sein - je nach Teillage !!!)
23 L Z-5 FMAX M91
24 FN 11: IF +Q55 GT +0 GOTO LBL 10
25 FN 12: IF +Q55 LT +0 GOTO LBL 11
26 CYCL DEF 247 BEZUGSPUNKT SETZEN ~
Q339=+Q30 ;BEZUGSPUNKT-NUMMER
27 L C+0 FMAX
28 M30
29 LBL 10 ;C-Achse nullen
30 FN 17: SYSWRITE ID 503 NRQ30 IDX6.0 =+Q55
31 LBL 0
32 LBL 11 ;C-Achse nullen
33 Q56 = 360 - Q55
34 FN 17: SYSWRITE ID 503 NRQ30 IDX6.0 =+Q56
35 LBL 0
36 END PGM B90-C0-ausrichten MM
Bevor der neue Wert mit SYSWRITE geschrieben werden kann, muß der alte mit SYSREAD ausgelesen und verrechnet werden.
z.B.:
SYSREAD Q57 = ID 503 NRQ30 IDX6
Q58 = Q57 - Q55
Zu beachten ist, dass bei den Werten aus ID 503 das Vorzeichen umgekehrt ist.
Die Sätze N24 und N25 werden nicht das gewünschte Ergebnis liefern.
Ist Q55 z.B. positiv, wir in N24 zum LBL10 gesprungen.
Das LBL 0 in N31 führt nicht zum Rücksprung, daher wird das Programm bis zum Ende N36 abgearbeitet und dann beendet.
Nur bei CALL LBL .. führt LBL 0 zum Rücksprung.
Die Sätze N33 und N34 werden also auch ausgeführt.
Lösung:
IF +Q55 LT +0 GOTO LBL 10
SYSWRITE ID 503 NRQ30 IDX6.0 =+Q55
IF +1 EQ +1 GOTO LBL 11 ; Springt immer zu LBL 11
LBL 10
Q56 = 360 - Q55
SYSWRITE ID 503 NRQ30 IDX6.0 =+Q56
LBL 11
Eigentlich ist die Abfrage nicht nötig, den gemessenen Winkel einfach wie oben Beschrieben verrechnen reicht.
Gruß
cgTNC