User Coordinate Shift by Shifting another reference (User Frame)

  • Hi Guys;


    We have project with Dx200 controller-MH180 robot.


    In our program we have some user frames on robots, but in this condition user frame not enough.
    Because robot will carry other place too, so we need to shift all user frames for another base user frame.


    My question is is there any way to apply Shift all user frame by changing on other user frame, I mean User frames will be relative to another user frame.


    Thanks in advance

  • About the issue I want give some information, I am planning to use Mframe comment with position variables that connect to the user frame, than try to change all users.


    I am going to test this and give information about the result.


    Problem Solved with the solution witch I described top.

    Edited once, last by emre ().

  • Hello Emre,

    Can you please explain in terms of commands as to how you solved your problem.

    Hey. Not OP but it's been a week and I thought I'd try to answer your question in case you still needed to know - for starters, if you want to read up in depth on MFRAME, it's in the Relative Job Function manual on motoman's documentation page.

    Anyway it works like MSHIFT, if you're familiar with that - where MSHIFT teaches an amount for shifting to a (usually P) variable while a program runs, MFRAME creates/modifies a UF#() frame while a program runs. In INFORM, it looks like this:


    MFRAME UF#(n) P001 P002 P003

    Where n is the frame you're modifying, and P001, P002, P003 are the Origin, XX, and XY positions you want to use for the frame respectively.


    As far as I know, there is no way to pull specific coordinates used to teach UF vectors - if there were, you could write a simple job to GETE from it, add your shift amount and then SETE right back in. Shifting one or two frames, the simplest way would be to just FWD jog to the taught points and move your shift amount and re-teach them. But if you need to shift a ton, you could write a FOR/NEXT loop that calls a job in each user frame and uses its origin and ADD/SUB, maybe?

    So like (on the pendant) it might look like:

    NOP
    FOR I000 = 1 to 15

    CALL JOB: SHIFTFRAME UF#(I000)

    NEXT I000

    END


    And so since SHIFTFRAME will be in the UF being changed, we should be able to zero it out and then add the shift value, so like, lets say you wanted to shift all the frames by x=50 and z = 190, well:
    NOP

    GETS PX001 $PX001

    SUB P001 P001

    SET P002 P001

    ADD P002 (1) 100 //Because this is our XX point

    SET P003 P001

    ADD P003 (2) 100

    ADD P003 (3) 100 //We move it on Y and Z because this point sets our plane slope

    //This next bit changes based on your shift. In the (), 1, 2, and 3 respectively represent X, Y, and Z. Since we are setting vectors, 4, 5, and 6 (Rx, Ry, Rz) don't matter.

    ADD P001 (1) 50

    //The above statement would set P001 to be x +50, you could do multiple elements for your shift, like:

    ADD P001 (3) 190

    //Then repeat it for the others

    ADD P002 (1) 50
    ADD P002 (3) 190

    ADD P003 (1) 50
    ADD P003 (3) 190

    //Then you would do your MFRAME

    MFRAME UF#(I000) P001 P002 P003

    END


    Whew. So - full disclosure, I just came up with that on the fly so it hasn't been tested whatsoever and there are no doubt errors (for instance I think some CNVRTs might have to turn the system vars from pulse to cartesian and also I'm not certain if ADD can call elements like that or if its adding in absolute or relative numbers. That being said, this is one concept, debugged and tested of course, of no doubt many, where you could shift 15 frames by running that parent job once.

    Hope that helps.

Advertising from our partners