Applying RelTool when Calculating Positions from a RobTarget

AlanAutoTech
AlanAutoTech Greenville, S.C
Morning Forum members,
Subject tile relates primarily to needing to apply rotational values against a robtarget. i have a Taught point and calculate another Point that has no rotational values needed to obtain the center of a Part (for instance). Next i need to add parts to this application using the Center and applying Trans.X,Y,Z and some RZ to create a New Point, however the Reltool() is not applying the robconfig im asking for.
the source values are staying the Same for the rot and robconf , so im stumped on what i am doing wrong.
 at present i have the lines of code broken out to attempt to understand my issue and should be able to just apply it all in the RelTool() function.

                pLocPoint_RHPallet{1,1}:=pLocPoint{nPntPalletCtr_RH};
                pLocPoint_RHPallet{1,1}.trans.x:=pLocPoint{nPntPalletCtr_RH}.trans.X+(nCaseWidthValue+nHalfCaseWidth);
                pLocPoint_RHPallet{1,1}.trans.Y:=pLocPoint{nPntPalletCtr_RH}.trans.Y+(nHalfCaseLength);
                pLocPoint_RHPallet{1,1}.trans.Z:=pLocPoint{nPntPalletCtr_RH}.trans.Z;
                pLocPoint_RHPallet{1,1}:=RelTool(pLocPoint_RHPallet{1,1},0,0,0\RX:=0\RY:=0\RZ:=90);


Thanks for any help,
Alan Cannon

