Is there a way to transfer a program from STN1 work object to STN2 work object?

Skittles
Skittles
edited October 15 in IRC5

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

  • jarmster
    jarmster
    edited October 21
    are they back to back so they are in reversed positions? so tail-head-head-tail
  • jarmster said:
    are they back to back so they are in reversed positions? so tail-head-head-tail
    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
    jarmster
    edited October 24
    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 on
  • 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
     



    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.

    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]];
  • 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 Job
  • jarmster
    jarmster
    edited 6:26PM
    [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_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_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.
    The workobject used in the program your moving is the one to copy.


    Then copy your program and change all the work objects in the copy to stn2 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 at