RobotStudio event

How to prevent PP to take many lines advences from last real robot target not reached

Hi, I have a problem with my robot ABB IRB 1600-8/1.2 1600-100605:

This robot is used to apply the glue on a shap.

The shap is presented in front of the robot: so the robot searsh for the hostlift (X position by SearshL horizontalyDi_10_4, store Xpoint ) then go over the shape (MoveL Offs(xpoint,172,0,-60)) and searsh the right distance by SearshL Di10_5 go down until Di10_5 , Store Xpoint. as soon as DI10_5 is  enable. then he have to go to (xpoint,0,0,0), thus it stay. and start drawing http://www.dailymotion.com/video/x54tiv3 

But sometime when he have to go to (xpoint, 0,0,0,) then he move from -5mmx to -25mmx instead of staying. Because when the DI10_1 is enable at 20milimeters away from the target point aimed by previously MoveL Offs(xpoint,172,0,-60), the next Xpoint is recorded at anywhere on previously segment instead of the future segment witch is SearchL\Stop, DI10_5, xpoint, p_final, v20, tool1; and whole draw is wrong about 20mm in X direction http://www.dailymotion.com/video/x54tiv3

In concequence,  when the shap is too up than expected, and instead to register Xpoint exactely at 172,0,-60, it register Xpoint at 152, 0, -xx.
Or do the args: "T_ROB1", "DI10_5", "/MainModule/Routine22/SearchL/1193", "ERR_SIGSUPSEARCH" instead of following the "WHILE DI10_5 = 1 DO"

How can I prevent the PP to jump more than 1, 2, or 3 MAX lines while the robot is not at all at 1 milimeter from the final point (since I used z1 for previously MoveL)
I would like to prevent to add the wait-time please. On other ABB robot we are using for painting, even on very short segments, we have never seen he PP more than 3 lines in advance from last MoveL/MoveC even if there are 20 lines of comments.

Here is the sample of runtime.

Thank you.

Cheers.


PROC Routine4()
        !** SEARSH POSITION X **
        MoveL p430, v400, z1, tool1;
        WaitTime 1;
        SearchL\Stop, DI10_4, xpoint, p420, v20, tool1;
        MoveL Offs(xpoint,172,0,-60), v400, z1, tool1;   !(robot 20mm away from target instead of 1)
        p_final:=xpoint;
        p_finalsup:=xpoint;                                                 !(I would like the PP stay here while robot is more than 1mm from last robtarget because I used Z1 arg)
        p_final.trans.x:=p_final.trans.x+172;
        p_final.trans.z:=p_final.trans.z-90;
        p_finalsup.trans.x:=p_finalsup.trans.x+172;
        p_finalsup.trans.z:=p_finalsup.trans.z-60;
        !** check if robot too many near the shap
        WHILE DI10_5 = 1 DO
        !** memory to alert **
        mem_rebut := TRUE;
        !** put robot away 5mm
        p_finalsup.trans.z:=p_finalsup.trans.z+5;
        MoveL Offs(p_finalsup,0,0,0), v20, z1, tool1;
        WaitTime 0.10;
        ENDWHILE
        !** SEARSH POSITION Z **
        SearchL\Stop, DI10_5, xpoint, p_final, v20, tool1;   !(the PP is here (17 lines in advance) while robtarget is not reashed: thus bug if DI10_5 is enabling, or        supsearsherror if DI10_5 albready enable)
        !** start GUN**
        MoveL Offs(xpoint,0,0,0), v_collage, z10, tool1;
        MoveL Offs(xpoint,20,0,0), v200, z20, tool1;
        !** TIME START GUN**
        WaitTime 0.5;
        SetDO DO10_1, 1;
        !** DRAWING **
        MoveL Offs(xpoint,0,0,0), v200, z20, tool1;
        !**MoveL Offs(xpoint,5,170,0), v_collage, z10, tool1;
        !**MoveL Offs(xpoint,5,230,0), v_collage, z10, tool1;
        MoveL Offs(xpoint,0,265,0), v_collage, z1, tool1;
        MoveC Offs(xpoint,20,305,0), Offs(xpoint,55,320,0), v_collage1, z10, tool1;
        MoveC Offs(xpoint,100,340,0), Offs(xpoint,130,380,0), v_collage1, z10, tool1;
        MoveC Offs(xpoint,150,410,0), Offs(xpoint,180,423,0), v_collage1, z10, tool1;
        MoveL Offs(xpoint,250,423,0), v_collage, z1, tool1;
        MoveC Offs(xpoint,278,410,0), Offs(xpoint,290,390,0), v_collage1, z10, tool1;
        MoveC Offs(xpoint,320,345,0), Offs(xpoint,350,325,0), v_collage1, z10, tool1;
        MoveC Offs(xpoint,380,304,0), Offs(xpoint,390,270,0), v_collage1, z10, tool1;
        MoveL Offs(xpoint,390,-265,0), v_collage, z10, tool1;
        MoveC Offs(xpoint,370,-305,0), Offs(xpoint,335,-320,0), v_collage1, z10, tool1;
        MoveC Offs(xpoint,290,-340,0), Offs(xpoint,260,-380,0), v_collage1, z10, tool1;
        MoveC Offs(xpoint,240,-410,0), Offs(xpoint,210,-423,0), v_collage1, z10, tool1;
        MoveL Offs(xpoint,140,-423,0), v_collage, z10, tool1;
        MoveC Offs(xpoint,120,-415,0), Offs(xpoint,100,-390,0), v_collage1, z10, tool1;
        MoveC Offs(xpoint,80,-350,0), Offs(xpoint,40,-325,0), v_collage1, z10, tool1;
        MoveC Offs(xpoint,15,-310,0), Offs(xpoint,0,-275,0), v_collage1, z10, tool1;
        !**MoveL Offs(xpoint,6,-260,0), v_collage, z10, tool1;
        !**MoveL Offs(xpoint,6,-160,0), v_collage, z10, tool1;
        MoveL Offs(xpoint,0,0,0), v_collage, z1, tool1;
        !** TIME STOP GUN **
        WaitTime 0.47;
        !**  STOP GUN**
        SetDO DO10_1, 0;
        !**  END TO PARK **
        MoveJ p30, v500, z10, tool1;
        MoveL p40, v500, z10, tool1;
        MoveL p50, v500, z10, tool1;
        ! MoveL p60, v500, z10, tool1;
       
    ENDPROC







