Hallo an alle,
Ich habe folgendes Problem (KRC4, KSS 8.6.x):
Ich muss bei einigen Bewegungen auf zwei Ereignisse reagieren können: Einmal auf "Bauteil gegriffen" und einmal auf "Kollision". Die Signale können auch gleichzeitig auftreten und werden in separaten Interrupts abgearbeitet.
Wenn beide Fälle gleichzeitig auftauchen hat die Reaktion auf die Kollision Vorrang (niedrigere Prio Zahl). Die Bauteilaufnahme wird abgebrochen und ein Rückzug ausgelöst.
Sobald ich jedoch wieder in dasselbe Programm springe und die beiden genannten Interrupts aktiviere, wird das Interrupt Programm "Bauteil gefunden" ausgeführt.
Da ich in den beiden Interrupts den jeweils anderen mitabschalte (mit Interrupt OFF xx), gehe ich davon aus, dass der Merker mitgelöscht wird. Es steht auch so ähnlich in der Kuka Doku, wenn auch im Kapitel für Enable/Disable:
"Wenn ein gesperrter Interrupt nicht mehr freigegeben wird, sondern deaktiviert
wird (d. h., nach INTERRUPT DISABLE kommt INTERRUPT OFF),
löscht dies den Merker für das Ereignis. Wenn der Interrupt danach wieder
aktiviert wird, reagiert er erst wieder auf ein neues Ereignis."
Habt ihr eine Idee woran das liegen kann?
Die Interrupts mit diesen Prioritäten gibt es aufgrund der Komplexität der Anwendung jeweils über 70 Mal in dem Projekt, sie sind aber natürlich nicht gleichzeitig aktiv.
Danke
DEF MAIN()
INTERRUPT DECL 30 WHEN Kollision == FALSE DO IP001_Rueckzug()
INTERRUPT OFF 30
INTERRUPT DECL 31 WHEN TeilGefunden == FALSE DO IP002_Freifahren()
INTERRUPT OFF 31
;Programm...
END
DEF Programm()
INTERRUPT ON 30
INTERRUPT ON 31
;Fahre zu Bauteil
WAIT SEC 0
INTERRUPT OFF 30
INTERRUPT OFF 31
END
DEF IP001_Rueckzug()
BRAKE
INTERRUPT OFF 30
INTERRUPT OFF 31
RueckzugsProgramm()
RESUME
END
DEF IP002_Freifahren()
BRAKE
INTERRUPT OFF 30
INTERRUPT OFF 31
RESUME
END
Alles anzeigen