z_rot

  • Hi all,


    i have a S4C 64Z. It grips wheels with a triple pliers. In the put down routine, the prog make a z axis rotation, depends of the campaign etc... For now, this rot is 0 or 90°. The problem is, when this rotation is 90°, the 6th axis make a 180° compared with the take position, and i want to "cancel" this rotation. I tried to write the rotation for -90°, but the robot blocks. I took a look in MMC file, and i found


    "attribute_id "limitrot" -text_id 3,360 -present_type "SIMPLE"\"


    Is my problem here ? Maybe the robot is limited in a 0-360 scale and i need -180 , 180 scale ?


    What you think about that ?


    Thanks in advance

  • MMC is basically linked to what you see/do on the pendant (Man-Machine Control/Configuration), so no, that's not it.



    Without seeing your code it's hard to know what's going on (can you post the code for that section), are you using RELTool to change the rotation ?



    What's most likely going on is that you're rotating the position but maintaining the conf-data of your position.


    Check out "confdata" under datatypes in the manual https://library.e.abb.com/publ…050d684/3HAC044398-en.pdf
    Very simplified, your pose (XYZ) tells the robot where to go in space, your orient tells it how the tool should be positioned in space and your confdata tells it how to get there mechanically.
    Many robots have a way of reaching the same position/tool configuration in multiple ways and confdata is what makes the robot still look like a robot when it gets there v.s. a run-over erector set.


    Take Ax.6 for example, you can reach a position with Ax.6 @ 0 degrees, 360 degrees or -360 degrees and it's the exact same position (XYZ), confdata makes sure you don't snap any cables....


    Given that you have a palletizer (64z= IRB640), ax.6 is always facing down, so it's fairly easy to resolve this issue.
    Rather than offsetting the position/rotation (wobj or reltool) I'd re-calculate a new position and push the rotation.
    To do that you need to take your position and convert it to jointtarget i.e. myJointT:=CalcJointT(myRobTarget, myTool \WObj:=myWobj);
    Then feed the new value into the jointtarget i.e. myJointT.robax.rax_6:=nMyNewValue;
    Then recalculate it back to a robtarget i.e. myTempRobT:=CalcRobT(myJointT, myTool \WObj:=myWobj);



    This will most likely need some tweaking to work depending on the rest of your program (post it if you want us to help you), but it should get you started (don't forget to declare your variables).




    EDIT - I'm sure someone will suggest to turn ConfL/Off; Which may work, but personally I wouldn't use it since the solution is easy in your case.
    Additionally - I've been on numerous "my robot isn't working, it's not accurate" calls only to find out that people are doing weird offsets and forcing the robot to go there with ConfL/Off, only to change the confdata to what it should be (in order to represent the actual configuration) and the position is spot on.
    So, the correct confdata isn't just to make it look pretty, it does affect positioning / accuracy / calculations too....



    Edited once, last by SAABoholic ().

  • Thanks SAABoholic, i will try your idea. Here is my prog


    reference pos is : PERS robtarget p_PoseRoue:=[[0,0,0],[0,0.707107,-0.707107,0],[-2,0,-2,0],[0,9E+09,9E+09,9E+09,9E+09,9E+09]];


    and the routine :


    PROC AvantPoseRoue()
    VAR num EntraxePince;
    VAR num AnglePince;


    !** Affectation repere de travail **!
    !** et attente autorisation depose**!
    wo_Travail:=wo_PalB;
    TesteInfo e_AutoPoseG,1,"Abscence d'autorisation de depose roues!"\TempsMax:=360;
    !**Acquisition valeur de DEC du point de pose roue**
    p_travail:=p_PoseRoue;
    p_travail:=Offs(p_PoseRoue,OffsPasse{n_CptPasse,1},OffsPasse{n_CptPasse,2},0);
    p_travail:=RelTool(p_travail,0,0,0\Rz:=OffsPasse{n_CptPasse,3});
    p_travail.extax.eax_a:=OffsPasse{n_CptPasse,4}-ENTRAXE_PINCES;
    !
    ENDPROC


    {n_CptPasse,3} = 0 or 90, but i want to replace 90 by -90


  • {n_CptPasse,3} = 0 or 90, but i want to replace 90 by -90


    Do you want it to be -90, or is -90 a way to try and circumvent the robot from moving 180 degrees when it reached 90 ?


    With "my" method you don't have to fix a problem because there won't be one to begin with :icon_wink:


  • The program work with 90° reltool offset, but i want it works with -90° (because the robot makes a 180 movement since the take pose, and i won't, it's useless) but conf is not good

  • Hi again.


    PERS num NbCouche:=21;
    PERS num DiamRoue:=435;
    PERS num LargRoue:=191;
    PERS num HautRoue:=152;
    PERS num GalbeRoue:=2;
    PERS num PoidsRoue:=9.69;
    PERS num EpaisInter:=4;
    PERS num LongInter:=1360;
    PERS num LargInter:=1150;
    PERS num EpaisPal:=164;
    PERS num LongPal:=1340;
    PERS num LargPal:=1134;
    PERS num DecalPal:=0;
    PERS num NbPasse:=3;
    PERS num OffsPasse{4,4}:=[[450,0,90,342],[0,240,90,480],[-450,0,90,342],[0,0,0,0]];
    PERS dionum Px_Pinces{4,3}:=[[1,0,1],[1,1,0],[1,0,1],[0,0,0]];
    PERS dionum InterSommet:=0;
    PERS dionum InterPal:=0;
    PERS string NomRoue:="179X";
    PERS string NomInter:="W (EUWA16)";
    PERS string NomPal:="P(ACIER_GP)";
    PERS string NomCamp:="179X / V1";


    Here is an example of DATA of a campaign. 2 first arg of OffsPasse are for X and Y, the third is for Z Rot and last is for external axis (mobile pliers)
    with a rot of +90°, it works, but the 6th axis do a 180° between catch position, and take off position. This rotation is useless, so my idea was to change 90 by -90, to make the robot take off the wheels with the same position of 6th axis than in catch position.


    I hope to be clear


    If you have a mailbox, maybe i can send you some files


    edit: oh... i forgot to put "p_travail:=RelTool(p_travail,0,0,0\Rz:=OffsPasse{n_CptPasse,3});" in comment, think i found my problem haha

    Edited once, last by simont14 ().

Advertising from our partners