Comments

  • lemster68
    lemster68 United States ✭✭✭
    Single step through each instruction, observe the values that are being calculated before making the next step.  Debugging in this fashion is often times the best way to get to that "aha" moment.
    Lee Justice
  • lemster68
    lemster68 United States ✭✭✭
    I am looking at this once more, put the original points rot into the array robtarget, then try the reltool.
    Lee Justice
  • AlanAutoTech
    AlanAutoTech Greenville, S.C

    this (destination{1,1):=source) does that.. im not following you thought

  • lemster68
    lemster68 United States ✭✭✭
    I got focused on this: "Point that has no rotational values needed".  I was thinking you were not putting the rot values in.  Not needed, but yes, your first line will put the rot value into the array.  SO Execute the first line in step mode, look at the array index position value, make sure that it matches.  Then go step by step, checking values each time to see that they match what you expect.  If not, that is what you have to figure out why.

                    pLocPoint_RHPallet{1,1}:=pLocPoint{nPntPalletCtr_RH};  ! this is an array position also?  Are you sure where it is pointing?
                   You could also just do this:
                    pLocPoint_RHPallet{1,1}.trans.x:=pLocPoint_RHPallet{1,1}.trans.x+(nCaseWidthValue+nHalfCaseWidth);
                    pLocPoint_RHPallet{1,1}.trans.Y:=pLocPoint_RHPallet{1,1}.trans.y+(nHalfCaseLength);
                    This next one is not necessary, you already wrote in the z value.
                    pLocPoint_RHPallet{1,1}.trans.Z:=pLocPoint{nPntPalletCtr_RH}.trans.Z;
                    pLocPoint_RHPallet{1,1}:=RelTool(pLocPoint_RHPallet{1,1},0,0,0\RX:=0\RY:=0\RZ:=90);

    Lee Justice
  • AlanAutoTech
    AlanAutoTech Greenville, S.C
    ok i will line test these as soon as i can get past:
    50419: Common base_frame error
    Description
    Task: Task1.
    The Base Frame is moved by another task than the robot and could not be solved, reason 5:
    1. SingArea\Wrist not supported with MoveC.
    2. The Base Frame must be moved by first synchronized motion_group.
    3. Only one common Base Frame can be handled.
    4. Absolute Accuracy not supported with MoveC.
    5. The common Base Frame can only be solved in synchronized move.
    Program ref. /TeachCellPoints/TeachWorkObj3point_RHPallet/MoveJ/439.
    Actions
    1. Use SingArea\Off. The CirPathMode can also be used.
    2. Check Controller and Motion configuration.
    3. Use MoveL or remove Absolute Accuracy.
    4. Use MoveAbsJ.


    My Entire app has a File:
    MODULE Constants(SYSMODULE)
        !*****************************************************************************
        !*****************************************************************************
        ! PROJECT:       0972 -Pactive  
        !
        ! RELEASE DATE:  03/03/2021
        !
        ! WRITTEN BY:    Alan Cannon -
        !                Cannon Control Concepts
        !                4 Windrow Lane
        !                Fountain inn, S.C 29644
        !                http://www.CannonControls.Com
        !                    Phone: 864-201-9261
        !*****************************************************************************
        !Notes: Adaptation from Template v13 to accommodate this Process
        !**********************   Start DEFINITIONS   **********************************    
      ! Robot Commands
        VAR num nNoCmd:=0;
        VAR num nCmdPick:=1;
        VAR num nCmdLabel:=2;
        VAR num nCmdPlace:=3;
        VAR num nCmdNewPallet:=4;
        VAR num nCmdPark:=15;
        VAR num nMaxPickIndex:=2;
        VAR num nMaxPlaceIndex:=4;   
        
        ! Robot Speed data
        VAR num gVelocity:=1000;
        VAR num gLargeBlendZone:=100;
        VAR num gSmallBlendZone:=10;
        PERS speeddata gFastSpeed;
        PERS speeddata gSlowSpeed;
        PERS speeddata gFineSpeed;    
        
        ! PartData
        VAR dnum nPartPicked:=1;

        ! Pallet Data
        VAR num nPalletWidth:=1828.8;
        VAR num nPalletLength:=1828.8;
        VAR num nPalletHeight:=101.6;
        
        ! Gripper Commands
        VAR dNum nGripperStatus:=0;    
        VAR dNum nGripCloseCmd:=1;
        VAR dNum nGripOpenCmd:=2;
        VAR dnum nGripperOpen :=1;
        VAR dnum nGripperClosed:=2;
        
        !Returns
        VAR dnum nNothing:=0;
        VAR dnum nSuccess:=1;
        VAR dnum nFail:=99;
        
        ! Cell Movement Constructs
        CONST num nSafeRadius:=900;
        CONST num nSafeZ:=-800;
        
        ! Point Array Modifiers
        VAR num nPntPickLH:=1;
        VAR num nPntPickRH:=2;
        VAR num nPntLabelLH:=3;
        VAR num nPntLabelRH:=4;
        VAR num nPntPalletPos_LH:=5;
        VAR num nPntPalletPos_RH:=6;
        VAR num nPntPalletLH:=7;
        VAR num nPntPalletRH:=8;
        VAR num nPntPalletCtr_LH:=9;
        VAR num nPntPalletCtr_RH:=10;
        VAR num nPntSpare11:=11;
        VAR num nPntSpare12:=12;
        VAR num nPntSpare13:=13;
        VAR num nPntSpare14:=14;
        VAR num nPntSpare15:=15;
        VAR num nPntSpare16:=16;
        VAR num nPntSpare17:=17;    
        VAR num nPntPalletFrameLH_Origin:=18;
        VAR num nPntPalletFrameLH_X:=19;
        VAR num nPntPalletFrameLH_Y:=20;
        VAR num nPntPalletFrameRH_Origin:=21;
        VAR num nPntPalletFrameRH_X:=22;
        VAR num nPntPalletFrameRH_Y:=23;
        VAR num nPntSpare24;
        VAR num nPntPark:=25;
        VAR num nPntSpare26:=26;
        VAR num nPntSpare27:=27;
        VAR num nPntSpare28:=28;
        VAR num nPntSpare29:=29;    
        VAR num nPntZero:=30;
        
        VAR num nApproPickLH:=1;
        VAR num nApproPickRH:=2;
        VAR num nApproLabelLH:=3;
        VAR num nApproLabelRH:=4;
        VAR num nApproPalletPos_LH:=5;
        VAR num nApproPalletPos_RH:=6;
        VAR num nApproPalletLH:=7;
        VAR num nApproPalletRH:=8;
        VAR num nApproPalletCtr_LH:=9;
        VAR num nApproPalletCtr_RH:=10;
        VAR num nApproSpare11:=11;
        VAR num nApproSpare12:=12;
        VAR num nApproSpare13:=13;
        VAR num nApproSpare14:=14;
        VAR num nApproSpare15:=15;
        VAR num nApproSpare16:=16;
        VAR num nApproSpare17:=17;    
        VAR num nApproPalletFrameLH_Origin:=18;
        VAR num nApproPalletFrameLH_X:=19;
        VAR num nApproPalletFrameLH_Y:=20;
        VAR num nApproPalletFrameRH_Origin:=21;
        VAR num nApproPalletFrameRH_X:=22;
        VAR num nApproPalletFrameRH_Y:=23;
        VAR num nApproSpare24;
        VAR num nApproPark:=25;
        VAR num nApproSpare26:=26;
        VAR num nApproSpare27:=27;
        VAR num nApproSpare28:=28;
        VAR num nApproSpare29:=29;    
        VAR num nApproZero:=30;      
        
        ! EOAT Modifiers    
        VAR num nToolWidth :=41.274;
        VAR num nToolHeight:=95.36;    
        
        ! Pallet Point Modifiers
        VAR num nLayerHeight :=196.8;
        VAR num nRowSpacing:=133.35;
        VAR num nColumnSpacing :=304.8;
     
    !**********************   End DEFINITIONS   **********************************     
    ENDMODULE

  • lemster68
    lemster68 United States ✭✭✭
    Can you post your Backinfo file please?
    Lee Justice
  • Danijel_Cro
    Danijel_Cro Germany
    Hi Alan,

    If I use your code in RobotStudio, the function is running. Only thing I cant test is "pLocPoint{nPntPalletCtr_RH}", array part.
    I cant figure out the definition of nPntPalletCtr_RH.

    But if for the test purposes I use

        pLocPoint_RHPallet{1,1}:=pLocPoint{1,1};
        pLocPoint_RHPallet{1,1}.trans.x:=pLocPoint{1,1}.trans.X+(nCaseWidthValue+nHalfCaseWidth);
        pLocPoint_RHPallet{1,1}.trans.Y:=pLocPoint{1,1}.trans.Y+(nHalfCaseLength);
        pLocPoint_RHPallet{1,1}.trans.Z:=pLocPoint{1,1}.trans.Z;
        pLocPoint_RHPallet{1,1}:=RelTool(pLocPoint_RHPallet{1,1},0,0,0\RX:=0\RY:=0\RZ:=90);

    Everything is working!!

    Also try using following example
        destination:=source;
        destination.trans.x:=destination.trans.X+(nCaseWidthValue+nHalfCaseWidth);
        destination.trans.Y:=destination.trans.Y+(nHalfCaseLength);
        destination.trans.Z:=destination.trans.Z;
        destination:=RelTool(destination,0,0,0\RX:=0\RY:=0\RZ:=90);

    So in your case it would be
        pLocPoint_RHPallet{1,1}:=pLocPoint{nPntPalletCtr_RH};
        pLocPoint_RHPallet{1,1}.trans.x:=pLocPoint_RHPallet{1,1}.trans.X+(nCaseWidthValue+nHalfCaseWidth);
        pLocPoint_RHPallet{1,1}.trans.Y:=pLocPoint_RHPallet{1,1}.trans.Y+(nHalfCaseLength);
        pLocPoint_RHPallet{1,1}.trans.Z:=pLocPoint_RHPallet{1,1}.trans.Z;
        pLocPoint_RHPallet{1,1}:=RelTool(pLocPoint_RHPallet{1,1},0,0,0\RX:=0\RY:=0\RZ:=90);

    If this is not working, then I would say its the issue in line
    "pLocPoint_RHPallet{1,1}:=pLocPoint{nPntPalletCtr_RH};"
    Or later on in program..

    Please report if you fixed it, and what was the issue.

    Thanks

    Danijel
    "We're more aware of simple processes that don't work well than of complex ones that work flawlessly"

  • AlanAutoTech
    AlanAutoTech Greenville, S.C
    Afternoon, And thanks for assisting. At tpresent the Issue is when i attempt to goto these positions from the Pallet Center is says nope Out of reach. I can Jog directly there which for this conversation it is \Rz:=+90 and a Slight x and Y
    I can use the Goto from this position back to the Center and that works as well..

    To step back a little. my Original Config (Inverted and on a Rail (MOC) file data was incorrect causing the original thread o start, but i fear i still have some addditional issue i am un aware of causing my plight

  • Danijel_Cro
    Danijel_Cro Germany
    Hi Alan,

    Jog and move instruction is not the same, also the movement of the robot is not the same if you use MoveJ, MoveL or MoveC.
    From your post, I would say that you can complete move with MoveJ, and I guess that with MoveL/MoveC instructions robot would need to go out of the Axis limits to complete the move. Which is not possible, so he gives error.

    Best regards,
    Danijel
    "We're more aware of simple processes that don't work well than of complex ones that work flawlessly"