SINUMERIK 840D $AA_OVR Axial Feedrate Override Programming Guide

David Krause11 min read
Motion ControlSiemensTechnical Reference
Licensed PE Working through this on a live machine? A Maine-licensed engineer can take it from here — included with IMD hardware, by the hour for everything else. Book an engineer

SINUMERIK 840D $AA_OVR Axial Feedrate Override Programming Guide

On a SINUMERIK 840D-controlled Trumpf laser, the axis-specific feedrate override variable $AA_OVR[axis] cannot be written from the body of a part program. Siemens restricts it to motion-synchronized actions (also called synchronous actions or Synchronaktionen). This reference explains why the naive subroutine in the source question fails, the correct synchronous-action pattern, the OVRA shortcut, and how Trumpf's Technology Table layer interacts with the override path.

Key constraint: Per the SINUMERIK 840D sl / 828D Basic Functions manual (Siemens Support ID 64932982) and the Programming Manual Advanced (PGA), $AA_OVR is read-only/writable only from synchronous actions; the override value is re-applied every IPO cycle.

1. Problem: Why $AA_OVR in a PROC Fails

The original subroutine attempt looks reasonable for a generic NC variable but violates a specific rule:

PROC FOVR(AXIS XPOS=$AA_IM[X], AXIS YPOS=$AA_IM[Y])
DEF REAL PXOVR=$AA_OVR[X]
DEF REAL PYOVR=$AA_OVR[X]
DEF REAL OVERRIDE=120
$AA_OVR[X]=OVERRIDE
$AA_OVR[Y]=OVERRIDE
GO X=XPOS Y=YPOS
$AA_OVR[X]=PXOVR
$AA_OVR[Y]=PYOVR
RET
ENDPROC

Two issues are present:

  1. Wrong execution context. A PROC runs in the part-program interpreter. Writing $AA_OVR[X] from interpreter context raises alarm 12550 "Name $AA_OVR... not defined or option not available" or 14095 "Channel %1 block %2 axis %3 programmed as coupled-motion axis". The interpreter has no runtime presence in the IPO so the system variable is not bound.
  2. Wrong read of a runtime variable. Reading $AA_OVR[X] into a local DEF REAL at PROC definition time captures the value at parse time, not at motion time. Because the override is overwritten by every IPO interpolation step, the captured value is stale by the time the motion starts.

The correct fix is one of the two approaches below.

2. Method A: OVRA in the Part Program (Simplest)

The OVRA[<axis>,<value>] command is the documented interpreter-level path to set the axial override. Allowed range: 0–200% (field practice: 1–200% to avoid the spindle/feed stop at 0%). It writes the same system variable, but does so through the language element, not through an interpreter variable assignment.

N10 G01 X0 Y0 F5000
N20 OVRA[X,150]      ; X-axis feedrate override 150%
N30 OVRA[Y,80]        ; Y-axis feedrate override  80%
N40 G01 X100 Y50 F2000
N50 OVRA[X,100]       ; restore
N60 OVRA[Y,100]       ; restore
N70 M30

OVRA syntax details

Parameter Meaning Range
<axis> Channel axis name (X, Y, Z, ...) All configured path and positioning axes
<value> Override percentage 0–200 (0 = stop, 100 = programmed F)
Modal Persists until next OVRA or reset
Path vs axial Axial — affects only the named axis vs OVR (path feed override)

This solves the original requirement of "override the feedrate switch from NC code" for most 2D laser cutting scenarios without any synchronous-action coding.

3. Method B: $AA_OVR via Synchronous Action

Use a synchronous action when the override must change dynamically based on a condition (analog input, NCK variable, computed state, etc.) rather than on a fixed modal instruction.

ID=2 WHENEVER TRUE DO $AA_OVR[X]=0
ID=3 WHENEVER TRUE DO $AA_OVR[Y]=120

Synchronous action syntax breakdown

Element Meaning
ID=<n> Synchronous action number. Each ID can be started, stopped, and reused.
WHENEVER <cond> Evaluated at every IPO cycle. Cond uses system variables, GUD, global R variables.
WHEN <cond> THEN Edge-triggered alternative — fires once when condition becomes true.
DO <action> Statement executed while condition holds.
DOCYC Like DO but synchronised to interpolator clock instead of servo clock (use for $AA_OVR).
DOCON Counter increments; useful for debounced overrides.

