23. Mai 2019, 02:56:08
Roboterforum.de - Die Industrieroboter- Anwender und Experten Community

[offen] PZ in einer Routine über Rapid versetzen?


normal_post Autor Thema: [offen] PZ in einer Routine über Rapid versetzen?  (Gelesen 2586 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

28. September 2018, 10:17:57
Gelesen 2586 mal
Offline

Kotik


Hallo zusammen,
gibt es eine Möglichkeit, wo ich den Programmzeiger in einer Routine auf eine bestimmte Zeile/Satz springen lassen kann und von dort die Abarbeitung weiter führe?
Vielen Dank im Voraus!
  • gefällt mir    Danke

Heute um 02:56:08
Antwort #1

Werbung

Gast

28. September 2018, 13:12:43
Antwort #1
Offline

Programmiersklave


  • gefällt mir    Danke

28. September 2018, 13:31:36
Antwort #2
Offline

Kotik


 :nocheck:
Ich kenne kein GoTo :denk:
Michael, du als Profi, hast bestimmt eine coole Idee als nur die GoTo ? :mrgreen:
  • gefällt mir    Danke

28. September 2018, 14:18:25
Antwort #3
Offline

Aleks91


Guten Tag,

was erhoffst du dir durch den sprung? ist der Sprung im Programm an eine Bedingung geknüpft?
GoTo finde ich unsauber aber das kann man machen.
Beispiel 1:
GOTO next;
...
next:
Die Programmabarbeitung fährt mit der Instruktion fort, die auf "next" folgt.
Beispiel 2:
reg1 := 1;
next:
...
reg1 := reg1 + 1;
IF reg1<=5 GOTO next;
Die Abarbeitung wird viermal an next übertragen (für reg1= 2, 3, 4, 5).
Beispiel 3
IF reg1>100 THEN
GOTO highvalue
ELSE
GOTO lowvalue
ENDIF
lowvalue:
...
GOTO ready;
highvalue:
...
ready:


Gruß, Aleks.
  • gefällt mir    Danke

28. September 2018, 14:22:48
Antwort #4
Offline

Programmiersklave


Na komm.


Zitat
GOTO wird verwendet, um die Programmabarbeitung in eine andere Zeile (ein Label) innerhalb derselben Routine zu verlegen.
Normalerweise brauchste kein GOTO, und es wird mit Recht als Trash-Lösung der Unfähigen angesehen. In sehr seltenen Fällen ist es allerdings extrem effizient. 

Was will man denn sonst zur Laufzeit eines Programmes machen?
Andererseits, wie ich Dich kenne... schreib ein RAPID-Programm, welches ein RAPID-Programm als Textdatei schreibt, in welcher die fragliche Routine so aussieht, dass das gewünschte Sprungziel als erste Anweisung kommt. Diese speicherste dann als *.MOD auf der Disk, lädst das Modul und führst es mit später Bindung wieder aus. Das geht tatsächlich. 
Wenn Du das dann noch auf drei oder mehr Ebenen verschachtelst wird man irgendwo in Schweden in einem Keller einen pentagrammförmigen Altar bauen, auf welchem Dein Portrait aufgestellt wird.  :twisted:

Grüße,
Michael
  • gefällt mir    Danke

Heute um 02:56:08
Antwort #5

Werbung

Gast

28. September 2018, 14:38:04
Antwort #5
Offline

Kotik


Hallo Michael,
vielen Dank für Deine ausführliche Antwort. Die Idee mit dem Modul erstellen, finde ich gar nicht verkehrt ;)
Das Problem was ich habe, ist folgendes:
Bei uns hängen drei Roboter an einer Steuerung und wenn einer von diesen Kollision fährt, bleiben alle stehen. Danach müssen alle drei freigefahren werden. Bei zwei Rob. läuft nach wiederholten Start alles automatisiert und sicher übers Menüauswahl automatisch in die HomePos.. Doch bei dem einem fehlt mir noch die richtige Idee. Bei diesem Rob. ist der sicherste Weg in die HomePos. zu fahren, die angefangene Routine zu Ende fahren lassen. Den, nach jedem Start über SPS werden die Rob. von Main gestartet.
Deswegen war mein Gedanke, dass über MoveLSync eine Routine jedes Mal angesprochen wird und die abgearbeitete Zeile (mit incr) abgespeichert wird. Somit könnte ich beim Nächstem Start in die Routine springen und auf die zuletzt gespeicherte PZ/Zeile springen und von dort den Ablauf sicher zu Ende fahren lassen.
Meine Move Positionen sehen so aus:
MoveL [[1703.56,475.90,159.64],[0.704233,-0.203026,0.616582,-0.287512],[0,1,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]],v500,z1,toR5_XX;
Es sind ca. 20-30 Position pro Vorrichtung.
  • gefällt mir    Danke

28. September 2018, 14:39:51
Antwort #6
Offline

Kotik



Das ist auch mein Ziel am Ende :ylsuper:
  • gefällt mir    Danke

28. September 2018, 15:10:02
Antwort #7
Offline

