Solution for Reduced speed on ABB IRB1200 with IRC5 Compact controller and SafeMove


Our robot cell would have:

·         ABB robot IRB1200 5kg 0.9 m,
·         IRC5 Compact controller,
·         Leuze Lidar RSL430 with 2 active protection fields (total stop zone and reduced speed zone),
·         Sick safety PLC CPU0 with CIP Safety module and 2 safety IO modules,
·         SafeMove2 Pro.

With Leuze lidar we would have supervision of two zones, larger one for detecting persons and reducing robot speed. Smaller one for robot total stop if person is inside the safety zone.

In RobotStudio we tested an approach which is working but from safety perspective we do not gain anything as two signals are needed and one must be delayed. The delay is a problematic as person can enter the reduced speed safety zone and the robot is not at appropriate speed jet.

Our current solution.

For test purposes we have two clickable inputs (Figure 1), to simulate a delay:
-          CIP_ReducedSpeed,
-          CIP_ReducedSpeed_Delayed.

Figure 1: Two inputs

The sequence of clicking is always the same:
1. click on CIP_ReducedSpeed
2. click on CIP_ReducedSpeed_Delayed

To reduced overall robot speed, we are using interrupt approach with SpeedRefresh function. RAPID code is attached below, but main part is copied from (6904 ROP White Paper SafeMove.pdf).

MODULE Module1

    CONST robtarget Target_50:=[[400.000015391,-150.000004967,600.000018581],[0.00000005,0,1,-0.000000019],[-1,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];

    CONST robtarget Target_10:=[[303.403900146,150,300],[0,0,1,0],[0,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];

    CONST robtarget Target_20:=[[304.492218018,-150,300],[0,0,1,0],[-1,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];

    CONST robtarget Target_30:=[[597.118713379,-150,300],[0,0,1,0],[-1,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];

    CONST robtarget Target_40:=[[591.680725098,150,300],[0,0,1,0],[0,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];


    !* Interrupt Variables *
    !Interrupt for slow speed
    VAR intnum irSpeedSlow;
    !Interrupt for full programmed speed
    VAR intnum irSpeedFast;

    PROC Path_10()
        MoveJ Target_50,v500,fine,OrodjeTCP\WObj:=wobj0;
        MoveJ Target_10,v500,fine,OrodjeTCP\WObj:=wobj0;
        MoveL Target_20,v1000,fine,OrodjeTCP\WObj:=wobj0;
        MoveL Target_30,v1000,fine,OrodjeTCP\WObj:=wobj0;
        MoveL Target_40,v1000,fine,OrodjeTCP\WObj:=wobj0;
        MoveJ Target_50,v500,fine,OrodjeTCP\WObj:=wobj0;

   PROC main()

   PROC init()
        !Interupt init
        IDelete irSpeedSlow;
        CONNECT irSpeedSlow WITH tSlowSpeed;
        ISignalDI CIP_ReducedSpeed,low,irSpeedSlow;       

        IDelete irSpeedFast;
        CONNECT irSpeedFast WITH tFastSpeed;
        ISignalDI CIP_ReducedSpeed,high,irSpeedFast;


        ! Set initial speed in regard to current state of the input
        IF TestDI (CIP_ReducedSpeed) THEN
            SpeedRefresh 100;
            SpeedRefresh 15;


    !* Trap tSlowSpeed *
    !* *
    !* Interrupt changes speed of all movements to 15% *      
    TRAP tSlowSpeed
        SpeedRefresh 15;

   !* Trap tFastSpeed *
   !* *
   !* Interrupt changes speed to full override *
   TRAP tFastSpeed
        SpeedRefresh 100;

As we can see that signal CIP_ReducedSpeed is linked to the interrupts (high/low state). The highest speed of the robot is set to 1000 mm/s in RAPID program and it can be reduced  This approach is based on RAPID code which by itself is not safe and for this reason we integrated also SafeMove Pro functionalities, function Tool Speed Supervision (global). The maximal speed is set to 250  mm/s.

If we link signal CIP_ReducedSpeed to the Tool Speed Supervision activation input signal, we have a problem as SafeMove stops the robot when speed goes from high to low as speed is not discrete as signal is. For this reason, we added CIP_ReducedSpeed_Delay signal. Both are combined in SafeMove (Safe IO Configuration – Pre Logic) with OR function to new signal named ActivationSignal, figure 2.


Figure 2: OR function

This new signal ActivationSignal is an activation input for Tool Speed Supervision function as shown in Figure 3.

 Figure 3: Tool Speed Supervision function setting (SafeMove Pro)


This approach is working, but delay that must be integrated (we did not manage to delay signal in SafeMove: Delay operator exists) is not making safety zone smaller as we would like. 

Is there a different approach which would solve the reduced speed inside the robot controller or inside the SafeMove module?






  • DavidLanhamDavidLanham United States ✭✭
    There is a lot of good information here and I am very curious if you find a better way to do this?  Because I have had the same issue in the past and I am curious if there is a better way.  Please post back anything you find.  Thank you!

Sign In or Register to comment.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

In this Discussion