Starting and stopping from the part program

Synchronous actions are launched/stopped from the part program with:

IDS=2                  ; start  ID 2
IDC=2                  ; cancel  ID 2
IDS=3 WHENEVER TRUE DO $AA_OVR[Y]=120    ; definition + start in one line
CANCEL(2)              ; legacy form

Continuous override example (laser cutting with adaptive power)

; GUD declared:
;   NCK INT _OVR_REQ_X = 100
; Synchronous action (loaded in N_OVR_MOD.SPF, called once):

N_OVR_MOD:
IDS=10 WHENEVER TRUE DO $AA_OVR[X]=_OVR_REQ_X
IDS=11 WHENEVER TRUE DO $AA_OVR[Y]=_OVR_REQ_Y
RETV

The part program then changes the GUD value from any block and the override updates every IPO:

N10 G01 X0 Y0 F8000
N20 _OVR_REQ_X = 150  _OVR_REQ_Y = 80
N30 G01 X200 Y100 F5000
N40 _OVR_REQ_X = 100  _OVR_REQ_Y = 100
N50 M30
Timing: Typical IPO cycle on a 840D sl is 2–8 ms depending on machine data MD10071 $MN_IPO_CYCLE_TIME. Every IPO cycle the synchronous action re-applies the override, which is precisely why writing once from a PROC has no lasting effect.

4. Machine Control Panel Override Path

Per the Basic Functions manual (64932982), the operator's handwheel/potentiometer on the machine control panel (MCP) drives $AC_OVR (path feedrate override) and $AA_OVR[axis] for selected axes through the PLC interface.

PLC-side default DB (relevant signals)

DB / Address Bit Name Meaning
DB21.DBX0.6 1 OVR_FACTOR_feedRate Operator feedrate override active
DB21.DBB4 OVR feed / rapid / spindle (32 byte byte-array) Gray-coded position of the rotary switch
DB31.DBX0.7 1 Feedrate-override enable for axis Per-axis enable flag
DB31.DBB0 Override byte per axis 0–200 % in steps of 1 % (or 0.5 %)

When the part program writes OVRA or a synchronous action drives $AA_OVR, the operator's potentiometer is still active unless the PLC explicitly disables it via DB31.DBX0.7. This is a frequent source of "my override didn't take" complaints: the part program set 150 % but the panel commanded 60 %, and the smaller wins.

5. Trumpf Laser-Specific Behaviour

Trumpf TruLaser cells (TLC series) load a Technology Table (extension .tbl) at job start that parameterises cut conditions per material/thickness combination. The Technology Table sets:

  • Base feedrate (programmed F)
  • Gas pressure (N₂, O₂, Ar)
  • Nozzle distance and focus position
  • Pierce / cut / dwell timing
  • Default override profile (often ramped during pierce)

The Technology Table is read by the Trumpf cycle (e.g. CYCLE401-equivalent in the Trumpf compile cycle CC_TRUMPF) and the cut path runs under the table's effective feedrate. OVRA and $AA_OVR still apply on top of the table's feed, so the operator's potentiometer and the table's values multiply.

Trumpf laser families and the override pathway

Machine type Typical controller Override path Note
TruLaser 3030 (flat) SINUMERIK 840D sl MCP pot + Technology Table + part program CC_TRUMPF active
TruLaser Tube / TruLaser Tube 7000 SINUMERIK 840D sl + tube cycle pack Same + tube-specific cutting head kinematics Often an additional Z-axis override for tube axis
TruLaser Cell 7040 (3D) SINUMERIK 840D sl + 5-axis pack Vector-aware override ($AC_OVR, not axial) Use path OVR, not OVRA
TruLaser 1030 (compact) SINUMERIK 840D sl entry-level MCP + table Reduced option set; verify option bits

For 3D cells, prefer path-feed override (OVR) because the tool-path vector is the controlled quantity; an axial override on a single axis would skew the geometry.

6. Common Error Codes and Alarms

Alarm Cause Fix
12550 "Name $AA_OVR... not defined" Option not set, or write attempt outside synchronous action Verify option bit (see §7); move write into IDS action
14095 "Channel %1 block %2 axis %3..." Coupled-motion axis cannot be axially overridden Override the master axis or use OVR
15110 "Channel %1 block %2 axis %3 override = 0 not allowed" Override value outside 0–200 Clamp to 1–200 in GUD or in the synchronous-action expression
16720 "Channel %1 block %2 axis %3 ... synchronous action too long" Synchronous action exceeds 30 µs budget Move heavy logic out of DO clause; use simple assignment
17090 "Channel %1 axis %2 synchronous action not permitted" Sync action references non-existent axis Check AXIS declaration vs MD20070

