WinOLPC is serialized software, you'd have to call Fanuc and get them to activate it. I doubt they'll do that for you if you don't own a legit copy. Sorry.
Posts by TitusLepic
-
-
So you need the home_return program to figure out where the robot is in 3D space, move a safe direction/distance to clear any obstacles, and then go home without hitting a limit.
I've never used DCS, but if I understand it right from what I've read, you can set up 3d zones in your cell that will turn on an output when the robot is in that particular area. If you have DCS I think that would be the easiest way, just check what output is on and call the appropriate motion to clear your obstacles.
You can also do what you're doing now; grab the the LPOS x, y, and z and use lots of conditional branching to determine what home path to call
The third way is to use a register in your main program and update the value as the robot moves to different areas. For example
R[1] = 0
move somewhere
R[1]=1
move some other place
R[2]=2
etc
then use a SELECT statement at the beginning of the home_return program to call the right homing routine
SELECT R[1] = 0 JMP LBL[1]
=1 JMP LBL[2]
=2 JMP LBL[3]
ELSE JMP LBL[4]
-
I'm not really sure what you mean about adding multiple JMP LBLs in the same line. A JMP LBL is basically a GOTO statement; you can't jump to two places at once.
Line 12 is completely irrelevant to your program; if your logic on line 12 is true then line 12 jumps to lbl[3], if it's false then you jump to lbl[3] on line 13. Either way, nothing between line 13 and lbl[3] will be executed.
As far as having limit faults trying to go home, generally you'll want to do a linear move to safely clear the workpiece and then a joint move for the move home.
-
On the teach pendant, press SHIFT+DIAG, then next, then the "alarms" softkey to get a list of all alarm
If you're looking up a specific alarm, http://www.linuxsand.info/fanuc/ is an excellent resource. Also, from the alarm screen, you can select the alarm you're interested in and press SHIFT+DIAG to get detailed info on it.
-
Code
SRVO-036 Inpos time over (G:%d A:%d) Cause: The in-position monitor time ($PARAM_GROUP.$IMPOS_TIME) has elapsed, but the robot cannot reach a taught point within the specified in-position ($PARAM_GROUP.$STOPTOL). Remedy: Perform the same action as that described for SRVO-023 (Stop error excess).
Code
Display MoreSRVO-023 Stop error excess(G:%d A:%d) Cause: When the robot stopped, the servo positional error exceeded a specified value ($PARAM_GROUP.$STOPERLIM). This alarm means that the robot cannot reach a taught point or cannot keep a taught posture. Probable causes: 1. Overload 2. External force to the robot 3. Disconnection or misconnection of the motor power cable or brake cable 4. Incorrect setup for the robot which has 2 axis brake option 5. Insufficient torque by low voltage of power supply 6. Brake failure (includes mis-setting of brake number for auxiliary axis) 7. Aux. brake unit failure for aux. axis 8. Amplifier failure 9. Motor failure 10. Motor power cable or brake cable failure Remedy: 1. Check whether the duty and applied load exceed the rating. If so, reduce the duty or applied load.
-
-
hello,
Concerning the error, you also have to change the uframe number in the definition of the points (at the end of the file).
By the way wheb you have exactly similar program on 2 different uframe, it is much better to use only one program and select the uframe at the begin of the program according where the robot should work. For example copy uframe1 or uframe2 in a temporary user frame uframe9 and then teach all your positions with uframe9...
For your second question I am not sure to understand but I think you speak about the user frames... each point teached with uframe 5 will have the coordinates remative to the origin and orientation of user frame 5...
I agree with benxi that if you're using the exact same program with 2 frames, it's better to select at the beginning of the program than to have two separate programs. Here's how I do it:
Code
Display More1: JMP LBL[1] ; 2: !UFrame data ; 3:L P[1:Side 1 UFrame] 1mm/sec FINE ; 4:L P[2:Side 2 UFrame] 1mm/sec FINE ; 5: LBL[1] ; 6: ; 7: ; 8: !Start UFrame Load ; 9: OVERRIDE=100% ; 10: IF DI[15:Side 2 active]=ON,JMP LBL[2] ; 11: PR[8:UFRAME BUFFER]=P[1:Side 1 UFrame] ; 12: JMP LBL[3] ; 13: LBL[2] ; 14: PR[8:UFRAME BUFFER]=P[2:Side 2 UFrame] ; 15: LBL[3] ; 16: UFRAME[1]=PR[8:UFRAME BUFFER] ; 17: UFRAME_NUM=1 ; 18: !End UFrame Load ;
-
First question: Menu>Utilities>Frame Offset. Although from what you're asking with your next question, I think a better solution would be to keep the same frame and shift the program, using menu>utilities>program shift
Second question: This is exactly the purpose of user frames. The UF defines the XYZWPR zero point that all of the program points are taught relative to.
-
Use the skip condition. You can search this board for more details, but it will look something like this:
SKIP CONDITION RI[1]=ON --in this example, the robot is looking for RI[1] to turn on
L PR[3] 100mm/sec FINE Skip,LBL[1] --move to PR[3] while looking for RI[1] to turn on. If RI[1] comes on before it gets to PR[3], motion stops and the robot goes to the next line. If it makes it to PR[3] without RI[1] coming on, the program jumps to LBL[1]
PR[1] = LPOS -- stores start position (when probe makes contact)
PR[2] = LPOS -- make sure that your offset PR is set to cartesian
PR[2] = PR[2] - PR[2] -- zero out your offset PR
PR[2,3] = {z offset} -- normally your tool Z is positive in the direction your tool is pointing
PR[1] 100mm/sec FINE Tool_Offset, PR[2]
.
.
.
LBL[1]
--Code to handle sensor not turning on
-
I'm not sure if you're talking about tool Z or user Z. If it's user Z, stare284's method will work. If you're talking about tool Z though, use a tool offset
PR[1] = LPOS -- stores start position (when probe makes contact)
PR[2] = LPOS -- make sure that your offset PR is set to cartesian
PR[2] = PR[2] - PR[2] -- zero out your offset PR
PR[2,3] = {z offset} -- normally your tool Z is positive in the direction your tool is pointing
PR[1] 100mm/sec FINE Tool_Offset, PR[2]
-
You can make your weldpro cell based off the old backdate.dt, then go to controller properties > Serialize Robot > create as a modification of the existing robot > next. Then select software version 9.1.
-
I have a router application where my router is mounted at a 70° angle to the faceplate (P rotation -70°). If I pick up a 90° aggregate tool, i set the W rotation to 90°. That way no matter which tool the robot is holding, tool Z is always pointing into the workpiece. This lets me cut features programattically using tool offsets where it doesn't matter what tool I'm holding; as long as the TCP (including WPR) is correct I can call my circle program (for example) and it will make a circle where the tool is pointing.
-
Here's my solution if anyone's interested. I used Karel for sin, cos, and atan but the rest is TP:
1: PR[90:LPOS]=LPOS ;
2: UFRAME[9]=PR[90:LPOS] ;
3: PR[91:MATRIXPOS]=UFRAME[9] ;
4: R[26:TEMP]=PR[91,9:MATRIXPOS] ;
5: IF R[26:TEMP]=1 OR R[26:TEMP]=(-1),JMP LBL[1] ;
6: R[26:TEMP]=PR[91,7:MATRIXPOS]/PR[91,8:MATRIXPOS] ;
7: CALL M_ATAN(R[26:TEMP],25) ;
8: PR[92:PR_OFFSET]=LPOS ;
9: PR[92:PR_OFFSET]=PR[92:PR_OFFSET]-PR[92:PR_OFFSET] ;
10: CALL M_SIN(R[25:Angle],26) ;
11: PR[92,2:PR_OFFSET]=R[68:Linear Overflow]*R[26:TEMP]*(-1)/2 ;
12: CALL M_COS(R[25:Angle],26) ;
13: PR[92,1:PR_OFFSET]=R[68:Linear Overflow]*R[26:TEMP]/2 ;
14: PR[93:TOOL_OFFSET]=PR[93:TOOL_OFFSET]-PR[93:TOOL_OFFSET] ;
15: PR[93,3:TOOL_OFFSET]=25.4 ;
16:L PR[90:LPOS] 15mm/sec FINE Offset,PR[92:PR_OFFSET]
: Tool_Offset,PR[93:TOOL_OFFSET] ;
17: PR[92,1:PR_OFFSET]=PR[92,1:PR_OFFSET]*(-1) ;
18: PR[92,2:PR_OFFSET]=PR[92,2:PR_OFFSET]*(-1) ;
19:L PR[90:LPOS] 30mm/sec FINE Offset,PR[92:PR_OFFSET]
: Tool_Offset,PR[93:TOOL_OFFSET] ;
20:L PR[90:LPOS] 30mm/sec FINE ;
21: LBL[1] ; -
I thought about that, the problem with that method is that I can't control the rotation about tool Z when the operator teaches the point, and I need the slot to be parallel to the user XY plane. The tool offset method will only work if the tool X axis is parallel to user XY.
-
I need a general online solution. I'm going to be very close to tool Z being aligned with User X in a lot of these situations so using the R from LPOS won't work.
My application is cutting slots (and in the future, rectangles) into a workpiece with a router. I'd like the operator to only have to teach the center point of the slot and have the robot do the rest programmatically. This is motion I want the robot to take:
L {LPOS} 100mm/s FINE Offset {slot_length/2*sin(zRot),slot_length/2*cos(zRot),0,0,0,0) Tool_Offset {0,0,plunge_depth,0,0,0}
L {LPOS} 100mm/s FINE Offset {-slot_length/2*sin(zRot),-slot_length/2*cos(zRot),0,0,0,0) Tool_Offset {0,0,plunge_depth,0,0,0}
L {LPOS} 100mm/s FINEIf there's a better/easier way than trying to figure out zRot I'm all ears.
-
I need a way to find a taught position's rotation about the Z axis. After doing some reading on transformation matrices, euler angles, gimble lock, and all that sort of thing, I think my best option is to hope that somebody smarter than me has figured out a good way to convert the WPR values into the actual rotation about the Z axis...
-
Sounds to me like a system language issue, go to control panel > Region and Language > Administrative and make sure that "language for non-Unicode programs" is set to English.
-
There's two ways that I know of. First, you can do it the same as you would on the physical robot. Open the TP in Roboguide, menu > setup > frames > etc just like you would on a real robot. Two helpful things you can do in roboguide that you can't in the real world: ctrl+shift+click on your model moves the TCP to that point, alt+shift+click on a circle or arc in your model moves the tcp to the centerpoint of the circle.
The other way is in your cell browser, go to Robot Controllers > your robot controller > your robot > UserFrames. Double click on the UFrame you want to edit. Check "Edit UFrame." You can either type it in (same as direct entry on the TP), or move the triad until you have it where you want it. Click and drag on th axis to move, Shift+click on the axis to rotate. -
You can use the IO_STATUS built-in to give you the info you need.
-
From looking at my RJ3 manual, it looks like PLC I/O maps to the robot physical digital I/O as a remote I/O rack for the PLC; i.e. the PLC has direct control over them and they logically bypass the robot controller completely.