1. Home
    1. Dashboard
    2. Search
  2. Forum
    1. Unresolved Threads
    2. Members
      1. Recent Activities
      2. Users Online
      3. Team Members
      4. Search Members
      5. Trophys
  3. Articles
  4. Blog
  5. Videos
  6. Jobs
  7. Shop
    1. Orders
  • Login or register
  • Search
This Thread
  • Everywhere
  • This Thread
  • This Forum
  • Articles
  • Pages
  • Forum
  • Blog Articles
  • Products
  • More Options
  1. Robotforum - Support and discussion community for industrial robots and cobots
  2. Forum
  3. Industrial Robot Support and Discussion Center
  4. KUKA Robot Forum
Your browser does not support videos RoboDK Software for simulation and programming
Visit our Mainsponsor
IRBCAM
Robotics Channel
Robotics Training
Advertise in robotics
Sponsored Ads

Robot with KP1 manipulators

  • Plc_User
  • December 14, 2019 at 11:24 PM
  • Thread is Unresolved
  • Plc_User
    Reactions Received
    2
    Trophies
    4
    Posts
    297
    • December 14, 2019 at 11:24 PM
    • #1

    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.

  • Online
    SkyeFire
    Reactions Received
    1,042
    Trophies
    12
    Posts
    9,388
    • December 16, 2019 at 3:25 PM
    • #2

    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.

  • Plc_User
    Reactions Received
    2
    Trophies
    4
    Posts
    297
    • February 26, 2020 at 10:52 AM
    • #3

    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.

  • Online
    panic mode
    Reactions Received
    1,267
    Trophies
    11
    Posts
    13,037
    • February 26, 2020 at 2:11 PM
    • #4

    Kss version?

    Synchronous ext axis?

    Program sample?

    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

  • Plc_User
    Reactions Received
    2
    Trophies
    4
    Posts
    297
    • February 26, 2020 at 10:17 PM
    • #5

    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..

  • Online
    SkyeFire
    Reactions Received
    1,042
    Trophies
    12
    Posts
    9,388
    • February 27, 2020 at 4:05 PM
    • #6

    Is this in Teach mode? Are you getting the message "Approximation not possible"?

  • Online
    panic mode
    Reactions Received
    1,267
    Trophies
    11
    Posts
    13,037
    • February 27, 2020 at 4:57 PM
    • #7

    what is the approximation distance used? are you SURE that value is set?

    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

  • Plc_User
    Reactions Received
    2
    Trophies
    4
    Posts
    297
    • February 28, 2020 at 2:08 PM
    • #8

    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.

    Code
    DEF RotateCil ()
    
    Int_RelStopRotCilPreheat = TRUE
    
    Int_RelPausRotCilPreheat = TRUE
    
    Int_RelEndRotCilPreheat=TRUE
    
    Int_RelChgRotCilPreheat=TRUE
    
    LOOP
    
    SWITCH CycleStep_PreheatKP1
    
    ;;;;;;;;;;;;;Preheat active;;;;;;;;;;;;;
    
    CASE 11
    
             PowerOnPreheat = TRUE
    
             XP_PREHEATPOSKP1.E2 = 120.0
    
    
    
             BASE_DATA[4] = OFFS_PREHEATSTARTACT
    
             $BWDSTART=FALSE
    
             LDAT_ACT=LCPDAT_PREHEAT
    
             FDAT_ACT=FP_PREHEAT
    
             LDAT_ACT.VEL = SPDROTATECILPREHEAT1_L
    
             LDAT_ACT.ACC = ACCROTATECILPREHEAT1_L
    
             LDAT_ACT.APO_DIST = 20
    
             LDAT_ACT.GEAR_JERK = JERK_ROTATECILPREHEAT1_L
    
             BAS(#CP_PARAMS,LDAT_ACT.VEL)
    
             $VEL_EXTAX[2] = SpdRotAxPreheatKP1
    
             LIN XP_PREHEATPOSKP1 C_DIS
    
    
    
             Cntr120DegPrehCilinder1 = Cntr120DegPrehCilinder1 +1
    
             CalcDataRotPos ()
    
             IF NegDirectionPreheatKP1 THEN
    
                CycleStep_PreheatKP1 = 13
    
                LogCycle (40013)
    
             ELSE
    
                CycleStep_PreheatKP1 = 12
    
                LogCycle (40012)
    
             ENDIF
    
    ;;;;;;;;;;;;;Preheat active;;;;;;;;;;;;;
    
    CASE 12
    
             PowerOnPreheat = TRUE
    
             XP_PREHEATPOSKP1.E2 = 240.0
    
    
    
             BASE_DATA[4] = OFFS_PREHEATSTARTACT
    
             $BWDSTART=FALSE
    
             LDAT_ACT=LCPDAT_PREHEAT
    
             FDAT_ACT=FP_PREHEAT
    
             LDAT_ACT.VEL = SPDROTATECILPREHEAT1_L
    
             LDAT_ACT.ACC = ACCROTATECILPREHEAT1_L
    
             LDAT_ACT.APO_DIST = 20
    
             LDAT_ACT.GEAR_JERK = JERK_ROTATECILPREHEAT1_L
    
             BAS(#CP_PARAMS,LDAT_ACT.VEL)
    
             $VEL_EXTAX[2] = SpdRotAxPreheatKP1
    
             LIN XP_PREHEATPOSKP1 C_DIS
    
    
    
             Cntr120DegPrehCilinder1 = Cntr120DegPrehCilinder1 +1
    
             CalcDataRotPos ()
    
             IF NegDirectionPreheatKP1 THEN
    
                CycleStep_PreheatKP1 = 11
    
                LogCycle (40011)
    
             ELSE
    
                CycleStep_PreheatKP1 = 13
    
                LogCycle (40013)
    
             ENDIF
    
    ;;;;;;;;;;;;;Preheat active;;;;;;;;;;;;;
    
    CASE 13
    
             PowerOnPreheat = TRUE
    
             XP_PREHEATPOSKP1.E2 = 0.0
    
    
    
             BASE_DATA[4] = OFFS_PREHEATSTARTACT
    
             $BWDSTART=FALSE
    
             LDAT_ACT=LCPDAT_PREHEAT
    
             FDAT_ACT=FP_PREHEAT
    
             LDAT_ACT.VEL = SPDROTATECILPREHEAT1_L
    
             LDAT_ACT.ACC = ACCROTATECILPREHEAT1_L
    
             LDAT_ACT.APO_DIST = 20
    
             LDAT_ACT.GEAR_JERK = JERK_ROTATECILPREHEAT1_L
    
             BAS(#CP_PARAMS,LDAT_ACT.VEL)
    
             $VEL_EXTAX[2] = SpdRotAxPreheatKP1
    
             LIN XP_PREHEATPOSKP1 C_DIS
    
    
    
             Cntr120DegPrehCilinder1 = Cntr120DegPrehCilinder1 +1
    
             CalcDataRotPos ()
    
             IF NegDirectionPreheatKP1 THEN
    
                CycleStep_PreheatKP1 = 12
    
                LogCycle (40012)
    
             ELSE
    
                CycleStep_PreheatKP1 = 11
    
                LogCycle (40011)
    
             ENDIF
    
    
    
    ENDSWITCH
    
    ENDLOOP
    
    $ADVANCE=0
    
    INTERRUPT OFF 14
    
    INTERRUPT OFF 13
    
    INTERRUPT OFF 15
    
    END
    Display More

    $STOPNOAPROX

  • Online
    panic mode
    Reactions Received
    1,267
    Trophies
    11
    Posts
    13,037
    • February 28, 2020 at 2:51 PM
    • #9

    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

  • Plc_User
    Reactions Received
    2
    Trophies
    4
    Posts
    297
    • February 28, 2020 at 6:00 PM
    • #10

    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}

  • Fubini
    Reactions Received
    272
    Trophies
    9
    Posts
    1,872
    • February 28, 2020 at 9:57 PM
    • #11

    Since it is a HA machine it also has absolute accuracy. Therefore also check load dat changes. You can not blend over load data changes in case of absolute accuracy.

    Fubini

  • Plc_User
    Reactions Received
    2
    Trophies
    4
    Posts
    297
    • February 29, 2020 at 10:12 AM
    • #12

    Load data is unchanged during the whole cycle.

  • Plc_User
    Reactions Received
    2
    Trophies
    4
    Posts
    297
    • March 2, 2020 at 1:24 PM
    • #13

    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?

  • Online
    SkyeFire
    Reactions Received
    1,042
    Trophies
    12
    Posts
    9,388
    • March 2, 2020 at 2:51 PM
    • #14

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

    I would try something like this:

    Code
    DEF E2Test()
    DECL E6POS _eTestPos
    DECL INT _nIndex
    DECL INT _nIncrement
    
    $ADVANCE=3
    _nIncrement = 1
    _eTestPos.E2 = 0
    
    ; PTP test
    PTP {E2 0}
    FOR _nIndex = 1 to 100
      _eTestPos.E2 = _eTestPos.E2 + _nIncrement
      PTP _eTestPos C_PTP
    ENDFOR
    
    ; LIN test
    PTP {E2 0}
    FOR _nIndex = 1 to 100
      _eTestPos.E2 = _eTestPos.E2 + _nIncrement
      LIN _eTestPos C_DIS
    ENDFOR
    
    ; PTP_REL Test
    PTP {E2 0}
    FOR _nIndex = 1 to 100
      _eTestPos.E2 = _nIncrement
      PTP_REL _eTestPos C_PTP
    ENDFOR
    
    ;LIN_REL test
    PTP {E2 0}
    FOR _nIndex = 1 to 100
      _eTestPos.E2 = _nIncrement
      LIN_REL _eTestPos C_DIS
    ENDFOR
    
    END
    Display More

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

  • Plc_User
    Reactions Received
    2
    Trophies
    4
    Posts
    297
    • March 2, 2020 at 3:23 PM
    • #15

    If the motions are as in my case only rotations of E2.
    What is the guideline for the value of the approximation distance for LIN-commands (with C_DIS)?

  • Online
    SkyeFire
    Reactions Received
    1,042
    Trophies
    12
    Posts
    9,388
    • March 2, 2020 at 3:44 PM
    • #16

    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

IRBCAM
Robotics Channel
Robotics Training
Advertise in robotics
Advertise in Robotics
Advertise in Robotics

Job Postings

  • Anyware Robotics is hiring!

    yzhou377 February 23, 2025 at 4:54 AM
  • How to see your Job Posting (search or recruit) here in Robot-Forum.com

    Werner Hampel November 18, 2021 at 3:44 PM
Your browser does not support videos RoboDK Software for simulation and programming

Tag Cloud

  • abb
  • Backup
  • calibration
  • Communication
  • CRX
  • DCS
  • dx100
  • dx200
  • error
  • Ethernet
  • Ethernet IP
  • external axis
  • Fanuc
  • help
  • hmi
  • I/O
  • irc5
  • IRVIsion
  • karel
  • kawasaki
  • KRC2
  • KRC4
  • KRC 4
  • KRL
  • KUKA
  • motoman
  • Offset
  • PLC
  • PROFINET
  • Program
  • Programming
  • RAPID
  • robodk
  • roboguide
  • robot
  • robotstudio
  • RSI
  • safety
  • Siemens
  • simulation
  • SPEED
  • staubli
  • tcp
  • TCP/IP
  • teach pendant
  • vision
  • Welding
  • workvisual
  • yaskawa
  • YRC1000

Thread Tag Cloud

  • abb
  • Backup
  • calibration
  • Communication
  • CRX
  • DCS
  • dx100
  • dx200
  • error
  • Ethernet
  • Ethernet IP
  • external axis
  • Fanuc
  • help
  • hmi
  • I/O
  • irc5
  • IRVIsion
  • karel
  • kawasaki
  • KRC2
  • KRC4
  • KRC 4
  • KRL
  • KUKA
  • motoman
  • Offset
  • PLC
  • PROFINET
  • Program
  • Programming
  • RAPID
  • robodk
  • roboguide
  • robot
  • robotstudio
  • RSI
  • safety
  • Siemens
  • simulation
  • SPEED
  • staubli
  • tcp
  • TCP/IP
  • teach pendant
  • vision
  • Welding
  • workvisual
  • yaskawa
  • YRC1000
  1. Privacy Policy
  2. Legal Notice
Powered by WoltLab Suite™
As a registered Member:
* You will see no Google advertising
* You can translate posts into your local language
* You can ask questions or help the community with your knowledge
* You can thank the authors for their help
* You can receive notifications of replies or new topics on request
* We do not sell your data - we promise

JOIN OUR GREAT ROBOTICS COMMUNITY.
Don’t have an account yet? Register yourself now and be a part of our community!
Register Yourself Lost Password
Robotforum - Support and discussion community for industrial robots and cobots in the WSC-Connect App on Google Play
Robotforum - Support and discussion community for industrial robots and cobots in the WSC-Connect App on the App Store
Download