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.
$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:
-
Wrong execution context. A
PROCruns in the part-program interpreter. Writing$AA_OVR[X]from interpreter context raises alarm12550"Name $AA_OVR... not defined or option not available" or14095"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. -
Wrong read of a runtime variable. Reading
$AA_OVR[X]into a localDEF REALat 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
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)
- Set
MDA > OVRA[X,150]and executeG01 X10— verify the HMI shows 150 % while motion runs. - Reset (
RESET) and confirm$AA_OVR[X]returns to 100 % (or 0 % depending on MD12080). - Launch the synchronous action from
MDAwithIDS=2 WHENEVER TRUE DO $AA_OVR[X]=120and watch the HMI; cancel withIDC=2. - 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
IDSpersists untilRESETand 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_OVRwrite 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
DOclauses.
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
$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.