7. Option and Machine Data Dependencies

Writing $AA_OVR from synchronous actions requires the option bit for "Modifying the axial feedrate override via synchronous actions". Verify on the controller:

; HMI: Commissioning > Options > "Feedrate/rapid override modifiable via synchronized action"
; NCK:
R15 = 100  ; example read of option flag (manufacturer-specific slot)

Relevant machine data

MD Name Typical value Purpose
MD10071 $MN_IPO_CYCLE_TIME IPO clock 2.0–8.0 ms Defines sync-action evaluation period
MD10712 $MN_NCK_VERSION NCK software version Drives availability of $AA_OVR
MD11420 $MN_IPO_REORG_TIME Reorg margin 1.0–2.0 ms Headroom for sync action
MD22000 $MC_AUXFU_ASSIGN_GROUP Auxiliary function group Reserved for override-related M-codes (rare)
MD12080 $MN_OVR_REFERENCE_FACTOR Reference % 1.0 Scales OVR/OVRA values

After changing MD10071, a warm restart (NCK RESET) is required. After modifying option bits, a license reset is required.

8. Worked Example: Time-Indexed Override Profile on a 2D Cut

Goal: pierce at 50 % feed for the first 200 ms, ramp to 150 % over 50 ms, hold at 100 % for the bulk cut, and ramp to 110 % near the end.

; --- GUD definition in _N_DEF_DIR/_N_GUD_DEF.SPF
DEF NCK INT _OVR_CUR = 100
DEF NCK REAL _OVR_START = 0.0
DEF NCK INT _OVR_TARGET = 100
DEF NCK REAL _OVR_RAMP_MS = 0.0

; --- synchronous-action module _N_CST_DIR/_N_OVR_PRF.SPF
N_OVR_PRF:
;   linear ramp driver
IDS=50 WHENEVER _OVR_RAMP_MS > 0
DO $AA_OVR[X] = _OVR_CUR
DO _OVR_CUR = _OVR_CUR + ( _OVR_TARGET - _OVR_CUR ) / _OVR_RAMP_MS
DO _OVR_RAMP_MS = _OVR_RAMP_MS - 1
RETV

; --- part program
N10 G01 X0 Y0 F2000
N20 _OVR_CUR=50 _OVR_TARGET=150 _OVR_RAMP_MS=50
N30 G01 X50 Y50 F2000          ; pierce + ramp
N40 _OVR_CUR=100 _OVR_TARGET=100 _OVR_RAMP_MS=0
N50 G01 X200 Y50 F2000         ; bulk cut
N60 _OVR_CUR=110 _OVR_TARGET=110 _OVR_RAMP_MS=0
N70 G01 X200 Y100 F2000        ; tail-out
N80 IDC=50
N90 M30

The synchronous action evaluates every IPO cycle; the linear coefficient is in units of % per cycle. In a real cut this should be tuned against MD10071.

9. Diagnostics and Verification

9.1 HMI diagnostic screens

  • Commissioning > NCK > Variables > Axis: Watch $AA_OVR[X], $AA_OVR[Y] in real time while the part program runs.
  • Diagnostics > NCK > Synchronous actions: Shows active IDs, conditions, last execution time (should remain < 30 µs).
  • Trace: Record $AA_OVR[X], $AA_IM[X], $AC_FGROUP, and the GUD ramp variables on a single trace to verify timing.

9.2 Quick sanity check (do this before launching a job)

  1. Set MDA > OVRA[X,150] and execute G01 X10 — verify the HMI shows 150 % while motion runs.
  2. Reset (RESET) and confirm $AA_OVR[X] returns to 100 % (or 0 % depending on MD12080).
  3. Launch the synchronous action from MDA with IDS=2 WHENEVER TRUE DO $AA_OVR[X]=120 and watch the HMI; cancel with IDC=2.
  4. Check the alarm history for 12550 / 15110 — both must be clear.

9.3 PLC-side sanity check

