Update robot base in real time with encoder data - KRC4

  • Hello,


    I am working on a pick and place application where items come to the robot in a conveyor which moves in discreet steps. Right now I am using an incremental encoder and a Siemens PLC to count the encoder pulses, transmit them to the robot using Profinet and the robot uses a cyclical interrupt to update the position of one of its bases so that it moves with the conveyor.


    This approach works right now because the robot only acts when the conveyor has stopped moving so when the robot begins executing a motion instruction (for example SPTP point WITH $BASE=movingBase) the base position has already been updated. The problem is that if the conveyor moves while the robot is executing a motion comand, the motion is not updated during its course.


    I'm wondering if it's possible for the motion to be updated (every 50-100ms would be fine) with the data from the encoder. From what I've read in the manuals when the Advance Run pointer reaches a motion instruction it already calculates the path and that's why it doesn't update in my case. I know there are software packages like ConveyorTech and RSI that can be used but they're really expensive so I'm looking for another solution.


    Thank you

  • The built-in Function Generator (which is the technology that underlies RSI, Seam Tracking, and ConveyorTech) might allow you to create a "roll your own" solution, but it's almost completely undocumented, and I only know of a handful of people who know how to program it "raw", so... it'd probably take a lot of time and trial-and-error to get anywhere.


    Without realtime motion tracking, you're going to have to stop the conveyor at some point, and block it from moving. Even if you could update the robot to the conveyor 10mm before it makes contact, if the conveyor is still moving, you're out of luck.


    A crude solution would be to divide your the motion from your Pre-Pick to your Pick position into a lot of small moves, with an update to $BASE between each one, probably using a calculated loop, and maybe temporarily setting the Advance to 1. But it'll be "chunky", and the robot will not track the conveyor during the final motion step.


    If you want a solution that works, and isn't a kludge of duct tape and chicken wire, you're probably going to have to use ConveyorTech, or block the conveyor from moving while the robot is on final approach.

Advertising from our partners