Check if any point in a program is close to Axis limits?

  • I have been programming a robot that uses a laser to calibrate frame shifts, so the user frame differ slightly for each job.

    When I do the test runs everything is fine, but sometimes during the production run a axis limit would be reached and the robot would pause.

    Is there a way, either with the teach pedant or using Roboguide to check that all points are not close to axis limits?

    One way I can think of is to reduce the axis limits while programming, then change them back to normal for production runs. But that will require me to go through all programs again.

    Thank you for your advice in advance.

  • The converter in my signature may do what you are asking. If a point is unreachable, it will turn red. However, it would be a bit clunky to test every variant. It also doesn't test if a point is too close to the arm.

    On another job, I wrote a Karel program to do something very similar. It was for line tracking applications and its intent was to check if all the points in a path were reachable or not before allowing the robot to run the path. You would give it a range of how much the tracking frame would be allowed to move from nominal, and it would spit out a report on what the maximum boundary lengths could be for each point, or it would report that a given point would not be reachable for a certain offset.

    The reason that this was needed was that on older controllers (V7 and V8), the controller would just send the arm even if the point was unreachable and it would slam into its own hardstops. Newer gens at least post an alarm and stop the robot.

    I can't post the code, as it was for a client, but I can give you the gist of how I would implement it for your application:

    1. Pull in the points for passed in program, and the allowable shift from nominal.
    2. Apply a small shift to the frame.
    3. Convert points to world, then ask the controller to convert the world points to joint (jpos=lpos).
    4. If the jpos var was uninitialized after the conversion, means the point was unreachable.
    5. Repeat steps 2-4 until all shifted frames are checked, or you hit a unreachable point.

    This would be more of an offline check, as this process would take a while to run in Karel.

    Check out the Fanuc position converter I wrote here! Now open source!

    Check out my example Fanuc Ethernet/IP Explicit Messaging program here!

  • There is a way to check in roboguide; select your program, hit cycle start, and let it generate a profile. When it's done, open the TCP trace you just made, select "color by near axis limit," then select the joint you're interested in and set a tolerance. It will show you potential problem points as shown in the picture below (I set the tolerance to +/-30° just so it would display something for this trace, a more reasonable value would be be +/-5° or so)

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account
Sign up for a new account in our community. It's easy!
Register a new account
Sign in
Already have an account? Sign in here.
Sign in Now