I made a youtube video explaining the what each arm configuration and turn number does.
Fanuc Robots: The Configuration String
Posts by Nation
-
-
I am not aware of a method to do this in the abb, but I do have a spreadsheet that can do what you're asking.
Unfortunately, it belongs to a customer of mine, and I am not sure they would be happy with me sharing it.
If you can provide the points, I'll run it through and we can see what it spits out.
-
I am really interested in how you did this, please drop me an email.
I would email you, but your email is not in your profile.
-
To set the J1 axis limits, go to control panel, then go to configuration, then select the "motion" topic, then select the "arm" type, then it will be something like "rob1_1", or "irb6600_1" (there will be 6 of them, one for each axis). Go into that, and you can edit the upper and lower bounds. The bounds are in radians, so you will need to convert from degrees to radians.
-
Here is some code I have used in the past, which really only works if you have one TCP. Otherwise I would recommend you use blind3rr's solution.
Code
Display More! ! WorldZone Data Declaration ! VAR shapedata shpHome; VAR shapedata shpMaint; VAR wzstationary wzHome; VAR wzstationary wzMaint; PROC RobotPowerOn() ! This routine is attached to Power_on Event and will execute when the ! robot is Powered up. ! ! Define Home and Maint WorldZones WZSphDef\Inside,shpHome,pHome.trans,200; WZSphDef\Inside,shpMaint,pMaintPos.trans,200; ! Setup IO for the WorldZones WZDOSet\Stat,wzHome\Inside,shpHome,doRbtAtHome,1; WZDOSet\Stat,wzMaint\Inside,shpMaint,doRbtAtMaint,1; ENDPROC
-
I was able to find a solution over on the robotstudio forums. Here is a link to the thread.
Here is the code, with some slight modifications.
Code
Display MoreFUNC bool IsReachable(robtarget pReach,PERS tooldata tReach\PERS wobjdata wobjReach) VAR bool bReachable:=TRUE; VAR jointtarget jntReach; jntReach:=CalcJointT(pReach,tReach\Wobj ?wobjReach); RETURN bReachable; ERROR IF ERRNO=ERR_ROBLIMIT THEN SkipWarn; bReachable:=FALSE; TRYNEXT; ENDIF ENDFUNC
Edit: Cleaned up the code a bit more.
-
Are there any functions to test if a point is reachable? I've looked through the rapid documentation, but I can't find anything that fits the bill.
The robot I am programming runs vision right on the edge of its work envelope, and I would like to test if the offset vision position is reachable before attempting to move to it.
-
It is an option, you will have to buy it.
Option number is: R538 Ethernet/IP I/O Adp.
If you want the scanner option, that one is: R540 EthernetIP I/O scan. -
I decided to go with a register as the solution.
The call:
Code89: !Advance the slide for gripper 1 ; 90: !and ignore switch. ; 91: R[192:Enb Quick Exit]=1 ; 92: CALL G1ADVANCE ;
How I use it:
Code
Display More/PROG G1ADVANCE Macro /ATTR COMMENT = "G1 Advance Slide"; /MN 1: JMP LBL[1] ; 2: !******************************** ; 6: ! ; 7: !Program Name: G1ADVANCE ; 8: ! ; 9: !Program description: ; 10: !Advances the slide for gripper 1 ; 11: ! ; 12: !Revision History: ; 13: !v1.0 - 11/7/12 ; 14: !v1.1 - 1/6/13 ; 15: ! ; 16: !Revision Description: ; 17: !v1.0 - Initial release ; 18: !v1.1 - Added Quick Exit logic ; 19: ! ; 20: !******************************** ; 21: LBL[1:Begin] ; 22: ; 23: DO[482:Return Gripper1]=OFF ; 24: DO[481:Advance Gripper1]=ON ; 25: ; 26: !Exit early if told to do so. ; 27: IF R[192:Enb Quick Exit]<>0,JMP LBL[32766] ; 28: ; 29: !Wait for slide advanced input ; 30: $WAITTMOUT=200 ; 31: WAIT DI[481:Gripper1 Advanced]=ON TIMEOUT,LBL[9001] ; 32: ; 33: !Make sure return switch is off. ; 34: IF DI[482:Gripper1 Returned]=ON,JMP LBL[9005] ; 35: ; 36: !Gripper slide advanced. ; 37: END ; 38: ; 39: ; 40: !******************************** ; 41: !Fault area ; 42: !******************************** ; 43: ; 44: !The slide failed to advance. ; 45: LBL[9001:Advance Err] ; 46: CALL FAULT(1) ; 47: JMP LBL[9999] ; 48: ; 49: !Both switches on. ; 50: LBL[9005:Bth swtch on Err] ; 51: CALL FAULT(5) ; 52: JMP LBL[9999] ; 53: ; 54: !Go Home and abort. ; 55: LBL[9999:Recovery] ; 56: DO[481:Advance Gripper1]=OFF ; 57: DO[482:Return Gripper1]=ON ; 58: WAIT .50(sec) ; 59: CALL RECOVERY ; 60: CALL ABORTIT ; 61: LBL[32766:End of program] ; 62: R[192:Enb Quick Exit]=0 ; /POS /END
Maybe sometime in the future we will get this functionality. Seeing as how it took until about 2007 for Fanuc to implement program names longer than 8 characters, I bet we should have something like what I want around 2025 or so.
-
I want that variable to be optional. Similar to how the Present() function works in ABBs.
-
Unfortunately, the job I am working on, the customer did not buy any options whatsoever. So no karel for me. Also, you no longer get a free pass on karel for the R30-iB.
Its starting to sound like that there isn't a way to do it. I really wish I could do something like this:
-
Say I call a program as follows:
and inside of SUBCALL I have:
It will run fine.
But if I call the SUBCALL program without any arguments, like so:
It will fault on the if statement with an INTP-288 error. (Parameter does not exist)
CodeIF AR[1]=1, JMP LBL[100] ; <--INTP-288 FAULT !Do stuff... END ; LBL[100] ; !Do other stuff... END ;
I want to know if there is anyway to test for the existence of an argument passed to the SUBCALL program.
-
Does anyone know if there is a way to programmatically test for the existence of an argument?
-
I recall reading somewhere that there is a way to reallocate the amount of memory dedicated to TPP and PERM. If you have alot of spare PERM memory you may be able to reallocate it so there is more dedicated to TPP. However, I can't find where I read that at. Might be worth it to give fanuc a call about it.
If that doesn't work, it looks like the option R709 is what you need. It looks like it allows you to read TP programs directly from the DRAM or from an external memory card. Never had to use it though. It is described in section 5-5 of the handling tool manual.
-
They moved the download to the CRC center, so you have to be a member to get in there.
I can verify that HandleingPro works in Windows 7 Pro, I have it open right now.
-
Do a controlled start (hold F1 and F5 on power up) and change this variable:
$SCR.$maxnumufram
CodeName: Maximum Number of User Frames Description: Displays the total number of user frames the coordinate system can register. Power Up: On_Cold_Start
By default it will be a 9, but I've taken it up to 19 before on a real robot with no adverse effects. I just played around with it in sim pro, and it looks like the max number is 61. That was with HandlingTool V7.70P/14.
Word of caution though, I've noticed that the program utilities don't seem to like frames above 9. I think alot of them were coded with the max number of user frames being a 9 in mind
Here's the one for Utools if you need it:
$SCR.$maxnumutool
-
The command enable (CMD ENB) UOP will go low if the robot is in step mode. That how I tell typically.
If you want a digital output that tells you specifically that the robot is in step, you will have to put the following code in a tp program and run it as a backround logic task.
-
Have you setup your payload schedules accurately? Those are essential to the robot detecting collisions.
-
There is a connector on the OP panel board that can be used to safely (dual channel) enable/disable DCS zones. I think you can wire in up to two safety inputs. No need for background logic. Just check those inputs before entering the DCS zone you define.