Robot with KP1 manipulators

  • Our system is KRC4 8.5.7 HF1 and KR 90 R3100 extra HA, robot mounted on a non-Kuka track (but with Kuka-motor) and two KP1 positioners.
    Between the two positioners, a tube can be placed, so that the two positioners can continuously rotate the tube (the tub is in the center of the two positioners).
    The two postioners and the robot track are kinematically coupled to the robot.
    The purpose of the application is that the robot can weld a layer on the tube. This done by continuously rotating the tube while the robot slowly moves from one side of the
    tube to the other. What is the prefered way to program this application : make the KP1's rotate continuously (in master-slave) and meanwhile the robot moves from one side to another, creating a
    weld pattern in a spiral shape. All axes are kinematically coupled.

  • That's very vague.


    If the spiral is of constant pitch, you could potentially program the entire spiral with a single motion command. For example, for a spiral of 10mm/deg, 1 meter long, you could use something like LIN {X 1000, E1 100}. This assumes the X axis is along the length of the tube, and E1 is the KP1s rotational axis.


    OTOH, if your spiral requires multiple revolutions of E1, you might need to use a series of LINs or LIN_RELs, because the "natural" behavior of an Endless rotational axis is to jump to the nearest multiple of 360deg -- that is, if E1 is at 0 deg, and you command it to {E1 361}, E1 will only move 1deg, because the physical endpoint is the same.

  • We have now already programmed this. It is a spiral that contains multiple rotations of the external axis.
    I repeat lin motions where I rotate the external axis each time 120° further while moving the robot along its track.
    This works fine.
    But now we also need an application where the robotaxes and its track will stay stationary during multiple complete rotations of the external axis. The problem I observe is that now the motion of the external axis is not continues anymore : it stops shortly every 120° of rotation. I don't have that stopping if there is also some motion of the robotaxes (even if f.i. the x-axis moves only 0.001 mm / rotation). I understand that there is no approximation possible if you go from one point to another point if X,Y, Z of that point are the same. What is the proposed solution for my case : robotaxes and its track stationarry, but external axis rotating multiple turns without any intermediarry stoppings.

  • The system is KRC4 8.5.7 HF1.
    The external axis for the manipulator is synchronous when the application is run.
    I don't have the exact program at the moment, but basically I loop through three LIN motions, continuous (C_DIS suffix).
    e.g. LOOP

    LIN P1 C_DIS
    LIN P2 C_DIS
    LIN P3 C_CIS

    END_LOOP
    P1,P2,P3 are E6POS variables, that have all identical values, except that
    P1.E2 = 0.0, P2.E2 = 120.0 and P3.E2 = 240.0, where E2 is the external axis of the manipulator that must rotate.
    $ADVANCE is set to 3.
    The motion (only rotation of E2) behaves just like the C_DIS was ommited (rotation comes to a stop after reaching P1,P2,P3 and then starts again towards next point..

  • The approximation distance should be 20 mm.


    Underneath is the subroutine that is active when the manipulator is rotating.
    I tested in T2-mode and already set $STOPNOAPROX to true,
    but I get no message that approximation is not possible.
    So it does not seem that the advance run pointer is stopped.


    $STOPNOAPROX

  • what is the value of $ADVANCE?

    what is the declaration of PowerOnPreheat (signal?)

    what is the declaration of CycleStep_PreheatKP1 (signal?)

    what is the declaration of NegDirectionPreheatKP1 (signal?)

    1) read pinned topic: READ FIRST...

    2) if you have an issue with robot, post question in the correct forum section... do NOT contact me directly

    3) read 1 and 2

  • The value of $ADVANCE IS 3.
    It is set explicitly before the subroutine RotateCil() is called : $ADVANCE=3.

    After that instruction there are no other assignments to $advance before entering 'RotateCil()'.
    On the KCP I also see its value at 3 when executing RotateCil().

    PowerOnPreheat , CycleStep_PreheatKP1 and NegDirectionPreheatP1 are defined as global variables in a Dat-file.
    DECL GLOBAL BOOL PowerOnPreheat=FALSE
    DECL GLOBAL INT CycleStep_PreheatKP1=12
    DECL GLOBAL BOOL NegDirectionPreheatKP1=FALSE


    If BASE_DATA[4] is not changing during execution of the loop in RotateCil, the motion stops shortly every 120° of E2-rotation. If f.i. the X-value changes slightly (even if its only 0.001 mm every new LIN execution) the rotation is not stopped.
    BASE_DATA[4] is the base used in the LIN-motions

    DECL GLOBAL FDAT FP_PREHEAT={TOOL_NO 1,BASE_NO 4,IPO_FRAME #BASE,POINT2[] " ",TQ_STATE FALSE}

  • Can I conclude that in my example as posted before :


    LOOP

    LIN P1 C_DIS

    LIN P2 C_DIS

    LIN P3 C_CIS

    END_LOOP

    P1,P2,P3 are E6POS variables, that have all identical values, except that

    P1.E2 = 0.0, P2.E2 = 120.0 and P3.E2 = 240.0, where E2 is the external axis of the manipulator that must rotate.

    $ADVANCE is set to 3 and load data is not changed.


    That the motion of the external axis will stop shortly every time P1,P2 or P3 is reached?

  • For that code, the motion should be continuous. There's no obvious reason for the behavior you describe.


    I would try something like this:

    Try different settings of _nIncrement and see if/how the motion behavior changes.

  • If you're only moving E2, why not use PTP? Are you using an interpolated motion?


    The value of $APO depends on your requirements, and the configuration of your axes. A small value might work for low-inertia conditions, but for situations with high inertia or axes that require long accel/decel ramps, the path planner might have to reduce speed before reaching the approximation radius (in other words, the acceleration distance exceeds the $APO value).


    The quick answer would be to try your test program with different $APO values and see if increasing them makes a difference.


    Also, since E2 is kinematically integrated, it's possible that your limiting factor might be $APO.CORI, rather than CDIS -- depending on your configuration of E2 relative to your TCP, the path planner might be seeing the E2 motion as a change in TCP orientation, rather than position.

Advertising from our partners