Beginner questions (vol. 2)

  • Hello all,


    At the end it seems I will have to program a super simple application using a FANUC robot...


    I have to pick parts from a couple of trays and then place those parts into a belt, there won't be PLC in that cell, only the robot.

    The operator will place and remove the trays manually into/from the machine.


    I was wondering:

    • Given both trays have the same sizes and the same products inside, can I use the same program using a different USER FRAME for each tray?
    • Do the Fanuc robots have INTRRUPTIONS? if I could use an interruption, I could activate a register every time the operator would press a button. That register would mean the tray is ready for the robot. In case interruptions exist, how are they named? could you point me to a manual where I could check how interruptions work?


    Thank you in advance!

  • A few different options and maybe more I didn't think of:

    1. Use different UF for each tray. This requires all points to be PR's, not P's.

    2. Use the same UF, but apply a PR offset to each point. You would use all P's with a PR offset applied to each movement.

    3. Use the same UF, but use an indirectly addressed PR for each pick movement.

    4. Dynamically modify the UF based on which tray to be picked. Then you would use all P's and no offsets.

    5. Just create 2 separate programs with their own points.


    Any of the methods above will be fine. Go with whatever you are comfortable with. I have used all the methods above in different situations. #5 is probably the simplest if it is a small program with a small qty of points.



    As far as an interrupt, I don't think that is really what you want. Instead you probably just want a WAIT statement. In your main program create a main loop with jump labels. At the top of the program you can WAIT until the register value changes or they press a cycle stop button. Then the next line of code, if the register value is a certain value then you can call your pick/place routines.


    Like this:


    MAIN_PROGRAM:


    : CALL GO_HOME;

    :

    : !Main loop start

    : LBL[1]

    : WAIT (R[x] <> 0 OR DI[x: cycle stop]);

    : IF (DI[x: cycle stop]), JMP LBL [2];

    : CALL PICK_PLACE:

    : JMP LBL[1];

    : LBL[2];

    : !Main loop end

    :

    : CALL GO_HOME;

    : END;

  • Thank you both.


    HawkME thanks for the detailed explanation related to UFs. Will check it and see what I like the most.

    I want interruptions, I want the operator to be able to press the button informing the robot the tray 1 is ready meanwhile the robot is working on the tray number 2. Looks like Background logic can do it.


    hermann searched for Background logic in the internet... looks pretty neat, it's like multitasking preinstalled into the robot. Thanks!


    As always, thank you both!

  • I really don't think you want a true interruption. If the robot if in the middle of placing a part you don't want to interrupt that, abandon it, then go do something else. You don't want to just drop a part.


    I think what you really want to do is finish the current task then go back to see if there is new work to do. That's what the main loop, wait example will do.


    BG Logic can set the register value so when the robot gets back to the Wait command it will know if the next tray is ready.

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