Roboterforum Willkommen Gast. Bitte einloggen oder registrieren.
Haben Sie Ihre Aktivierungs E-Mail übersehen?
18. Mai 2012, 10:45:57
Übersicht Hilfe Suche Kalender Einloggen Registrieren
News: English and international Robotsupport now on Robot Forum. Also Supported by the Moderators of the roboterforum.de

Roboterforum für Industrieroboter Anwender  |  Industrieroboter Helpcenter  |  ABB Roboter (Moderatoren: burlibua, Sven Weyer, rmac)  |  Thema: Befehl nur eine Achse drehen 0 Mitglieder und 1 Gast betrachten dieses Thema. « vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: Befehl nur eine Achse drehen  (Gelesen 2088 mal)
pfoesch
Neuling
*
Offline Offline

Beiträge: 11


« am: 25. Februar 2008, 13:11:15 »


Hallo Leute,

kann mir jemand kurz helfen
ich benötige ich den Befehl für die Programmierung mit dem ich nur die 6teAchse um eine bestimmte Anzahl von Graden drehen kann zb. um 180°? 

danke für eure Hilfe
pfoesch
Gespeichert
Robcheck01_MJ
Special Member
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 269



« Antworten #1 am: 25. Februar 2008, 15:18:04 »

Hallo pfoesch.

könnte so aussehen.


PERS jointarget jpAktuell;
PERS num nWertAchse6:=180;




jpAktuell:=CJointT(); !Aktuelle Achswinkel abfragen und auf jpAktuell schreiben
 
jpAktuell.robax.rax_6:=jpAktuell.robax.rax_6 + nWertAchse6;

MoveAbsj jpAktuell,vSchnell,z100,tGreifer;  ! Winkel anfahren


Gruss...
Gespeichert

„Herr, lass mich ein guter Mensch sein. Aber bitte nicht sofort.“
pfoesch
Neuling
*
Offline Offline

Beiträge: 11


« Antworten #2 am: 25. Februar 2008, 16:01:45 »


stehe leider nicht neben dem FlexPendant:

also nur zum Verständnis


PROC  Klammer1()

MoveL p1,v100,z0,tgreifer1\WObj:=woMuster

PERS jointarget jpAktuell;
PERS num nWertAchse6:=180;

jpAktuell:=CJointT();
 
jpAktuell.robax.rax_6:=jpAktuell.robax.rax_6 + nWertAchse6;

MoveAbsj jpAktuell,v100,z100,tgreifer1;
Gespeichert
Robcheck01_MJ
Special Member
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 269



« Antworten #3 am: 25. Februar 2008, 17:02:27 »

Ja fast. Ich würde die beiden Datentypdeklarationen nur über das Programm setzen. Ich habe für all meine Daten immer ein eigenes Modul.

Dann sind sie auch Global und in deinem Fall wären sie nur Lokal für diese Routine.

Also zB. so.

MODULE R1_DATA

PERS jointarget jpAktuell;
PERS num nWertAchse6:=180;

 PROC  Klammer1()

   MoveL p1,v100,z0,tgreifer1\WObj:=woMuster
   jpAktuell:=CJointT();
   jpAktuell.robax.rax_6:=jpAktuell.robax.rax_6 + nWertAchse6;

   MoveAbsj jpAktuell,v100,z100,tgreifer1;

 ENDPROC

ENDMODULE


Gruss...
Gespeichert

„Herr, lass mich ein guter Mensch sein. Aber bitte nicht sofort.“
pfoesch
Neuling
*
Offline Offline

Beiträge: 11


« Antworten #4 am: 25. Februar 2008, 17:20:35 »


Vielen Dank für deine schnelle Antworten.
Werde es gleich ausprobieren.

Melde mich dann.

pfoesch

Gespeichert
rmac
Global Moderator
Special Member
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 282


« Antworten #5 am: 25. Februar 2008, 19:32:48 »

hi,

Ja fast. Ich würde die beiden Datentypdeklarationen nur über das Programm setzen. Ich habe für all meine Daten immer ein eigenes Modul.
Dann sind sie auch Global und in deinem Fall wären sie nur Lokal für diese Routine.

nur so nebenbei:
PERS in einer Routine deklarieren geht eh nicht (= ist unzulässig = Fehler)    ks
Als VAR gehts auch lokal....

Gruß
Gespeichert
pfoesch
Neuling
*
Offline Offline

Beiträge: 11


« Antworten #6 am: 26. Februar 2008, 09:11:04 »


Vielen Dank für eure Hilfe;
Hat super im RobotStudio funktioniert;

werde es dann gleich am Roboter ausprobieren.

schönen Tag noch Pfoesch
Gespeichert
Robcheck01_MJ
Special Member
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 269



« Antworten #7 am: 26. Februar 2008, 09:14:43 »

