Hello.
I am optimizing a clutch plate pick-and-place program for an IRB 920-6/.65 SCARA robot with 180mm reach on axis 3.
To do this I want to use the MovePnP instruction to reduce cycle time.
Here is the planned sequence:
1. Robot moves from Home, to safe pounce, to above Stack A.
2. Robot moves to down position at Stack A.
3. Tool grips Plate A.
4. Robot moves above Stack A.
5. Robot moves to Pounce Loading Area.
6. Robot moves above Loading Area.
7. Robot moves to down position at Loading Area.
8. Tool releases Plate A.
9. Robot moves above Loading Area.
10. Robot moves to Pounce Load.
11. Robot moves Home.
And here is the accompanying program (moves only):
PROC R1_stack_v1()
MoveAbsJ jHome,v1000,fine,DISK_EOAT\WObj:=wobj0;
MoveAbsJ jSafe_,v1000,z5,DISK_EOAT\WObj:=wobj0;
MoveL pOver_ClutchA,v1000,fine,DISK_EOAT\WObj:=wobj_ClutchStackA;
MoveL pDown_ClutchA,v1000,fine,DISK_EOAT\WObj:=wobj_ClutchStackA;
!Gripper picks plate from Stack A
MoveL pOver_ClutchA,v1000,fine,DISK_EOAT\WObj:=wobj_ClutchStackA;
MoveAbsJ jPounce_Part,v1000,fine,DISK_EOAT\WObj:=wobj_Part;
MoveAbsJ jOver_Part,v1000,fine,DISK_EOAT\WObj:=wobj_Part;
MoveL pDown_Part,v1000,fine,DISK_EOAT\WObj:=wobj_Part;
!Gripper releases plate to Part
MoveAbsJ jOver_Part,v1000,fine,DISK_EOAT\WObj:=wobj_Part;
MoveAbsJ jPounce_Part,v1000,fine,DISK_EOAT\WObj:=wobj_Part;
MoveAbsJ jSafe_,v1000,z5,DISK_EOAT\WObj:=wobj0;
MoveAbsJ jHome,v1000,fine,DISK_EOAT\WObj:=wobj0;
ConfL\On;
ENDPROC
Display More
Axis 3 moves vertically between the “over” and “down” positions. I understand I need two vertical moves for the MovePnP instruction to work, so I attempted the following program as an experiment:
PROC R1_stackPNP_v1()
VAR num my_pnp_height:=175;
VAR pnpdata my_pnpdata;
my_pnpdata.smooth_start:=50;
my_pnpdata.smooth_end:=50;
ConfL\Off;
MoveAbsJ jHome,v1000,fine,DISK_EOAT\WObj:=wobj0;
MoveAbsJ jSafe_,v1000,z5,DISK_EOAT\WObj:=wobj0;
MoveL pOver_ClutchA,v1000,fine,DISK_EOAT\WObj:=wobj_ClutchStackA;
MoveL pDown_ClutchA,v1000,fine,DISK_EOAT\WObj:=wobj_ClutchStackA;
MovePnP pDown_Part,v1000,\PnPHeight:=my_pnp_height,fine,DISK_EOAT\WObj:=wobj_Part\PnPDataIN:=my_pnpdata;
Stop;
ConfL\On;
ENDPROC
Display More
I found that trying to move from the pick position directly to the place position using MovePnP either yields a limit error or crashes the virtual controller.
Of note, these two down positions each reference a different work object: that of the plates to be picked is to the robot base’s right, and that of the loading area is to its left. Additionally, the robot must avoid colliding with the surrounding workstation, hence the pPounce_Part robtarget.
Does anyone have an example that accounts for these reach limitations? Or is there something I'm misunderstanding here? Thanks.