Cross-check DB31.DBB0 (axis override byte). If the PLC feeds the override byte, part-program OVRA may be ignored — the PLC has the higher priority depending on MD12010 (configurable per controller build).

10. Field-Proven Pitfalls

  • Stack of overrides. Operator pot (PLC) × part-program OVRA × Technology Table default. Net feed = F × pot% × OVRA%. Document the stack for the operator.
  • Synchronous action never cancelled. A forgotten IDS persists until RESET and will apply on the next program if the IDs collide.
  • Stale GUD. GUD values survive RESET; if the previous job left _OVR_REQ_X=200, the next job starts at 200 %.
  • Option bit missing. A used 840D sl with minimal options will not allow $AA_OVR write from sync actions. Verify in the license menu before debugging code.
  • Wrong axis name. Trumpf tube lasers expose ROT, Z2, etc. that are not in the default channel axis list; they must be declared as positioning axes via MD30550 / MD30560.
  • IPO cycle too long. With many sync actions + heavy logic, MD10071 may be auto-increased; the override "feels" laggy. Move heavy logic out of DO clauses.

11. When to Use Which Method — Decision Matrix

Requirement Method
Simple modal override per NC block OVRA
Override responds to analog input or computed value Synchronous action on $AA_OVR
Time-profiled override (ramp/curve) Synchronous action with state machine in GUD
Override keyed on a part-program signal WHEN edge-triggered sync action
3D cutting head vector override Path OVR, not axial
Operator adjusts via handwheel MCP, no NC change
Material-specific override Trumpf Technology Table, OVRA on top

12. Quick Reference Tables

12.1 Variables

Variable Read/Write Where Range
$AC_OVR R part program 0–200 %
$AA_OVR[axis] RW synchronous action 0–200 %
$AC_PATHN R part program
$AA_IM[axis] R part program / sync

12.2 Commands

Command Scope Notes
OVR Path feed Modal
OVRA Axial Modal, 0–200
OVRRAP Path rapid Modal
OVRRAPA Axial rapid Modal
IDS / IDC Sync action start/cancel From part program

13. Safety and Operator Notes

Safety: Any synchronous action that drives $AA_OVR to 0 during motion effectively stops the axis — verify ESTOP and the operator pot override remain functional. Never wrap a sync action around $AA_OVR in a way that can bypass the safety-rated MCP override unless your risk assessment allows it (Trumpf cells typically route the MCP through the safety PLC, which can still enforce 0 % on estop).

Document each synchronous-action ID in the program header so operators can cancel them with IDC=n from MDA in an emergency.

14. Related Documentation

  • SINUMERIK 840D sl / 828D Basic Functions (Siemens Support ID 64932982)
  • SINUMERIK 840D sl / 828D Programming Manual Advanced (PGA) — synchronous-action reference
  • SINUMERIK 840D sl / 828D List Manual (NC variables — $AA_OVR, $AC_OVR)
  • SINUMERIK 840D sl / 828D Machine Data List (MD10071, MD12010, MD12080)
  • Trumpf Laser Operator Manual — Technology Table format (.tbl)

Why does writing $AA_OVR from a PROC raise "$AA_OVR is not defined"?

Siemens binds $AA_OVR[axis] to the motion-synchronized action context. The interpreter has no IPO presence, so the variable is not visible there. Move the write into a synchronous action (IDS=n WHENEVER TRUE DO $AA_OVR[X]=...) launched from the part program.

What is the difference between OVR and OVRA on a Trumpf laser?

OVR scales the path feedrate (tool-path vector, used for 3D cells and most contouring cuts). OVRA scales the feed of a single named axis (used on 2D flat-bed lasers where you want to slow Y to thin material without slowing X).

Can the operator's potentiometer override an OVRA value?

Yes. The MCP drives DB31.DBB0 per axis and combines multiplicatively with OVRA. To make OVRA authoritative you must disable the MCP override at the PLC side using DB31.DBX0.7.

Do synchronous-action overrides need to be reset between programs?

No — they stop on RESET automatically. But GUD variables you use as the override source are NOT reset by RESET; initialise them in the program header or you may carry stale values between jobs.

What option bit is needed to write $AA_OVR from synchronous actions?

The option is named "Feedrate/rapid override modifiable via synchronized action" under Commissioning > Options on the SINUMERIK HMI. If it is missing, the controller silently ignores the write and the override remains at 100 % — re-arm the option before debugging code.

Back to blog