@ rmac
Ja da hast Du recht.  Mr. Green

Ich würde aber in diesem Fall eh mit globalen Daten arbeiten. Damit ich auch Prgrammübergreifend die Daten nutzen kann.

Gruss...
Gespeichert

„Herr, lass mich ein guter Mensch sein. Aber bitte nicht sofort.“
rmac
Global Moderator
Special Member
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 282


« Antworten #8 am: 26. Februar 2008, 11:03:28 »

Moins,

muß nochmal klugscheißen ks
Ich denke, man sollte so wenig wie möglich/nötig mit globalen (und auch persistenten) Daten arbeiten,
weil globale Daten einfach schlechter zu warten sind. Wenn man irgendwo dran dreht, fängt man sich u.U.
Probleme an einer anderen Stelle ein und merkt das dann aber erst später...
Ist nur meine Meinung und vielleicht auch ein wenig Geschmacksache. (Will hier auch keine Diskussion darüber lostreten)

Also um das wirklich wiederverwendbar zu machen, sollte man das in eine (allgemeingültigere)
Routine verpacken, die man dann in einer eigenen Bibliothek (=Sysmodule) pflegt.

z.B. so (für RWare5.x):
Code:
  ! nJoint: Nummer der zu drehenden (Rob-)Achse
  ! nDeltaAngle: rel. Drehung der Achse in Grad
  PROC RotJoint(\switch Conc, \IDENTNO ID, \switch NoEOffs, NUM nJoint, NUM nDeltaAngle, SPEEDDATA Speed, \NUM V | NUM T, ZONEDATA Zone, \NUM Z, \STOPPOINTDATA Inpos, PERS TOOLDATA Tool, \PERS WOBJDATA WObj)
    VAR JOINTTARGET jtCurrent;

    jtCurrent := CJointT();
   
    TEST nJoint
      CASE 1 : jtCurrent.robax.rax_1 := jtCurrent.robax.rax_1 + nDeltaAngle;
      CASE 2 : jtCurrent.robax.rax_2 := jtCurrent.robax.rax_2 + nDeltaAngle;
      CASE 3 : jtCurrent.robax.rax_3 := jtCurrent.robax.rax_3 + nDeltaAngle;
      CASE 4 : jtCurrent.robax.rax_4 := jtCurrent.robax.rax_4 + nDeltaAngle;
      CASE 5 : jtCurrent.robax.rax_5 := jtCurrent.robax.rax_5 + nDeltaAngle;
      CASE 6 : jtCurrent.robax.rax_6 := jtCurrent.robax.rax_6 + nDeltaAngle;
      DEFAULT: RETURN;
    ENDTEST

    MoveAbsJ \Conc?Conc, jtCurrent, \ID?ID, \NoEOffs?NoEOffs, vSpeed, \V?V \T?T, Zone, \Z?Z, \Inpos?Inpos, Tool, \WObj?WObj;
   
  ENDPROC

bzw. für RWare4.x (ohne ID):
Code:
  ! nJoint: Nummer der zu drehenden (Rob-)Achse
  ! nDeltaAngle: rel. Drehung der Achse in Grad
  PROC RotJoint(\switch Conc, \switch NoEOffs, NUM nJoint, NUM nDeltaAngle, SPEEDDATA Speed, \NUM V | NUM T, ZONEDATA Zone, \NUM Z, \STOPPOINTDATA Inpos, PERS TOOLDATA Tool, \PERS WOBJDATA WObj)
    VAR JOINTTARGET jtCurrent;

    jtCurrent := CJointT();
   
    TEST nJoint
      CASE 1 : jtCurrent.robax.rax_1 := jtCurrent.robax.rax_1 + nDeltaAngle;
      CASE 2 : jtCurrent.robax.rax_2 := jtCurrent.robax.rax_2 + nDeltaAngle;
      CASE 3 : jtCurrent.robax.rax_3 := jtCurrent.robax.rax_3 + nDeltaAngle;
      CASE 4 : jtCurrent.robax.rax_4 := jtCurrent.robax.rax_4 + nDeltaAngle;
      CASE 5 : jtCurrent.robax.rax_5 := jtCurrent.robax.rax_5 + nDeltaAngle;
      CASE 6 : jtCurrent.robax.rax_6 := jtCurrent.robax.rax_6 + nDeltaAngle;
      DEFAULT: RETURN;
    ENDTEST

    MoveAbsJ \Conc?Conc, jtCurrent, \NoEOffs?NoEOffs, Speed, \V?V \T?T, Zone, \Z?Z, \Inpos?Inpos, Tool, \WObj?WObj;
   
  ENDPROC

Aufrufen dann z.B.: so
Code:
    RotJoint 6, 180, v100, z0, tgreifer1, \WObj:=woMuster;


