25. Juni 2019, 23:50:14
Roboterforum.de - Die Industrieroboter- Anwender und Experten Community

[offen] Fahren bis Flag gesetzt wird


normal_post Autor Thema: [offen] Fahren bis Flag gesetzt wird  (Gelesen 1242 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

10. Dezember 2018, 14:59:27
Gelesen 1242 mal
Offline

bf


Hallo!
Ist es möglich, mit dem Werkzeug in Stoßrichtung zu fahren bis ein Flag auf TRUE Gesetzt wird?
Also z.B.:
LIN_REL {Z -100}

Die Idee dahinter ist das auf dem Werkzeug ein Sensor ist, und wenn dieser anschlägt soll die Bewegung abgebrochen werden.
Ich hätte mal an sowas gedacht, wüsste aber gerne ob es da eine andere(bessere) Möglichkeit gibt?
WHILE FLAG[100]==FALSE
   LIN_REL {Z -1}
ENDWHILE

« Letzte Änderung: 10. Dezember 2018, 15:01:15 von bf »
  • gefällt mir    Danke

10. Dezember 2018, 15:20:43
Antwort #1
Offline

Robonator


Hallo bf.

Du kannst die Sache auch über einen Interrupt und einen $CYCFLAG realisieren.
INTERRUPT DECL 1 WHEN  $CYCFLAG[1] DO MeinProgramm( )
und dann den $CYCFLAG[1]=Sensorsignal.

Sobald der Sensor schaltet, registriert der $CYCFLAG[1] das und der Interrupt löst aus.
Jetzt musst du nur noch in "MeinProgramm" die Programmlogik erstellen, dass der Robi stehen bleibt und ggf. aus dem Unterprogramm hüpft.

Grüße
  • gefällt mir    Danke

10. Dezember 2018, 17:47:15
Antwort #2
Offline

Hermann


Stuchworte für die Suche hier im Forum:
Resume , Interrupt. Da solltest du alles finden.
  • gefällt mir    Danke

11. Dezember 2018, 19:47:47
Antwort #3
Offline

bf


INTERRUPT DECL 1 WHEN FLAG[0] DO A()
INTERRUPT DECL 3 WHEN FLAG[3] DO B()
INTERRUPT 1 ON
INTERRUPT 3 ON

DEF A()
 INTERRUPT DECL 2 WHEN FLAG[2] DO STOP_A()
 INTERRUPT 2 ON
 PTP_REL{Z -100}
 INTERRUPT 2 OFF
END

DEF STOP_A()
 RESUME
END
DEF B()
 ;ethernetkrl code
END

würde in diesem Fall mit RESUME auch B() abgebrochen werden falls diese Interruptroutine gerade läuft?
Ich will nämlich wirklich nur gezielt A() abbrechen lassen
« Letzte Änderung: 11. Dezember 2018, 19:51:36 von bf »
  • gefällt mir    Danke

11. Dezember 2018, 20:12:24
Antwort #4
Offline

Hermann


Weder noch.
 Das Programm funktioniert gar nicht, da nicht mal komplett.
Auch der Teil mit dem Abbruch des A-Teils funktioniert nicht. Da der Interrupt in der selben Ebene deklariert wird wie die Bewegung die abgebrochen werden soll.
Bitte lies noch mal die ganzen Threads die es zu dem Thema schon gibt durch.
Und beschreibe besser mal die Aufgabe die du da lösen willst.
Da wird ein Interrupt deklariert, in dem eine Bewegung gestartet wird die dann wieder abgebrochen werden soll, was läuft denn da sonst noch, bis einer der Interrupts überhaupt auftreten kann?
Sieht nach Multitasking durch die Hintertür aus, da muss man schon gut aufpassen was man veranstaltet. Meist gibt es da viel einfachere Lösungen.
  • gefällt mir    Danke

13. Dezember 2018, 08:59:42
Antwort #5
Offline

bf


Ich steuere den Roboter ausschließlich über EthernetKRL.

Nehmen wir an ich hab eine Methode A welche eine Bewegung ausführt, dann läuft diese Methode auch in einem Interrupt.
Jetzt würde ich in der Methode A einen weiteren Interrupt Deffinieren fürs Abbrechen.

Ich habe eine weitere Methode B welche zyklisch über EthernetKRL die IstPosition sendet, diese Interruptroutine ist also quasi in einer Endlosschleife.

Mir ist nun wichtig das ich die Interruptroutine A abbrechen kann aber B weiterläuft.

Ich hätte mir das dann eben so vorgestellt
da ja RESUME alle Interruptroutinen in der selben Ebene abbricht, hab ich den STOP Interrupt eben eine Ebene tiefer deklariert.

DEF main
    INTERRUPT DECL 1 WHEN $FLAG[1]==TRUE DO A()
    INTERRUPT ON 1
    INTERRUPT DECL 2 WHEN $FLAG[2]==TRUE DO B()
    INTERRUPT ON 2
    ;EthernetKRL code...
END

DEF A()
    INTERRUPT DECL 3 WHEN $FLAG[3]==TRUE do STOP()
    INTERRUPT ON 3
    LIN_REL {Z -100}
    $FLAG[1]=FALSE
END
DEF STOP()
    INTERRUPT OFF 3
    BRAKE
    RESUME
END
DEF B()
 ;sende zyklisch in endlosschleife Istposition über EthernetKRL
END

Sinn dahinter: Roboter soll auf eine Palette auffahren und Wenn der Sensor auf dem Werkzeug schaltet wird ein Befehl über Ethernet KRL gesendet welches dann die STOP-Funktion aufrufen soll.

Ich weiß - man kann Sensoren auch direkt an den Roboter anhängen, wir wollen das aber mal über eine Zentrale SPS regeln.
« Letzte Änderung: 13. Dezember 2018, 09:01:18 von bf »
  • gefällt mir    Danke

13. Dezember 2018, 12:50:27
Antwort #6
Offline

Hermann


Wenn das lin_rel in ein weiteres Unterprogramm verlegt wird, dann besteht eine geringe Chance. Ich vermute es wird eher nicht gehen.
Auf ein "Signal" das über Ethernet KRL gesetzt wird eine Bewegung abzubrechen halte ich für eine verwegene Idee. Das Timing für Ethernet KRL ist doch völlig unvorhersehbar, da musst Du den Roboter noch viel langsamer fahren als das bei solchen Operationen eh schon der Fall ist.
Da gibt es jede Menge Bussysteme, und dann verwendet man Ethernet KRL für die Kommunikation zu einer SPS, ich versteh das nicht.
JM2C


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