RobotStudio event

programming pipe welding using a single point

My name is George. I am a new user on the forum, forgive my English, but I need help.
Ok. My problem is that I want to program pipe welding through a single point, but when running the TCP program the tool does not stand still. ie robot makes unnecessary movements.  And I have, together with the positioner, the robot describes other movements. At the same time, in step mode at the point P_SVARKA2,P_SVARKA3, p_svarka4 the Coordinates in jogging do not coincide with the set values of the point. If you record these movements by points( commented in the program, everything is fine) How to cope with it? help please! help

 I have robot is IRB 4600 and  IRBP_L300_L1250_M2009_REV1_01 positioner.
Here is my program:
R is the pipe radius.
l is long from the center point to the weld.
My workobject has the following parameters:
Robot holds workobject False
moved by mechanical unit stn1
programmed false.
the center of the my workobject  and the direction of the axes coincide with the coordinate system of the positioner faceplate.
Axis x is directed upwards; axis Y is directed to the left.


    LOCAL VAR robtarget P_SVARKA1:=[[10,0,124],[0.332717,0.635377,0.400919,-0.569964],[-1,0,-1,0],[9E+9,9E+9,9E+9,9E+9,0,9E+9]];
    LOCAL VAR robtarget p_svarka2;
    LOCAL VAR robtarget p_svarka3;
    LOCAL VAR robtarget p_svarka4;
    LOCAL VAR robtarget p_svarka5;
    VAR num R;
    VAR num L;
    TASK PERS seamdata seam1:=[0,0,[0,0,0,0,0,0,0,0,0],0,0,0,0,0,[0,0,0,0,0,0,0,0,0],0,0,[0,0,0,0,0,0,0,0,0],0,0,[0,0,0,0,0,0,0,0,0],0];
    TASK PERS welddata weld1:=[10,0,[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0]];
    PROC R_TRUB2()
        actunit stn1;




        MoveJ Offs(P_SVARKA1,R+200,0,0),v200,z50,tweldgun\WObj:=Wbjstn2;
        ArcLStart P_SVARKA1,v200,seam1,weld1,fine,tWeldGun\WObj:=WbjSTN2;
        ArcC P_SVARKA2,P_SVARKA3,v200,seam1,weld1,z0,tweldgun\WObj:=Wbjstn2;
        ArcCend P_SVARKA4,P_SVARKA5,v200,seam1,weld1,fine,tweldgun\WObj:=Wbjstn2;
        !MoveC [[0.00,-10.00,124],[0.302898,0.131523,0.638947,0.694767],[-1,0,-1,0],[9E+9,9E+9,9E+9,9E+9,90,9E+9]], [[-10.00,-0.00,124],[0.705456,0.544804,0.358803,0.277093],[-1,0,-1,0],[9E+9,9E+9,9E+9,9E+9,180,9E+9]], v200, z10, tWeldGun\WObj:=WbjSTN2;
        !MoveC [[-0.00,10.00,124],[0.694767,0.638947,-0.131523,-0.302898],[-1,0,-1,0],[9E+9,9E+9,9E+9,9E+9,270,9E+9]], [[10.00,0.00,124],[0.277093,0.358803,-0.544804,-0.705456],[-1,0,-1,0],[9E+9,9E+9,9E+9,9E+9,360,9E+9]], v200, z10, tWeldGun\WObj:=WbjSTN2;




  • Problem solved using CalcJointT functions.

  • Hi,

    Your code was just about right.

    You need to move the offset so the welding torch stays in the same place relative to the rotating positioner.

    The orientation of the torch (relative to the rotating positioner ) also changes - but once you have used modify position to record the values at each of the 5 robtargets you can zero out the x,y,z as you will be using your varibles).

    I have tested the below modified version of your code in RobotStudio and the welding torch stays in one position while the work piece rotates below it.

    MODULE MainModule


       LOCAL VAR robtarget P_SVARKA1:=[[0,0,0],[0.530656,0.45786,-0.544881,-0.460297],[0,0,0,0],[12300,9E+9,9E+9,9E+9,0,9E+9]];

       LOCAL VAR robtarget p_svarka2:=[[0,0,0],[0.0497512,-0.0615331,-0.709045,-0.70071],[0,-1,0,0],[12300,9E+9,9E+9,9E+9,90,9E+9]];

       LOCAL VAR robtarget p_svarka3:=[[0,0,0],[0.460297,0.544881,0.45786,0.530656],[0,-1,0,0],[12300,9E+9,9E+9,9E+9,180,9E+9]];

       LOCAL VAR robtarget p_svarka4:=[[0,0,0],[0.70071,0.709045,-0.0615331,0.0497513],[0,-1,0,0],[12300,9E+9,9E+9,9E+9,270,9E+9]];

       LOCAL VAR robtarget p_svarka5:=[[0,0,0],[0.530656,0.45786,-0.544881,-0.460297],[0,-1,0,0],[12300,9E+9,9E+9,9E+9,360,9E+9]];

       VAR num R;

       VAR num L;

       PROC Main()

          !main routine




       PROC TestingWelds()



           actunit stn1;

          MoveJ Offs(P_SVARKA1,200+R,0,L),v1000,z50,tweldgun\WObj:=wobjRotator;

           ArcLStart offs(P_SVARKA1,R,0,L),v200,seam1,WD_6_LIN,z0,tWeldGun\WObj:=wobjRotator;

          ArcC offs(P_SVARKA2,0,-R,L),offs(P_SVARKA3,-R,0,L),v200,seam1,WD_6_LIN,z0,tWeldGun\WObj:=wobjRotator;

          ArcCend offs(P_SVARKA4,0,R,L),offs(P_SVARKA5,R,0,L),v200,seam1,WD_6_LIN,fine,tWeldGun\WObj:=wobjRotator;

          MoveJ Offs(P_SVARKA5,200+R,0,L),v1000,z50,tweldgun\WObj:=wobjRotator;

          DeactUnit STN1;



  • Thanks, graemepaulin, your code is really simpler.