Recommendations to search a part?

  • Hi all,


    Old KR180PA KRC2 robot with windows 95 operating system. (I have no more information about the robot by now).


    I'm doing a palletizing application, once the pallet is full I need to put a cardboard cover on top of the pallet itself.


    That cardboard cover comes from another pallet the operators put inside the machine.


    The height of that cardboard sheet pile is not always the same as they load it manually, so I have to search the cardboard sheets using the robot.


    The robot gripper has several sensors and I can use two of them (to have some sort of redundancy) to slow down the robot and two of them (again, redundancy) to stop it completely.


    • I've thought of moving the robot to the top position (the highest "legal" position).
    • Reduce the torque allowed in the 2nd and 3rd axis.
    • Start a movement to the bottom of the pallet at high speed.
    • Once the first interruption happens (we are getting close to the part) then I could use BREAK to stop the robot and start a new movement. => Maybe it would be better to change the $OV_PRO variable lower the speed without damaging the robot.
    • Once the second interruption happens (we must stop) I could call BREAK and stop the robot.


    This said... do you think it is a good approach to find the parts?


    Is there any better way to replace one movement for another during a search without using BRAKE?


    As always thank you in advance.

  • Your approach sounds about right.


    Make a high-speed move that is interrupted by the long-range sensor pair (probably OR'd together in a $CYCFLAG), then use BRAKE and RESUME to terminate the high-speed motion. Then make a lower-speed search with an Interrupt based on the actual contact sensors. Followed by, again, a BRAKE and RESUME to terminate the search motion.


    Given the way that Interrupts behave in KRL when RESUME is used, you need to ensure you arrange your programs correctly. So, your Main program would move the robot to the Search Start position, and Declare the Interrupts. Then, call a Fast Search subroutine that would have the rapid motion to the bottom of the pallet. Fast Search would also turn on the Interrupts. When the interrupt fires, the Interrupt Service Routine needs to turn the Interrupt Off to prevent double-triggering, use BRAKE to halt the robot's physical motion, then use RESUME to clear the motion buffer and jump the program pointer back into Main, one line after the call to Fast Search.


    In Main, the call to Fast Search would be followed by a check to see if the Interrupt had been fired (basically, check for an empty pallet, or some other sensor failure that didn't result in a physical collision), and then by a call to the Slow Search subroutine (which would probably look just like Fast Search, but with slower motions, and an interrupt based on the contact sensors, rather than the long-range sensors).


    The Search routines should end with INTERRUPT OFF commands, and a WAIT FOR TRUE or WAIT SEC 0, to ensure the Advance Run Pointer can't get back into Main before the interrupt handling has been completed.

  • Hi all

    I've exactly the same project but i can't make search option, I checked this forum prepared program as directed but during working when I have input signal from sensor i have many error


    I made with this instructions:

    MAIN PROGRAM SEARCH PROGRAM (interrupt is declared here)

    MOTION PROGRAM (contains almost nothing but INTERRUPT ON and the motion command to carry out the search physical motion)

    INTERRUPT PROGRAM (contains INTERRUPT OFF, BRAKE, and RESUME) MAIN calls SEARCH, which calls MOTION.

    INTERRUPT disarms the Interrupt (INTERRUPT OFF), halts the motion (BRAKE), then sends the program pointer back to SEARCH, one line after the call to MOTION. could you help?


  • I've exactly the same project but i can't make search option, I checked this forum prepared program as directed but during working when I have input signal from sensor i have many error

    WHAT errors? How can we help if you don't tell us what the errors are? Be specific.


    Your program is declaring Interrupt 11 in SEARCH -- this must take place in MAIN.


    MOVEP should end with a WAIT FOR TRUE or WAIT SEC 0, to ensure the Advance Run Pointer cannot return to Main before the Interrupt fires.

  • Is it also possible to program the searching of a part without using external sensors?
    I mean, the robot is able to identify if it hits something... the motor torque goes up. But is this useable? Maybe my parts are crushed long before the motor torque senses an obstacle.


    I would also like to approach pile of cardboard and sense when I am able to grab one sheet.

    Since I use vacuum cups I can turn on the vaccuum generator at the start of the seach, approach the parts slowly and when getting a trigger from the vacuum sensor I could stop the search.


    The original post requires the movement to be in two stages... a fast search to get close and then switch to a slower approach for the pick up. I might get away with going slow all the way.

  • pretty much as usable as parking car blindfolded. car engine will detect higher torque when you collide with something. and you better move slow.

    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

  • I cannot get an interrupt to become active.

    I can see from Display > Digital Inputs that the trigger Input 16 is really coming on... and it really is OFF in the beginning.


    I use the simplest textbook example.



    I test it in T1 mode... and the program acts like the interrupt doesn't exist... not stopping, no message...
    What is a real copy-paste sample KRL code that definitely works.

  • and what textbook may that be?


    1. how do you expect robot to process motions inside ISR program UP1() when there are active motions in main program that are not interrupted with use of BRAKE command?

    2. interrupt is enabled way too early, even during BCO. this should only happen AFTER reaching start of search path.

    3. ALL interrupts are activated. this is something to use VERY carefully. if unsure only activate YOUR interrupt.

    4. unclear how search is done but if you expect to abandon searching motion and go to other point, use of RESUME command is needed. this adds further constraints on program structure.

    5. after search is over deactivate interrupt to avoid collisions.

    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

  • I looked at the system integrators manual and examples for searching parts where location is unknown.


    I was expecting the interrupt to jump to the UP1() local program immediately when the input is triggered... or create an error message that informs me about my mistake. Instead nothing happens and I cannot understand my mistake.


    So you are saying that I have to place a BRAKE command in the UP1() sub program and then the Interrupt would have an effect?


    I know about the risks in my sample code... I just wanted to post minimum number of lines where my error is quickly spotted.

  • which system integrator manual? there are bunch of them? none of them show example that matches what you have here.


    example in manual for KSS8.5 is rather nice.

    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

Advertising from our partners