Hallo,
kennt von euch jemand diese Problematik? Fehler ist leider sporadisch!
Software V558
$CYCFLAG
Hallo,
kennt von euch jemand diese Problematik? Fehler ist leider sporadisch!
Software V558
$CYCFLAG
ich hab da mehre Ideen:
-War $Advance bei Stop auf 0?
-Bei Stop wird glaub i die IR_STOPM() ausgeführt. Wird da $Advance beschrieben?
MfG
Ja eventuell. Doch soviel ich weiss, wird sowieso innerhalb jedes Interrupts der $Advance=0 gesetzt.
lg drudge
Ja eventuell. Doch soviel ich weiss, wird sowieso innerhalb jedes Interrupts der $Advance=0 gesetzt.
Würd ich bezweifeln.
Warum stünde sonst das $ADVANCE = 0 im Muster-Interruptprogramm in der Doku.
Ja eventuell. Doch soviel ich weiss, wird sowieso innerhalb jedes Interrupts der $Advance=0 gesetzt.lg simeonw
Laut Doku:
Im Interruptprogramm gibt es keinen Rechnervorlauf, da es auf Kommandoebene
läuft, d.h. es wird Satz für Satz abgearbeitet ($ADVANCE--Zuweisungen sind nichtzulässig). Ein Überschleifen ist somit nicht möglich.
Würd ich bezweifeln.
Warum stünde sonst das $ADVANCE = 0 im Muster-Interruptprogramm in der Doku.
Meinst du das Programm?
Wichtig ist, daß in Unterprogrammen, die mit RESUME abgebrochen werden sollen, vor der
letzten Zeile der Vorlauf angehalten wird. Nur dann ist gewährleistet, daß der Vorlaufzeiger
bei RESUME nicht in der Ebene steht, in welcher der Interrupt deklariert wurde. In MOVEP()
wurde dies mit der $ADVANCE=0 Zuweisung realisiert.
Im Interruptprogramm selbst wird -- sobald 4 Teile durch einen Sensor an Eingang 1 erkannt
sind -- die Suchbewegung mittels BRAKE angehalten, und schließlich mit der RESUME--Anweisung
abgebrochen (da neben IR_PROG() auch MOVEP() beendet wird). Ohne die
BRAKE--Anweisung würde zunächst noch die Suchbewegung im Vorlauf abgearbeitet werden.
Nach RESUME wird das Hauptprogramm mit der Anweisung nach dem Unterprogrammaufruf,
also $ADVANCE=3 (Vorlauf zurückstellen), fortgesetzt.
;------------- Hauptteil ------------
PTP HOME ;SAK-Fahrt
INTERRUPT ON 11
MOVEP ( ) ;Abfahren der Suchstrecke
$ADVANCE=3 ;Vorlauf zurueckstellen
INTERRUPT OFF 11
GRIP ( )
PTP HOME
END
;-------- Unterprogramm ------------
DEF MOVEP ( ) ;Unterprogramm zum Abfahren der Suchstrecke
PTP {X 1232,Y -263,Z 1000,A 0,B 67,C -90}
LIN {X 1232,Y 608,Z 1000,A 0,B 67,C -90}
$ADVANCE=0 ;Vorlauf anhalten
END ;
;------ Interruptprogramm ---------
DEF IR_PROG ( ) ;Teileposition speichern
;INTERRUPT OFF 11
I[1]=I[1]+1
POSITION[I]=$POS_INT ;Abspeichern der Position
IF I[1]==4 THEN ;4 Teile werden erkannt
BRAKE ;Anhalten der Bewegung
RESUME ;Abbrechen von IR_PROG & MOVE
ENDIF
;INTERRUPT ON 11
END
;-------- Unterprogramm ------------l
DEF GRIP ( ) ;Greifen der erkannten Teile
INT POS_NR ;Zaehlvariable
FOR POS_NR=I[1] TO 1 STEP -1
POSITION[POS_NR].Z=POSITION[POS_NR].Z+200
LIN POSITION[POS_NR] ;200mm ueber Teil fahren
LIN_REL {Z -200} ;Teil senkrecht anfahren
; Teil greifen
LIN POSITION[POS_NR] ;wieder hoch fahren
LIN {X 634,Y 1085,Z 1147,A 49,B 67,C -90}
; Teil ablegen
ENDFOR
END
Da wird ja in MoveP() der interrupt angehalten.
... das ist nicht das Interruptprogramm sondern das aktivierende und es hat nur etwas mit der RESUME Anweisung zu tun!
... das ist nicht das Interruptprogramm sondern das aktivierende und es hat nur etwas mit der RESUME Anweisung zu tun!
[move] [/move]
... das ist nicht das Interruptprogramm sondern das aktivierende und es hat nur etwas mit der RESUME Anweisung zu tun!
Richtig!
Ich hab das verwechselt.
OK.
Sind trotzdem irgendwelche anderen Möglichkeiten in Betracht zu ziehen??