Hallo zusammen,
ich habe folgendes Problem:
Es geht um die korrekte rotatorische Ausrichtung eines zylindrischen Werkstückes nach einer Durchgangsbohrung.
Bei einer Position wird durch eine vorherige Berechnung eine Verdrehung auf A aufgerechnet. Das funktioniert auch hervorragend, bis manchmal (scheinbar völlig zufällig) ein merkwürdiger Wert errechnet wird (wobei der bisher immmer -34.xxx war) der die Achse 6 in den Softwareendschalter treibt. Ausgangsposition ist die Achse 6 bei -28Grad während der Winkel A 0.00 beträgt. Darauf wird dann der vorher berechnete Winkel aufgerechnet. Man hat also in jede Richtung mehr als genug Rotation übrig um das Werkstück mehr als 180 Grad zu drehen.
Ich hätte nun gerne mit einem Interrupt die Situation abgefangen in der die Zielposition bei >345Grad nicht mehr angefahren wird. (oder was immer funktioniert, falls jemand Vorschläge hat)
Meine Versuche bisher waren:
in der sub.sps (USER PLC):
position_aktuell = $POS_ACT
in dem besagten Programm dann:
INTERRUPT DECL 4 WHEN position_aktuell.A6 >= abbruchwinkel (wenn es eine Positionsvariable war: abbruchwinkel.A6) DO winkel_ueberschritten()
wobei position_aktuell als E6POS und abbruchwinkel in verschiedenen Verusuchen als REAL, als INT, als E6AXIS mit {A1-A5 0.00, A6 -345} und als E6POS Variable deklariert waren.
Die Variablen gingen aber nie zusammen. Laut Panel Syntaxcheck gehörten die alle nicht zum Typ der E6POS.
Ich habe als nächstes dann versucht $AXIS_FOR (in der Doku gefunden) mit E6AXIS Variablen abzugleichen. Hat aber ebenfalls nicht funktioniert. Ich hatte den Befehl position_aktuell=$AXIS_FOR vor den eigentlichen Bewegungsbefehl und eine IF Abfrage gesetzt. Da ergibt $AXIS_FOR aber keine nutzbaren Werte.
Falls bis hierhin jemand durch meinen Kauderwelsch durchgeblickt hat, kann mir bitte jemand einen Tipp geben?
Ich bin etwas ratlos und würde ungern einfach die Holzhammermethode ( IF (Winkel < -34 AND > -35) THEN Winkel=Winkel +1) anwenden
um den (scheinbar kritischen) Winkel -34Grad zu übergehen.
Gruß