Hab's jetzt nicht explizit getestet, sollte aber so gehen...

Schönen Tach noch
Gespeichert
Robcheck01_MJ
Special Member
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 269



« Antworten #9 am: 26. Februar 2008, 11:40:04 »

Mensch da hat jetzt aber jemand Gas gegeben.  grinser043

Nein darüber brauch man auch wirklich keine Diskussion lostreten.

Diese Lösung ist mit Sicherheit die elegantere Lösung,aber ist vieleicht in senem Fall etwas zu viel.

Trotzdem danke für das nette Feedback...

Gruss...
Gespeichert

„Herr, lass mich ein guter Mensch sein. Aber bitte nicht sofort.“
pfoesch
Neuling
*
Offline Offline

Beiträge: 11


« Antworten #10 am: 27. Februar 2008, 15:26:12 »

Wow mein Beitrag scheint manche Leute ganz schön zum grübeln zu bringen

Noch eine Frage:

Habe nun diese Zeilen auf den Roboter überspielt funktioniert auch wunderbar, bis auf eines was ich nicht versteht.

wenn ich mein Programm Schritt für Schritt abfahre dreht sich zum Schluss die 6teAchse genau an einer Stelle zur gewünschten Gradposition;
wenn ich aber mein Programm auf Play drücke dreht sich die 6teAchse jedoch bleibt der Arm nicht auf der gleichen Stelle sondern er bewegt sich in eine Richtung bis die gewünschten Grad erreicht worden sind

ist diese Zusatzbewegung durch den Befehl MoveAbsj?
Habe die Genauigkeit bei diesem Befehlt auf z0 gesetzt

danke für eure Info
pfoesch

Hätte dadurch beinahe den Roboter mit v7000 in die Alu-Platte versenkt  Shocked
Gespeichert
rmac
Global Moderator
Special Member
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 282


« Antworten #11 am: 27. Februar 2008, 18:38:03 »

Wow mein Beitrag scheint manche Leute ganz schön zum grübeln zu bringen
Nee, grübeln muß man nur bei schwierigen Sachen....
Das fällt eher unter die Rubrik "Fleißarbeit" oder von mir aus auch "erzieherische Maßnahme"  zwink

Wenn du das Programm schrittweise ausführst, werden die Bewegungsbefehle wie Stoppunkte angefahren (Zone: fine)
Beim kontinuierlichen Ausführen überlagern sich u.U. die Bewegungen in Abhängigkeit von den angegebenen Parametern
(Vorlauf / Bahnplanung). Ist ganz gut beschrieben im Referenzhandbuch unter "Positionierung während der Abarbeitung von
Programmen
".

Wichtig sind also in diesem Zusammenhang auch die Zonenangaben bei den Bewegungsbefehlen vor, nach und während MoveAbsJ.

Schreib doch mal welche Befehle du vorher und ggfls. nachher verwendest bzw. setze mal testweise echte Stoppunkte (also fine
z0 ist kein Stoppunkt !

Hätte dadurch beinahe den Roboter mit v7000 in die Alu-Platte versenkt  Shocked
Supi!
Kleiner Tipp zum nervenschonenden Arbeiten: Entdecke die geheime Welt zwischen Schrittweise und Fullspeed!

In diesem Sinne  beerchug
Gespeichert
pfoesch
Neuling
*
Offline Offline

Beiträge: 11


« Antworten #12 am: 29. Februar 2008, 17:34:28 »


Danke für deine Hilfe!

wenn ich die vorherige Position
und die Drehbewegung mit fine definiere dreht sich die 6te Achse an einer Stelle

 danke

tschüss schönes Wochenende
Gespeichert
burlibua
Moderator
Junior Member
*****
Offline Offline

Beiträge: 110


« Antworten #13 am: 07. März 2008, 21:26:24 »

Die Veränderung kommt mit dem Befehl  jpAktuell:=CJointT();Hier wird die aktuelle Position der Achsen abgefragt und die kann zum Zeitpunkt der Abfrage (im Auto / Fullspeed)  eine andere sein als beim Step by Step. Grund dafür ist daß der Befehl vom Hauptrechner bereits ausgeführt wird wenn der Achsrechner noch mit der Fertigpositionierung beschäftigt ist. Mit Zone fine wird
der Hauptrechner mit dem Achsrechner sychronisiert und es geht den genauen Weg.

OK Ende der Klugscheisserei Viel Spass

Gespeichert
Seiten: [1] Nach oben Drucken 
Roboterforum für Industrieroboter Anwender  |  Industrieroboter Helpcenter  |  ABB Roboter (Moderatoren: burlibua, Sven Weyer, rmac)  |  Thema: Befehl nur eine Achse drehen « vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.16 | SMF © 2006, Simple Machines Prüfe XHTML 1.0 Prüfe CSS