Programmiersklave


Ah, die konfliktreiche automatische Homefahrt, wie automatisch darf sie sein?
Tja, pragmatisch gesehen wäre es wohl das Einfachste, Du würdest die SPS überreden, im Falle einer gewesenen Kollision eben nicht StartMain zu schicken, sondern nur Start. Die Roboter können ja wissen, dass sie eine Kollision hatten (gibt ja einen Systemausgang dafür) und sich, wenn sie gut drauf sind, im letzten Akt vorher dann selbst nach Main schicken. Und wenn sie schlecht drauf sind, fahren sie eben weiter.
Wenn StartMain ein Dogma ist und Deine Programmstruktur einfach genug, dann bleibt Dir tatsächlich nur übrig, die Bewegungen durchzulabeln. Irgendwas Bescheuertes habe ich für einen anders gelagerten Fall mal gemacht, dass ich eigene Bewegungsbefehle gebaut hab, sozusagen einen Wrapper für MoveL etc., und wenn man da drinne ein bedingtes "Return" an die erste Zeile setzt, dann kann man sein ganzes Programm (abzüglich von Positionsüberprüfungen freilich) durchhecheln, OHNE überhaupt eine Bewegung zu machen, solange, bis die Bedingung wegfällt. Das könnte ein Zähler sein, der mitgelaufen ist oder sowas. Das müsste man dann nur SEHR konsequent handhaben. Und MoveC und Rückwärtsfahren und so fällt weg...

Grüße,
Michael
« Letzte Änderung: 28. September 2018, 15:12:21 von Programmiersklave »
  • gefällt mir    Danke

28. September 2018, 15:15:50
Antwort #8
Offline

Kotik


Hallo Michael,
leider geht es ohne "Start Main" nicht. Wäre es den möglich mir dieses Schnipsel zukommen lassen? :zwink:
Zitat
Irgendwas Bescheuertes habe ich für einen anders gelagerten Fall mal gemacht, dass ich eigene Bewegungsbefehle gebaut hab, sozusagen einen Wrapper für MoveL etc., und wenn man da drinne ein bedingtes "Return" an die erste Zeile setzt, dann kann man sein ganzes Programm (abzüglich von Positionsüberprüfungen freilich) durchhecheln, OHNE überhaupt eine Bewegung zu machen, solange, bis die Bedingung wegfällt. Das könnte ein Zähler sein, der mitgelaufen ist oder sowas. Das müsste man dann nur SEHR konsequent handhaben. Und MoveC und Rückwärtsfahren und so fällt weg...
  • gefällt mir    Danke

Heute um 02:56:08
Antwort #9

Werbung

Gast

28. September 2018, 16:14:07
Antwort #9
Offline

Programmiersklave


Ach was soll das, das war in einem obskuren Palettenprogramm eines KUKA, es geht hier ums Sinngemäße.
Machst halt einen Zähler, der immer bei 0 startet, und einen Speicher, der die Zahl vom letzten Durchlauf behält. Außer wenn das Programm normal gut endet, dann den Speicher auf  0. Und dann noch die Bewegungsbefehl-Wrapper, z. B. einen PROC MoveLSL (alle Parameter wie bei MoveL) und dann drinnen
Incr zaehler; 
IF (zaehler < speicher) return;
MoveL Alle durchgereichten Parameter;
ENDPROC
In dem Falle würde er keine Bewegung machen, bei welcher der Zähler kleiner ist als die vom letzten mal behaltene Zahl. Sobald der Zähler größer oder gleich wird, führt er die Bewegung aus. 
Aber ich find's riskant. Man muss beim Start absolut sicher sein, dass der Robbi noch da steht, wo er vermutet wird (dafür gibt's aber was im System). 

Schönes Wochenende,
Michael
  • gefällt mir    Danke

02. Oktober 2018, 16:51:15
Antwort #10
Offline

Micky


Hallo,
meines Erachtes  gibt es seit RobotWare 6.04 eine Fehlerbehandlung für die Kollision.
Die Fehlernummer lautet: ERR_COLL_STOP

Die Verwendung der Fehlerbehandlung muss in den Systemparametern (SYS) über "Controller/General Rapid/CollisionErrhandling" explizit eingeschaltet werden.

Wichtig ist das eine Fehlerbehandlung in die erforderliche Routine eingebaut wird.

Alternativ gibt es von ABB das Produkt "HomeposRunning", das für Deinen Anwendungsfall evtl. verwendet werden kann. Das Thema wurde hier im Forum bereits schon mehrfach behandelt. Vielleicht suchst Du mal danach.

Gruß
Micky
  • gefällt mir    Danke
Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind. (Albert Einstein)

08. Oktober 2018, 15:18:33
Antwort #11
Offline

Kotik


Hallo Michael, Hallo Micky,
vielen Dank für eure Ideen und Unterstützung. Werde mal aus dem ganzen mir noch etwas an Strategie überlegen.
Möchte halt nur ungerne HomePosRunning einsetzen und daher der Selbstversuch :) 
  • gefällt mir    Danke


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