20. März 2019, 18:34:47
Roboterforum.de - Die Industrieroboter- Anwender und Experten Community

[gelöst] Achsen über eine Schleife durchschalten


normal_post Autor Thema: [gelöst] Achsen über eine Schleife durchschalten  (Gelesen 209 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

05. Februar 2019, 08:47:31
Gelesen 209 mal
Offline

yuminist


Guten Morgen,

ist es möglich, einzelne Achsen über eine Schleife "durchzuschalten"?

Um das ganze zu verdeutlichen:
Die Grundidee dahinter sieht vor, statt jede Achse einzeln anzusteuern, Achsen 1-6 eine (gleiche) bestimmte Bewegung durchführen zu lassen.

        FOR i FROM 1 TO 6 DO
            !Move every regular axis: +10°, -20°, +10°
            jtLocal.robax.rax_+ValToStr(i):=pLocal.robax.rax_+ValToStr(i)+10;
        ENDFOR

Funktioniert so natürlich nicht da der Ausdruck "jtLocal.robax.rax_" unvollständig ist und die Anweisung ValToStr ihn so auch nicht vervollständigen kann. Allerdings fällt mir auch keine Vorgehensweise ein dies zu korrigieren.
Daher die Grundlegende Frage ob es überhaupt machbar sei.

Danke für eure Zeit
« Letzte Änderung: 07. Februar 2019, 14:16:01 von yuminist »
  • gefällt mir    Danke

Heute um 18:34:47
Antwort #1

Werbung

Gast

05. Februar 2019, 11:08:03
Antwort #1
Offline

Micky


Hallo,
leider ist es ist nicht möglich die einzelnenen Elemente eines Record über einen String zusammen zu bauen.

Du solltest für die Berechnung eine Hilfsfunktion verwenden, die wie folgt aussehen könnte:


FUNC jointtarget OffsJointT(jointtarget joint, num AxisNo, num Offset)
VAR jointtarget jtNew;

jtNew := joint;

!* Calculate new position
TEST AxisNo

CASE 1:
    jtNew.robax.rax_1 := joint.robax.rax_1 + Offset;
CASE 2:
    jtNew.robax.rax_2 := joint.robax.rax_2 + Offset;
CASE 3:
    jtNew.robax.rax_3 := joint.robax.rax_3 + Offset;
CASE 4:
    jtNew.robax.rax_4 := joint.robax.rax_4 + Offset;
CASE 5:
    jtNew.robax.rax_5 := joint.robax.rax_5 + Offset;
CASE 6:
    jtNew.robax.rax_6 := joint.robax.rax_6 + Offset;
CASE 7:
    jtNew.extax.eax_a := joint.extax.eax_a + Offset;
ENDTEST

RETURN jtNew;

ENDFUNC

PROC MyTest()
  VAR jointtarget jtStart;
  VAR jointtarget jtCurrent;
 
  jtStart:=CJointT();
 
  FOR i FROM 1 TO 6 DO
     jtCurrent:=OffsJointT(jtStart,i,10);
     MoveAbsJ jtCurrent,v100,z0,tool0;
  ENDFOR
 
ENDPROC


Mfg
Micky
Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind. (Albert Einstein)

05. Februar 2019, 11:31:36
Antwort #2
Offline

yuminist


Vielen Dank für die Antwort.

Tatsächlich habe ich mir als Behelf folgendes zusammengebaut

PROC RotJoint(\switch Conc,\identno ID,\switch NoEOffs,num nJoint,num nDeltaAngle,Speeddata Speed,\num V|num T,Zonedata Zone,\Stoppointdata Inpos,PERS Tooldata Tool,\PERS wobjdata WObj)
        VAR jointtarget jtCurrent;
        VAR num nActAngle;
        jtCurrent:=CJointT();

        TEST nJoint
        CASE 1:
            jtCurrent.robax.rax_1:=jtCurrent.robax.rax_1+nDeltaAngle;
            nActAngle:=jtCurrent.robax.rax_1;
        CASE 2:
            jtCurrent.robax.rax_2:=jtCurrent.robax.rax_2+nDeltaAngle;
            nActAngle:=jtCurrent.robax.rax_2;
        CASE 3:
            jtCurrent.robax.rax_3:=jtCurrent.robax.rax_3+nDeltaAngle;
            nActAngle:=jtCurrent.robax.rax_3;
        CASE 4:
            jtCurrent.robax.rax_4:=jtCurrent.robax.rax_4+nDeltaAngle;
            nActAngle:=jtCurrent.robax.rax_4;
        CASE 5:
            jtCurrent.robax.rax_5:=jtCurrent.robax.rax_5+nDeltaAngle;
            nActAngle:=jtCurrent.robax.rax_5;
        CASE 6:
            jtCurrent.robax.rax_6:=jtCurrent.robax.rax_6+nDeltaAngle;
            nActAngle:=jtCurrent.robax.rax_6;
        CASE 7:
            jtCurrent.extax.eax_a:=jtCurrent.extax.eax_a+nDeltaAngle;
            nActAngle:=jtCurrent.extax.eax_a;
        DEFAULT:
            TPWrite "Ungültige Parameter!";
            RETURN ;
        ENDTEST

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

Das ganze wird Systemweit geteilt und dann über

RotJoint i,10,vTurn,fine,tLocal\wobj:=wLocal;
aufgerufen. Funktioniert soweit auch - dann wird aus meinem Not-Behelf wohl eine Routine in der Bibliothek :D
  • 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