25. Mai 2019, 04:13:26
Roboterforum.de - Die Industrieroboter- Anwender und Experten Community

 Interrupt während Interrupt auslösen


normal_post Autor Thema:  Interrupt während Interrupt auslösen  (Gelesen 2630 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

30. April 2019, 12:32:09
Gelesen 2630 mal
Offline

Wultrix


Hi,
Danke mal wieder für die vielen Tipp und Hilfen im Forum.
Leider finde ich auf meine aktuelle Frage keine Antwort.

Ich möchte während ich in Interrupt_1 bin einen weiteren Interrupt_2 aktiverien und dann direkt oder nach Interrupt_1 in Interrupt_2 springen.

Bsp.:
Reset/Abort Interrupt 6 in Cell() soll mich dort immer wieder hinbringen, wenn i_bCmdAbort==True. Aber wenn im Unterprogramm Main() erst ein i_bCmdSuspend==true kommt, dann stehe ich in einem Interrupt. Kann ich dann Interrupt 6 aktivieren und in Cell() zurückkehren?

DEF  CELL ( )
INTERRUPT DECL 6 WHEN i_bCmdAbort DO l_irAbort( )
Main()
END

DEF l_irAbort ()
   brake
   INTERRUPT OFF 6
   RESUME
END

DEF  Main ( )
INTERRUPT with brake DECL 9 WHEN i_bCmdSuspend DO l_ir( )
INTERRUPT ON 6
INTERRUPT ON 9
...
...
...
...
End

DEF l_ir ()
   BRAKE
   Interrupt off 9
   ;Fehlernummer ausgeben
      ;Job angehalten
      og_iError_NR=10

   WAIT SEC 1
   ;Warten bis es weiter gehen kann oder reset kommt
   WAIT FOR i_bCmdSuspend==FALSE OR i_bCmdAbort==TRUE
   if i_bCmdAbort==False then
     Interrupt on 9
   endif
END

In der Doku findet man erst bei Interrupts
"Wenn mehrere Interrupts gleichzeitig auftreten, wird zuerst der Interrupt mit der höchsten Priorität bearbeitet, dann die Interrupts niedrigerer Priorität. 1 = höchste Priorität"
Kingt als würden alle anstehenden Interrupts abgearbeitet, aber später kann man bei "INTERRUPTS DISABLE/ENABLE Abweichendes Verhalten" etwas über den Merker lesen, bei dem steht, das wenn ein Interrupt abgearbeitet wurde dieser zurückgesetzt wird und Interrupts nur abgearbeitet werden, wenn dieser True ist.
Ist der Merker nur für INTERRUPTS DISABLE/ENABLE wichtig?

Gruß Thomas
« Letzte Änderung: 06. Mai 2019, 09:26:35 von Wultrix »
  • gefällt mir    Danke

Heute um 04:13:26
Antwort #1

Werbung

Gast

30. April 2019, 13:45:43
Antwort #1
Offline

Whitey


Hallo Wultrix,

Wenn ein Interrupt eintrifft wird automatisch das  Global Interrupt Enable Bit im Status Register SREG gelöscht und alle weiteren  Interrupts unterbunden. Obwohl es möglich ist, zu diesem Zeitpunkt bereits wieder das I-bit zu setzen rate ich dringend davon ab. Dieses wird nämlich automatisch gesetzt, wenn die Interruptroutine beendet wird. Wenn in der Zwischenzeit weitere Interrupts eintreffen werden die zugehörigen Interrupt-Bits gesetzt und die Interrupts bei Beendigung der laufenden Interrupt-Routine in der Reihenfolge ihrer Priorität ausgeführt. Dies kann eigentlich nur dann zu Problemen führen, wenn ein hoch priorisierter Interrupt ständig und in kurzer Folge auftritt. Dieser sperrt dann womöglich alle anderen Interrupts mit niedrigerer Priorität. Ich rate daher davon ab da man in eine Schleife geraten kann aus der man nicht mehr rauskommt.
Grüße Whitey
  • gefällt mir    Danke
Es gibt 10 Gruppen von Menschen: Die, die Binärcode verstehen und die, die ihn nicht verstehen.

30. April 2019, 14:22:35
Antwort #2
Offline

Wultrix


Danke Whitey

leider muss ich trotzdem nochmal nachfragen.

Dies passiert aber nur, wenn ich im aktuell aufgerufenen Interrupt dieses  I-bit selbst wieder setzte, sonst würden alle anderen Interrupts ignoriert und auch nach dem Interrupt nicht ausgelöst, oder?

Ich möchte eben egal wo ich bin einen Stopp ermöglichen und wieder zurück ins Cell () kommen (nach Ende des Interrupts wäre auch okay). Leider sehen Interrupts ja nur Flanken und ich möchte diese nicht verpassen, sonst müsste ich eine selbst erzeugen.
Hierfür würde ich ein Pulsen einer Boolischen(bStop) im SPS.sub nutzen, wenn i_bCmdAbort von der übergeordneten SPS gesetzt wird.
Interrupt würde sich dann auf die Boolische beziehen.
INTERRUPT DECL 6 WHEN bStop DO l_irAbort( )

Gruß Wutrix
  • gefällt mir    Danke

30. April 2019, 14:31:19
Antwort #3
Offline

Whitey


Wenn in der Zwischenzeit weitere Interrupts eintreffen werden die zugehörigen Interrupt-Bits gesetzt und die Interrupts bei Beendigung der laufenden Interrupt-Routine in der Reihenfolge ihrer Priorität ausgeführt.

Dies passiert aber nur, wenn ich im aktuell aufgerufenen Interrupt dieses  I-bit selbst wieder setzte, sonst würden alle anderen Interrupts ignoriert und auch nach dem Interrupt nicht ausgelöst, oder?



Gruß Wutrix
[/quote]

So richtig, ich selbst hab es noch nie ausprobiert aber normaler weise arbeitet er dann die Interrupts nach der Prio ab.

Grüße Whitey
  • gefällt mir    Danke
Es gibt 10 Gruppen von Menschen: Die, die Binärcode verstehen und die, die ihn nicht verstehen.

06. Mai 2019, 09:23:00
Antwort #4
Offline

Wultrix


Danke Whitey für die Info, ich werde an dem Thema mal dran bleiben
  • gefällt mir    Danke

Heute um 04:13:26
Antwort #5

Werbung

Gast

07. Mai 2019, 19:23:41
Antwort #5
Offline

Sebastian78


Hallo Wultrix,

es wird nach der Prio abgearbeitet.

Gruß Sebastian
  • gefällt mir    Danke
Mein privater Beitrag zu Informationen über Industrieroboter: http://www.industrie-roboter.com

16. Mai 2019, 14:26:36
Antwort #6
Offline

SJX

Global Moderator

Auftretende Interrupts mit höherer Prio unterbrechen auch schon laufende Interrupts niederer Prio. Siehe Attachment.

In Deinem Falle sollte es auch mit einem Interrupt funken..

DEF  CELL ( )
 
  $CYCFLAG[1] = i_bCmdAbort OR i_bCmdSuspend
  INTERRUPT DECL 6 WHEN $CYCFLAG[1] DO l_ir ()
  Main()
  ;...
END
DEF  Main ( )
 
  INTERRUPT ON 6
  ;...
  ;...
 
End
DEF l_ir ()
  BRAKE
  INTERRUPT OFF 6
   ;Fehlernummer ausgeben
   ;Job angehalten
  og_iError_NR=10
 
  WAIT SEC 1
   ;Warten bis es weiter gehen kann oder reset kommt
  WAIT FOR i_bCmdSuspend==FALSE OR i_bCmdAbort==TRUE
  IF i_bCmdAbort==TRUE then
    RESUME
  ELSE
    INTERRUPT ON 6 
  ENDIF
END


Gruss SJX
  • gefällt mir    Danke
Manche Maenner bemuehen sich lebenslang, das Wesen einer Frau zu verstehen. Andere befassen sich mit weniger schwierigen Dingen z.B. der Relativitaetstheorie.


Teile per facebook Teile per linkedin Teile per pinterest Teile per reddit Teile per twitter
 

über das Roboterforum

Nutzungsbedingungen Impressum Datenschutzerklärung

Sponsoren des Roboterforums

ROBTEC GmbH