Window detectors

Raise a warning or an emergency stop when an axis’s position, tracking error, velocity, acceleration, torque or setpoint leaves its window.

A window detector watches one value of one axis. While the value stays inside its window nothing happens. Past low or high the application raises a warning; past tooLow or tooHigh it makes an emergency stop.

Using the standard robot GUI?

The robot GUI shows the detectors on its Alarms tab, one row per axis. It shows positions in degrees; the parameters are in rad. See Robot alarms.

PositionWindow panel of the robot GUI in degrees: per axis the input, an Enable switch, and the Too Low, Low, High and Too High levels, each with an indicator
inside the window: no action isHigh isTooHigh time input tooHigh emergency stop high warning low warning tooLow emergency stop

How a detector behaves

  • It latches. Once a level is reached, its output (isLow, isHigh, isTooLow, isTooHigh) stays true until the errors are reset, even if the value comes back.
  • It can wait. With timeWindow set, the value must stay past a level for that many seconds before the detector trips. Use it for noisy values or short spikes at start-up.
  • It only counts while the axes are engaged. The robot application ignores the detectors in Off, Idle, homing and the other states where the axes are not engaged.
  • It must be switched on twice. The detectors in an actuator control loop only run when that loop’s windowDetectorsEnable is 1; it is 0 by default. Each detector also has its own enable, which is 1 by default.

The parameters

Every detector has the same parameters. The values are in the unit of what it watches: rad or m, rad/s, rad/s², Nm.

Parameter What it does Default
enable Switch this detector on 1
low, high Warning levels -0.02, 0.02
tooLow, tooHigh Emergency stop levels -0.05, 0.05
timeWindow Seconds the value must stay past a level before it trips 0
autoreset 1 releases the outputs as soon as the value is back inside, instead of latching 0

To set one up in Desk:

  1. Set root/AxesControl/actuatorControlLoops/actuatorControlLoopNN/windowDetectorsEnable to 1 for each axis.
  2. Open the detector, for example actuatorControlLoop01/positionWindowDetector for the position of axis 1.
  3. Set tooLow below low, and tooHigh above high. Leave some room between the warning and the emergency stop so that the warning comes first.
  4. Set enable to 1, then save the parameter tree.

The detectors

Detector Watches Warning Emergency stop
Setpoint jump How far the setpoint moves in one cycle WA_SETPOINT_JUMP (210) Smooth stop and forced disengage, FD_SETPOINT_JUMP (309)
Position The actual position WA_POSITION_WINDOW_EXCEEDED (201) ES_POSITION_WINDOW_EXCEEDED (601)
Tracking error Position target minus actual position WA_TRACKING_ERROR_WINDOW_EXCEEDED (202) ES_TRACKING_ERROR_WINDOW_EXCEEDED (602)
Velocity The actual velocity WA_VELOCIY_WINDOW_EXCEEDED (204) ES_VELOCIY_WINDOW_EXCEEDED (604)
Acceleration The actual acceleration WA_ACCELERATION_WINDOW_EXCEEDED (205) ES_ACCELERATION_WINDOW_EXCEEDED (605)
Torque The actual torque WA_FORCE_WINDOW_EXCEEDED (203) ES_FORCE_WINDOW_EXCEEDED (603)

The codes are those of the robot application, which receives every detector’s state through the standard base.link.json.


The setpoint jump detector catches a setpoint that jumps, for example a wrong target or a link that suddenly delivers another value. It watches how far the axis setpoint moves in one cycle, before and after the limiter, and takes the larger of the two.

It works on all axes at once, so it does not use windowDetectorsEnable: each axis has its own detector at root/AxesControl/axesSetpointJumpDetectors/windowDetectorNN.

What Details
Unit rad or m per cycle
At low or high Warning WA_SETPOINT_JUMP (210)
At tooLow or tooHigh The axes make a smooth stop and the application forces a disengage, FD_SETPOINT_JUMP (309)
Paused While the axis runs open loop, for example while it is referenced
Standard robot configuration Enabled; low, high at -0.02, 0.02; tooLow, tooHigh at -0.05, 0.05

To choose the levels, work out the largest step a real move makes: the highest velocity times the cycle time. Set high a little above it and tooHigh well above it, and the negative levels the same.


The position window watches the actual position, so it catches an axis that is outside its range whatever the setpoint says. The limiter only keeps the setpoint in range; this detector is the check on the axis itself. It matters most for axes driven by a velocity or torque setpoint.

What Details
Path actuatorControlLoopNN/positionWindowDetector
Watches actuatorPositionActualFiltered, in rad or m
Standard robot configuration Present but disabled, with the default levels

Set low and high just outside the limiter’s position limits, and tooLow and tooHigh a little further out, still inside the mechanical end stops.


The tracking error window watches how far the axis is from where it should be: the position target minus the actual position. A large error means the axis is blocked, has hit something, or the drive or controller is not doing what it should.

What Details
Path actuatorControlLoopNN/positionErrorWindowDetector
Watches actuatorPositionError, in rad or m
Standard robot configuration Present but disabled; high at 0.02 and tooHigh at 0.15

To choose the levels, plot actuatorPositionError in Desk during the fastest moves you make. Set high and low a margin beyond the largest error you see, and tooHigh and tooLow further out.


The velocity window watches the actual velocity, so it catches an axis that moves too fast, for example after a wrong transformation or a drive fault.

What Details
Path actuatorControlLoopNN/velocityWindowDetector
Watches actuatorVelocityActualFiltered, in rad/s or m/s

Set high and low a little beyond the limiter’s velocityLimit, and tooHigh and tooLow further out.


The acceleration window watches the actual acceleration, worked out from the filtered actual velocity. It catches jolts, such as a collision or a sudden drive reaction.

What Details
Path actuatorControlLoopNN/accelerationWindowDetector
Watches actuatorAccelerationActualFiltered, in rad/s² or m/s²

Because it is a derivative, this value is noisy. Set the levels a good margin beyond the limiter’s accelerationLimit, and use timeWindow to ignore short spikes.


The torque window watches the actual torque at the load, which reveals a collision, a blocked axis or a load that is heavier than expected. It exists on axes whose drive reports a torque.

What Details
Path actuatorControlLoopNN/torqueWindowDetector
Watches actuatorTorqueActualFiltered, in Nm

To choose the levels, plot actuatorTorqueActual in Desk during normal work, including the heaviest load. Set high and low a margin beyond what you see, and tooHigh and tooLow below what the mechanics can take.

Next: Tune the controllers, if the drive runs CSV or CST. Otherwise go on to step 4: set up the mechanism.