Is there a way to transfer a program from STN1 work object to STN2 work object?
We have an ABB IRC5 2600ID welding robot with 2 back-to-back headstock/tailstock stations.
My question is how would I go about copy and transfer of program that was written on STN1 work object and get it to "convert" over to STN2 work object? Let it be noted that I do not have RobotStudio, neither free or licensed software version. I am looking for any potential ways of doing this out on the real controller. I read a code routine called MoveExChange that was posted somewhere. It seems to use CalcT . . . or something of that nature. I have never dealt with that type of coding and wasn't sure if it applied to what I'm looking for.
On my laptop, I did copy the part program module I want to transfer and I edited any tags or labels for STN1 into STN2 in notepad. This loaded fine into my controller, but obviously doesn't translate positions to the other work object properly without errors or still trying to go to STN1.
Any help or insight is appreciated.
Answers
-
are they back to back so they are in reversed positions? so tail-head-head-tail0
-
The headstock and tailstock for both STN1 and STN2 are in the same orientation direction on both sides. So essentially "head-tail and head-tail". The robot is on a track in between both STN1 and STN2, the track and stations are parallel with each other.jarmster said:are they back to back so they are in reversed positions? so tail-head-head-tail0 -
i have some ideas but i think my lack of experience with track systems leaves me at a disadvantage in this topic..i'll leave it to someone else. i dont want to waste your time
If you could give me a little info in regards to how the track system operates. Is it considered a 7th axis? . I'd be interested in seeing a point declaration with a 7th axis and an external axis. I may be able to help if i understood your setup better
Post edited by jarmster on0 -
The track axis is considered a 7th axis of the robot, but can be selected by itself in the Jogging window like STN1 and STN2 mech units. However, it's always active like the robot. And this system operates under one task only TROB1.jarmster said:i have some ideas but i think my lack of experience with track systems leaves me at a disadvantage in this topic..i'll leave it to someone else. i dont want to waste your time
If you could give me a little info in regards to how the track system operates. Is it considered a 7th axis? . I'd be interested in seeing a point declaration with a 7th axis and an external axis. I may be able to help if i understood your setup better
I copied a robtarget here from one of our programs in notepad:
CONST robtarget p95_STN2_r2_511:=[[367.14,4152.50,418.89],[0.00290258,0.319632,-0.214203,-0.923008],[-2,1,-3,0],[2573.47,9E+09,9E+09,9E+09,160.004,9E+09]];0 -
Hi...If the machines are mirrored, my suggestion is to use the mirror function.In Teach Pendent - ABB > Program Editor > Program X.In the Edit menu there is the option "Mirror..." This option allows you to mirror your program.Maybe it will work for you.Good Job0
-
[2573.47,9E+09,9E+09,9E+09,160.004,9E+09]]
so the 2573.47 is the position of the positioner and the 160.004 is the position along the track?
or opposite?
i would start by creating a new work object by copying the first one and attach it to STN2
TASK PERS wobjdata Wobj_PART_STN1:=[FALSE,FALSE,"STN1",[[0,0,0],[1,0,0,0]],[[173.645,-174.205,220.132],[1,0,0,0]]];
TASK PERS wobjdata Wobj_PART_STN2:=[FALSE,FALSE,"STN2",[[0,0,0],[1,0,0,0]],[[173.645,-174.205,220.132],[1,0,0,0]]];
The station userframe is taught when the robot was set up. The object frame is taught off the part you put in the positioner. The object frame is placed on the userframe and attached so the objectframe rotates as the positioner rotates. Make sure you copy the proper workobject for the part that your trying to move to a new positioner. All parts should have their own workobjects unless your using the same workobject for all the parts used on stn1. not a smart idea tbh
The workobject used in the program your moving is the one to copy.
If the mounting of the part varies from positioner to postioner then you may need to reteach the new workobject in the new positioner. you'll need to know where the 3 points were taken for the original workobject so you can reteach them for the new workobject but if the mounting of the part is the same then you may get away with just copying the original workobject to the new positioner. The more your mount is different the more your points will be off. Its probably a better idea to reteach the workobject for stn2 if you know where the original workobject was defined.. I would copy the original workoject for stn2 in the calibdata and then set the part up in stn2 and redefine that workobject.
Then copy your program and change all the work objects in the copy to your new workobject using find/replace
Next would be to edit the track position for each instruction in the copy....The problem here is all your points are declared and you cant use the same declarations for both programs because the track position needs edited for your copy.
This is where i would use the studio and convert all my points to inline points so we wouldn't need to use declarations. All the position data would end up on each line of code. Then you could go through your copied program and edit the track positions.
inline example
MoveL [[-5.54,169.25,106.36],[0.228615,0.670302,-0.66034,0.249763],[-1,-1,1,0],[9E+09,-45,15.0002,9E+09,9E+09,9E+09]],v500,z10,tWeldGun\WObj:=wobj00757914_2;
The point names will be replaced with an astrick on the pendant.
I usually use inline points instead of named points just because of the ability to copy and edit the new point without affecting the orginal point. There are times where named points are necessary like if your trying to copy point data to a variable in program so you need to be aware if things like that are happening in your program. If that kind of thing is in your program then i would copy and rename the declaration and change the instruction to use the new name for that position. But if your whole program is movel,movej, arcstart, arcl and arcends then conversion to inline is the way to go
BUT....since you dont use robotstudio.
work around without the studio...
You could copy and rename the declarations and edit the track positions and then edit the point names in the copied program to use the copied declaration.
or...
copy the declaration data for each point over top of the name of each point in your copy, essentially making them inline points and then editing the track position for each point. I would probably do this being its all copy and paste. If the robot sits in one spot along the track, you may get away with find/replace for the track data. You would only need to do this for the copy. you could keep the original program unchanged using the original point declarations.
copy this from declaration....[[-5.54,169.25,106.36],[0.228615,0.670302,-0.66034,0.249763],[-1,-1,1,0],[9E+09,-45,15.0002,9E+09,9E+09,9E+09]] overtop of point name to convert to inline
You could do all of that in a txt editor using a backup but this would be a very tedious job but very doable.
You would also need to calculate the offset you need to add to the track data for station 2.
Does the robot move on the track during program execution in stn1? Or does it just sit in one spot?
You could calculate the offset by looking at the stn positions in the baseframe and just add the difference to the track data, i imagine. If they use the same unit of measurement. If not you will need to figure out a conversion factor. This i dont know because of the lack of experience with tracks.
You might be able to get away with putting the robot into a postion where the migwire touches the faceplate on stn1 and then read the track position, then pull the arm out vertically move the robot down the track past the faceplate on stn2. then bring the arm back down and move the robot back along the track untill the wire touches the faceplate and read that track position, the difference is your offset to add to the track data.
i might add this will only work if the cell is as follows
===Robot====================
Stn1 Stn2
Head------Tail Head------Tail
Track : ===
I hope my explaination has been clear. I've done this kind of shift of code from one workobj to another multiple times. never with a track but on a sky hook positioner where i have multiple weld stations on one plate. If the jig holds 2 parts, ill teach 2 workobjects (The 2nd wobj needs to be oriented the same as the first when i rotate the fixture 180), program the one part. copy the program and change the workobject in the copy. Then i'll add 180 degress to all my positioner data in the copy so the 2nd part has rotated into the same position as the first part. Same concept as what ive described above except all on the same positioner. The only difference is you'll only need to edit the workobject and the track data in your copy. Everything else remains the same besides a new routine name for your copy and the way you load it. You'll still need to walk through it and tweak the points afterwards but everything should be pretty close.
Post edited by jarmster at0
Categories
- All Categories
- 5.6K RobotStudio
- 401 UpFeed
- 21 Tutorials
- 15 RobotApps
- 306 PowerPacs
- 407 RobotStudio S4
- 1.8K Developer Tools
- 250 ScreenMaker
- 2.9K Robot Controller
- 364 IRC5
- 81 OmniCore
- 8 RCS (Realistic Controller Simulation)
- 853 RAPID Programming
- 33 AppStudio
- 4 RobotStudio AR Viewer
- 19 Wizard Easy Programming
- 110 Collaborative Robots
- 5 Job listings