Comments

  • Hello,
    Did you test with this:
    WaitRob\InPos;

  • Hi, I didn't  know the WaitRob\InPos;
    This instruction has solved the issue.

    However, in some case, I have the sensor's latence witch make the error:
    ERR_SIGSUPSEARCH

    I Have learned that we can force ABB to continue in case of error to make it retry/try next in case of error by using instruction ERROR But when I tried this

    Thus, to prevent to have to validate message and to PP to Main I try to insert in the runtime


    SearchL\Stop, DI10_5, xpoint, p_final, v20, tool1;
    ERROR
    IF ERRNO=ERR_SIGSUPSEARCH THEN
            WHILE DI10_5 = 1 DO
            !** memory to alert **
            mem_rebut := TRUE;
            !** put robot away 5mm
            p_finalsup.trans.z:=p_finalsup.trans.z+5;
            MoveL Offs(p_finalsup,0,0,0), v20, z1, tool1;
            WaitTime 0.10;
            ENDWHILE
    ENDIF

    But in case of error, the ABB seem to go to P_reply and hit to an obstacle without saying "err supervision de mouvement" (Collision)

    How can I manage to continie runtime in case of ERR_SIGSUPSEARCH with prviously instruction please?

    Cheers


  • The error handler must be placed at the end of the routine (immediately before the ENDPROC) - if an error is generated when running the code it will jump to the end of the routine to check if there is an error handler present if not it will use the built in handler and stop the program.

    Is this where you placed your error handler? 

  • Hi, instead to be at the end of the rountime the ERROR instruction was placed just after the
    SearchL\Stop, DI10_5, xpoint, p_final, v20, tool1; because it is only during the SearchL
    I have ERR_SUPSEARCH

    If I understand, should place the ERROR just befor the ENDPROC and write IF ERRNO=ERR_SIGSUPSEARCH THEN ... ENDIF between the error and the ENDPROC

    In fact In case of error ERR_SIGSUPSEARCH, I would like to come back directely to the instruction WHILE DI10_5
    I would like for avery other errors (like colision) to use the built in handler and stop the program.


    Can I use this  structure of runtime?


    PROC Routine4()
            !** SEARSH POSITION X **
            MoveL p430, v400, z1, tool1;
            WaitTime 1;
            SearchL\Stop, DI10_4, xpoint, p420, v20, tool1;
            MoveL Offs(xpoint,172,0,-60), v400, z1, tool1;  
            p_final:=xpoint;
            p_finalsup:=xpoint;                                               
            p_final.trans.x:=p_final.trans.x+172;
            p_final.trans.z:=p_final.trans.z-90;
            p_finalsup.trans.x:=p_finalsup.trans.x+172;
            p_finalsup.trans.z:=p_finalsup.trans.z-60;
            !** check if robot too many near the shap
            WHILE DI10_5 = 1 DO
            !** memory to alert **
            mem_rebut := TRUE;
            !** put robot away 5mm
            p_finalsup.trans.z:=p_finalsup.trans.z+5;
            MoveL Offs(p_finalsup,0,0,0), v20, z1, tool1;
            WaitTime 0.10;
            ENDWHILE
            !** SEARSH POSITION Z **
            SearchL\Stop, DI10_5, xpoint, p_final, v20, tool1;   !I have often the Error Sup Searsh
            !** start GUN**
            MoveL Offs(xpoint,0,0,0), v_collage, z10, tool1;
            MoveL Offs(xpoint,20,0,0), v200, z20, tool1;
            !** TIME START GUN**
            WaitTime 0.5;
            SetDO DO10_1, 1;
            !** DRAWING **
            MoveL Offs(xpoint,0,0,0), v200, z20, tool1;
            MoveL Offs(xpoint,0,265,0), v_collage, z1, tool1;
            MoveC Offs(xpoint,20,305,0), Offs(xpoint,55,320,0), v_collage1, z10, tool1;
            !...;
            MoveL Offs(xpoint,0,0,0), v_collage, z1, tool1;
            !** TIME STOP GUN **
            WaitTime 0.47;
            !**  STOP GUN**
            SetDO DO10_1, 0;
            !**  END TO PARK **
            MoveJ p30, v500, z10, tool1;
            MoveL p40, v500, z10, tool1;
            MoveL p50, v500, z10, tool1;
    ERROR
    IF ERRNO=ERR_SIGSUPSEARCH THEN     
    unknow instructions... 
    MoveL p50, v500, z10, tool1;
    ENDIF
        ENDPROC

    What should I write to make the robot move back directely to the WHILE just befor the         SearchL\Stop, DI10_5, xpoint, p_final, v20, tool1;What happen in case of other error with this rountime?

    Cheers






  • graemepaulin
    edited January 2017
    You could put the while loop in the error handler, with the Retry command after it (which would then return execution to the routine and re-execute the SearchL command)?