Way to get her done! I ended up deleting my last two unpublished posts after finding my solutions while trying to figure out what I wanted to ask.
Posts by Elderwild
-
-
Thank you Gents for the pointers. Now my only concern, is do I or don't I have a backup of all of my array data for all the different jobs I have? As I still have not found this data in the backup I am going to assume not. Guess I have some more exploring to do . Have a great weekend all!
-
I am trying to make new declarations offline, then insert into a current backup and then do a restore in order to lessen the loss of production time. Usually, for programs, I copy an old file, rename all the targets, then drive to where I need to go. It saves a ton of time not typing in the TP (it kind of reminds me of coding in pascal back in the day). I have never tried it with the arrays (pose data), which we use for pick table layout. Thought I could preprogram as there are 42 parts per table. I will still need to adjust all 42 manually by a couple Millimeters (the robot seems to be off a bit when in that particular orientation) in order to get away without using the regrip station, but the robot will get close to the right location anyway.
-
This is true, however I am not finding it in any of the backup files. I have opened every one of them. So, it may be that they are not being written to the backup files. If this is the case, what would be the easiest way to remedy the situation?
I guess I'm asking for some pointers as to where to check and how to change what gets written to the backup files?
-
Hey all! Trying to get some offline pre-coding done to minimize actual TP time. Does anyone know where in the backup the array data is stored? I am trying to program my offsets ahead of time for new load tables, but I can't seem to find where they are located. I am using Ultra Edit and it has been working great for adding all the points rather than type them out on the teach pendant. Any nudge in the right direction would much appreciated.
Thanks,
Drew
-
To the best of my knowledge, with the current functionality and set up you have described, What you want to do is not possible. Every time the operator loads the table the Estop is circuit is triggered and must be reset using the control panel button.
You don't "need" a PLC but it can make things easier by offering a greater number of I/O units and safety switches as well as a second "brain". Look up, controller as a PLC if you don't need a lot of I/Os or look into using an external I/O cabinet hooked to your CAN1.2?/2? if you do.
That being said, you could potentially hard wire a "setup switch". This would be something like the reverse of a safety door lock key at the operator panel. When turned it would have to bypass the light curtain estop and simultaneously activate a robot guard stop state. After loading, the key would be switched back, no estop triggered, and a second button, wired to a DI could pulse a signal back to the robot. This signal could be programmed in rapid to trigger a restart.
All this being said, you would have to carefully consider how "Safe" this would be for you and whether or not it meets your company criteria and protocol. All the info you need for this should be in the users manual.
This is a hypothetical solution from a newer programmer and as such I suggest that you document your solution clearly and get a second if not third opinion from more experienced programmers and safety engineers before moving forward with a solution like this.
Hope this helps!
-
From what you are telling us, it appears your robot does not run while you are loading the table(s?) Is this the case? Robot does work, sits until loading is done and is reset each time to re-empty table. Stops if light curtain is broken? Just trying to better understand your setup. Do you have a PLC? How many tables? Do they move?
-
I still have to check all the other programs, but hey....that's what a test run is for right?
-
Installed all new components over the weekend. Programmed this morning. It was perfect the first time (when the orientation was the same)! ...But had to redo to change the orientation about 17 deg. due to other space constraints in the cell (robot touching dust collector chute). Changed offsets by maybe a couple millimeters (-1,+1.2,+5) to adjust to new orientation. Up and running in 2 hours.
-
You are welcome. I had envisioned a fixture that you affix to the router to teach, then remove. Of course it has to be repeatable/located well when you replace it after the move.
Got her moved! Thanks Lemster68.
-
This may help, its from the I/O plus manual.
-
I cannot figure out what I'm doing wrong. Wondering if someone could give me some insight. I keep getting "cannot transfer control into another instruction list" error for the GOTO command. I'm just trying to jump over rPartReject if my sensor passes the gauge check.
!Checking part gauge Input to see if it matches correct gauge and to prevent punching double parts
PROC rCheck_Part_Gauge()
IF DI_GaugeOK=1 THEN GaugePass;
GOTO GaugePass;ELSE
rPartReject;
ENDIF
GaugePass:ENDPROC
Try this. Now your part passes or if GaugeOK=0, rPartReject is called and it rejects part. rPartReject will not get called if the first condition (GaugeOK=1) is met.
-
Thank you Lemster68 for all of the ideas and attention. I am going to try to figure out some sort of indexable Jig this weekend using a round clamp and Pins ground to the different proper heights to account for the tilt in the wobj frame. Have a great week end.
-
You don't have to move several or even one foot for the X and Y, inches will suffice. Regarding rotation, if you cannot move in your current workobject position just a little and mark a point you could fab up a template to attach to it to extend the points that you need to make. It could even be just a piece of cardboard or rigid sheet of plastic.
I like this idea, but the router will be detached from it's current turret and placed inside of an 8x8 steel tube. not likely that a jig will survive all the movement.
-
Actually, in the past I have just manually updated the workobject origin in the data by driving to the origin in the new location. Make sure that you are in world coordinates, note the x,y,z values in the pendant, and then just type in the new "origin" into the workobject data.
X1 can be the origin, depending on how you teach it. The Origin is the point at which the X plane and Y plane intersect. The way I like to teach it is: X1 first, jog X2, teach, go back to X1, then Jog Y1, teach. In this manner, X1 is the Origin. If you taught X1, then X2, jog Y1 without returning to X1, what will you get?
And, Z automatically get figured 90 degrees through the X/Y intersection.
The Origin is the only point I have to work with here. If I chose X2 as the origin I still only get 2 points on the Router and the current wobj frame in not square or level to the Router. I don't think there is an accurate way to reproduce the new wobj frame after moving the Router without first correcting the positioning of the current frame.
-
It appears that the monkey who taught the points in the first place picked a point at random and just flew off into space any old place he wanted to. the object frame is not square or level to the world ,base or any other frame (it should be as the router is plumb and square to the world). X2 and Y1 will be floating in the air some where off to the right and behind the tool.
I would like to have the origin determined by points on the tool so I can physically see and touch the points/ less error this way and the new tool frame would actually be square and level to the tool this time. (Guess its just the OCD in me)
I guess I could try the align command to the wobjframe, find the origin and mark it (if I can) on the Router. Then move the router, Align to the old wobjframe in the jog menu, move to the new origin, lock the joy, and fly off into space myself. It may "work" but it won't "square up" the tool frame, and I won't know if it'll be as accurate as I need it to be. Also at that point it would be too late to do anything about it because the Router has been moved. Your line "exactly as the first" is why this is freaking me out. I know what it took to program all those points the first time and really don't want to go through that all again.
So for clarification: X1 is the entire origin or just the X part of it? / X2 defines X+ direction and the X axis/ Y1 defines Y+ direction, the y axis and the Z axis? Is that correct?
As long as I can do the above as described, in paragraph 3, Do you think this will work with minimal reprogramming? I guess I can live with a crooked wobjframe if it'll save a bunch of time, but it would be nice to clean it up before moving it. I know that no one else knows its crooked, but everytime I make a correction I am reminded that it was poorly programmed and I want to scream and fix it.
That is irrelevant. Any well defined tcp is sufficient. That is why I was trying to steer you to find the origin and the +X and +Y so that you can teach it the same. Only the origin is the most important to be at 0,0,0. The distance for the +X and +Y is also not relevant, just that you stay on the same vector. The robtargets follow the workobject. If you were to duplicate any one of your routines and change the workobject to one of your new ones, it will work. You Just have to teach the new workobject exactly as the first was taught.
Just a thought here that steers me back to transposing the points. What if the placement of the new router is rotated a bit? This will essentially move the center of the router bit in an arc inside my wobj frame. Since I only have the one point on the router to go off of there is no way to accurately reproduce the initial programming vectors even if I use the Align function as the alignment of the router to the world frame may change slightly when moving.
-
I do not have the elongator tool that was used to program wobjRouter. I want to use the robot to transpose the RobTarget program points to Joint targets then back to updated RobTargets in "the new but in the same place" wobjROTOR1 with known elongator/TCP/and User defined points so that all programs remain as is with no reprogramming (I have heard that if I use offsets, then I can't easily use offsets to adjust tool paths, can't offset an offset). The reasoning is that in about a week we are going to remove the router and move it and I do not want to reprogram the more than 1500 "wobjRouter" points across 9 different "Jobs". I want to redefine "wobjROTOR1" in its new place using the same 3 pts that I set it up with. I am really hoping that this will alleviate most of that reprogramming. To my best understanding, the Module "workobject copy" is meant to do that but I don't fully understand the how of it. Am I way off base?
-
Here is the shortest of the Router Procedures and declarations (Jobs module, run inside of the Main module) that need to be transposed. I want to define wobjROTOR1 with 3 known points(I have marked them on the router) so I can replace wobjRouter(Found the origin, unknown programming tool)
PROC SideOIL()
CONST robtarget AboveRouter_10:=[[-557.96,46.61,197.82],[0.009554,-0.301838,-0.953311,-0.001615],[1,0,1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
CONST robtarget p130:=[[-45.86,-197.01,-38.89],[0.003573,-0.817645,0.575696,0.004538],[0,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
CONST robtarget p120:=[[-45.81,-103.03,-38.83],[0.003563,-0.817599,0.57576,0.0046],[0,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
CONST robtarget p110:=[[-45.9,-103.89,-38.81],[0.005539,-0.953512,0.301307,-7.9E-05],[0,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
CONST robtarget p80:=[[-76.43,-103.77,-38.98],[0.005515,-0.953623,0.300955,-0.000257],[0,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
CONST robtarget p70:=[[-76.17,-103.96,-39.04],[0.006792,-0.999885,0.012726,-0.004904],[0,0,-2,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
CONST robtarget p60:=[[-46.12,-106.2,-38.93],[0.005523,-0.953574,0.301113,-0.000187],[0,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
CONST robtarget p30:=[[-45.41,-111.72,-38.9],[0.005531,-0.95354,0.301219,-0.000121],[0,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
CONST robtarget p20:=[[-75.87,-111.28,-38.99],[0.005534,-0.953599,0.301033,-0.000214],[0,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
CONST robtarget p10:=[[-56.4,-123.77,-36.13],[0.011623,-0.977345,-0.211066,-0.010704],[0,0,-2,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
CONST robtarget AboveRouter:=[[-68.41,-244.43,349.99],[0.00754,-0.953922,0.299766,-0.010908],[0,-1,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
! SideOIL
MoveJ AboveRouter,v5000,z10,tGripper\WObj:=wobjRouter;
MoveL p10,v400,z10,tGripper\WObj:=wobjRouter;
MoveL p70,v30,z1,tGripper\WObj:=wobjRouter;
MoveJ p80,v2,fine,tGripper\WObj:=wobjRouter;
MoveL p20,v20,fine,tGripper\WObj:=wobjRouter;
MoveL p30,v5,z1,tGripper\WObj:=wobjRouter;
MoveL p60,v5,z1,tGripper\WObj:=wobjRouter;
MoveL p110,v2,z1,tGripper\WObj:=wobjRouter;
MoveL p120,v2,z1,tGripper\WObj:=wobjRouter;
MoveL p130,v400,z1,tGripper\WObj:=wobjRouter;
MoveJ AboveRouter_10,v1000,z50,tGripper\WObj:=wobjRouter;
RETURN;
! SideOIL
ENDPROC
PROC ElecRouter4()
SetGO goSpindleRPM,7500;
SideOIL;
SetGO goSpindleRPM,0;
RETURN;
ENDPROC
Now for the real Question. How does this module "workobject copy" get used?
Do I need to place a Proc Call ie PROC MoveL/MoveJ after each Move* in "SideOIL", or do I need to write something like a trap routine that calls for the matching PROC Call for each line when wobjRouter is present?
Again I am relativley new to this. I get the concept here but not the Syntax or order of operations.
-
You are correct Lemster68, stationary router, robot works parts. I have a pointer to add new wobjs, but do not have "the" pointer or points used when this was set up. I know the X+,Y+ directions of the router spindle. Trying to save a bunch of down time from reprogramming points after I move the router, by using known and duplicatable 3pt wobj definitions. I am trying to better understand how to use the module "workobject copy". It seems to run in the background. I think my duplicate points need to be in this module, is that correct? If so, do the procedures get called out with each move (MoveJ,L,etc.) of the robot , or do I call each procedure for every line? Trying to better understand the order of operations here because I usually type my code in a text editor and test with the robot controller, so when its not correctly coded it can be a bit time consuming to figure out properly.
-
Hello all,
New to forums so I might not be doing this correctly, sorry. I am newer to Robotics but learning rapidly. I came across the thread "workobject copy" that seems to be exactly what I need to do. Running an irb 6600 on the old SC4+ M2000a controller so the easy way of running it through Robotstudio is out. Going to remove old spindle and replace it with 3 new ones. The Problem: I have no idea what points or elongator were used to define the current wobjRouter. Sooo...... Going to create wobjRotor1,define using known elongator, and hopefully use info from the old workobject copy thread to transpose the data to the new (known) wobjRotor1 so that I can move the spindle and redefine wobjRotor1 in its new place. There are currently 9 different programs that utilize wobjRouter.
I am not sure exactly how to do that, but here is my plan.
1) I am planning to copy all the procedures that use wobjRouter to Module MoveExChange using ultra edit. (is this the proper place to put them, and do I need to do one at a time or can I put them all in there?)
2) Run each program from the Jobs Module. (the question here is where, when and how to call Module MoveExChange. Logically I feel I need to call it from the running program right before I go to the router procedures. is this correct or does MoveExChange run in the background?, do I need to call it before each line of code?)
3) cut and paste updated wobjRotor1 RobTargets to Jobs module and test.
Any help with the less short version would be much appreciated!
Cheers!
SAABoholic and Lemster, Usually all I have to do is read your posts to figure it out. This one is a bit daunting, but hey, I joined my first Forum!