Adjust speed during motion

  • I'm having issues at work with a project that is using a Fanuc S430iW robot to control the motion of a 9in grinder during a test. The system needs to adjust the speed of motion while the grinder is cutting into the material by using the feedback of the blade RPM and amperage draw. The system will need to keep the RPM and amperage within a tolerance band to maintain the highest material removal rate. Blade life and life of grinder is not important for this test, only matters that it cuts fast.


    S430iW

    RJ3 controller


    Picture of similar robot


    1667592306146.png



    Ive tried using conditional programming, running a second program concurrently to adjust the speed during motion with no luck and finally a program that runs thru a step motion would adjust motion speed before moving small steps. The step motion works but has some stuttering I would like to remove. Not sure how the pendant is able to adjust motion speed while its moving but that would be awesome if I could tie into that variable live. I do have the ability to use a PLC for the feedback loop then just feed a analog or digital system back to the robot.




    Cliff notes of program

    Preprogram

    1. Set registers for info about max speed, RPM range, amperage range, length of motion


    Program

    1. Reset counters for diag

    2. Set PR[2]final position as PR[1]initial position.

    3. If loop for seeing if motion has traveled the requested distance if not then its sent inside the speed calc loop

    a. Speed calc loop looks at rpm and amperage before adjusting the register location for speed then adding a incremental movement to the PR[2]

    b. Loop back to start of motion loop.



    Code so far. Needs some cleaning up later




    PR[2:FINAL POS]=PR[1:START] //setting position register 2 to start at the home position of the cut


    R[10:MOVED]=0 //Reseting total distance moved counter. Mainly for my diag during testing.



    J PR[1:START] R[1:CUT_SPEED]% CNT100 //First start position



    LBL [6] //Start of motion loop

    IF R[10:MOVED]<R[9:TOTALDISTANCE mm], JMP LBL[4] //If statement to keep moving arm if not in final spot

    IF R[10:MOVED]>=R[9:TOTALDISTANCE mm], JMP LBL[5] //Jump to end of program due to completed motion





    LBL [4] //Speed loop to see if robot needs to speed up or down

    !INCR

    IF AI[5:RPM]<R[2:RPMLIMIT] OR AI[6:AMPERAGE]<R[3:AMPLIMIT], JMP LBL[1] //If rpm is at max value or below max amp increase movement speed.

    !DECR

    IF AI[5:RPM]>R[2:RPMLIMIT] OR AI[6:AMPERAGE]>R[3:AMPLIMIT], JMP LBL[2] //If rpm is bogging down to hard or amperage is about to blow breaker, slow robot down.



    !INCREASE MOVEMENT SPEED

    LBL[1]

    IF R[1:CUT_SPEED]>=R[R:MAXSPEED], JMP LBL[3]

    R[1:CUT_SPEED]=R[1:CUT_SPEED]+2

    R[4:SPEEDUP]=R[4:SPEEDUP]+1 //VERIFICATION TOOL TO SEE HOW MANY TIMES IT ADJUSTED DOWN


    JMP LBL[3]




    !DECREASE MOVEMENT SPEED

    LBL[2]

    R[1:CUT_SPEED]=R[1:CUT_SPEED]-2

    R[5:SPEEDDOWN]=R[5:SPEEDDOWN]+1 //VERIFICATION TOOL TO SEE HOW MANY DOWN IT ADJUSTED DOWN

    JMP LBL[3]



    LBL[3] //INCREMENT MOVEMENT WITH UPDATED SPEED DATA

    PR[2,2:FINAL POS]=PR[2,2:FINAL POS]+R[11:INCR MOVE]

    R[10:MOVED]=R[10:MOVED]+R[11:INCR MOVE] //UNDERSTAND HOW FAR THE ROBOT HAS MOVED.



    L PR[2:FINAL POS] R[1:CUT_SPEED]mm/sec FINE

    JMP LBL[6] //LOOP BACK TO START OF MOVEMENT ANALYSIS



    LBL[5]





    END

Advertising from our partners