Problem Overview: G41/G42 Compensation Failure on SINUMERIK 840D PowerLine
A Danobat turning lathe equipped with a SINUMERIK 840D PowerLine controller running software version SW V9 reports that the cutter path produced by the G41 (compensation left of contour) and G42 (compensation right of contour) commands is geometrically wrong. The control accepts the modal G41/G42 request, does not raise an immediate alarm, but the resulting diameter, surface finish, and corner geometry deviate from the intended part profile. In some cases the program aborts with a TRC alarm on the second or third compensation block.
The behavior reported in the field is characteristic of a configuration mismatch rather than a controller defect: the PowerLine hardware and SW V9 firmware fully support 2D and 3D tool radius compensation on lathes. The compensation direction is therefore a function of (1) the active working plane (G17/G18/G19), (2) the cutting edge position number entered in the tool list, (3) the compensation type (CUT2D / CUT2DF / CUT3D / CUT3DFS) selected in the program or in machine data, (4) the geometric tool radius loaded into the active D offset, and (5) the structural integrity of the approach block.
SINUMERIK 840D PowerLine TRC Fundamentals
Tool radius compensation (TRC, German: Fräserkorrektur, in turning also called Schneidenradiuskompensation SRK) on SINUMERIK controllers is structured around four functional blocks:
- Working plane selection (G17 = XY, G18 = XZ, G19 = YZ). For two-axis lathe turning, G18 is the active plane.
- Compensation activation (G41 / G42) and deactivation (G40) in conjunction with a linear motion block (G0 or G1).
- Cutting edge position for turning tools, a value from 1 to 9 stored in the tool list ($TC_DP7 or the HMI Tool List column "Edge position").
- Compensation type CUT2D / CUT2DF / CUT3D / CUT3DFS / CUT3DCC declared in the part program with CUT2D(...) etc., or defaulted via machine data $SC_CUTTING_EDGE_DEFAULT.
The compensation direction is computed from the relationship between the programmed contour direction and the stored cutting edge position number. If the active plane is wrong, the geometric interpretation flips. If the edge position number is wrong, the offset vector is mirrored across the wrong axis. The end result looks like "G42 going the wrong way," which is exactly the symptom reported.
Lathe Cutting Edge Position Numbers (Siemens Convention)
For turning tools, Siemens uses the same edge-position number convention as DIN/ISO 69873. The position is a single integer 1-9 that orients the tool nose relative to the coordinate system, viewed from behind the tool (i.e., looking from the spindle toward the turret):
| Edge Position | Nose Location | Typical Application |
|---|---|---|
| 1 | Lower right | Front turning, OD above center, rear of toolholder |
| 2 | Upper right | OD turning, neutral toolholder orientation |
| 3 | Upper left | OD turning, conventional right-hand holder (most common) |
| 4 | Lower left | Front face turning, facing operations |
| 5-8 | Diagonal variants | Special holders and inverted geometries |
| 9 | Same as 3 | Reserved for cam-driven entries |
For a typical OD turning pass with a right-hand tool holder, edge position 3 is the standard value. If the operator changed the edge position in the tool list and the compensation direction still appears wrong, the underlying problem is most likely the active plane or compensation type, not the edge position itself. Both edge position 1 and edge position 3 are commonly selected; the program must be reviewed against the physical holder orientation.
Plane Selection Requirements for Turning (G17/G18/G19)
SINUMERIK 840D PowerLine defaults to G18 (ZX plane) on turning channels, but the default can be overridden by a previous M30, by RESET, by a manual MDA block, or by a deliberate G17 or G19 left in the calling program. The plane that is active when G41/G42 is requested determines the compensation vector direction:
- G18 (ZX): Tool offsets normal to the contour in Y. This is the correct plane for two-axis lathe turning (X = diameter, Z = length).
- G17 (XY): Offsets normal to the contour in Z. Wrong for two-axis turning; produces a Z-direction shift that looks like "the tool is climbing in Z while it should be moving in X."
- G19 (YZ): Offsets normal to the contour in X. Wrong for two-axis turning; the tool moves in the wrong diameter direction.
The sample program supplied with the fault report starts at N766 with no explicit plane selection. If the part program was previously run with G17 active and G40 was never re-issued at reset, the subsequent G42 activates against the wrong plane. Insert G18 at the top of the turning program (before any motion block) to lock the plane.
Compensation Type Configuration: CUT2D, CUT2DF, CUT3D, CUT3DFS
The compensation type controls how the tool-radius offset vector is computed relative to the programmed contour. On the 840D PowerLine with SW V9, the available types are:
| Type | Behavior | Typical Use |
|---|---|---|
| CUT2D | 2D compensation in the active working plane; tool radius always applied normal to the contour. Standard for turning. | Lathe OD/ID/profile turning |
| CUT2DF | 2D compensation with the tool radius held constant relative to the holder reference frame. Used when the holder orientation rotates but the programmed contour stays in the same plane. | Multi-spindle lathes with rotating tools |
| CUT3D | 3D compensation, normal to the surface in 3D space; for 5-axis milling. | Mill-turn B-axis machining |
| CUT3DFS | 3D face milling; tool radius applied perpendicular to the tool axis even when the tool is tilted. | 5-axis face milling |
| CUT3DCC | 3D circumferentially constant; for tangential cutting tools. | Profile milling on cylindrical parts |
If CUT3D or CUT3DFS has been activated in machine data $MC_CUTTING_EDGE_DEFAULT or in a prior program and is not reset, the 840D PowerLine will compute the offset vector in 3D and project it onto the active plane. On a two-axis turning channel with no third-axis motion, the projected vector is mathematically undefined or produces a zero-length offset, which manifests as "G41/G42 not working" — the tool follows the programmed contour without any radius offset.
Reset the compensation type explicitly with CUT2D at the beginning of the part program:
N760 CUT2D
Tool Data Requirements for TRC
For G41/G42 to produce a visible offset on a Siemens controller, three tool data elements must be correctly loaded in the active D offset:
| Data | System Variable | Typical Value (Rough OD) | Notes |
|---|---|---|---|
| Tool type | $TC_DP1 | 500 (turning tool) | 500 = turning, plane can be selected automatically |
| Cutting edge position | $TC_DP7 | 3 | Must match physical holder |
| Tool nose radius (geometry) | $TC_DP6 | 0.4 - 1.6 mm | Used for the offset vector |
| Wear radius (optional) | $TC_DP8 | 0.0 mm initially | Adds to geometry radius |
If $TC_DP6 (geometry nose radius) is zero, the controller computes a zero-length offset vector and the G41/G42 call has no geometric effect. The tool still moves along the contour as if G40 were active. Verify with the HMI under Tools > Tool List > Geometry or by reading the system variable in the MDA window:
R10 = $TC_DP6[2,1] ; reads nose radius of T2 D1
R11 = $TC_DP7[2,1] ; reads edge position of T2 D1
R12 = $TC_DP1[2,1] ; reads tool type of T2 D1
If R10 returns 0.0, the radius is not loaded and TRC is mathematically inert.
Programmatic Best Practices for G41/G42 Activation
The activation sequence on a Siemens controller is strict. The compensation call must be on a linear motion block (G0 or G1) that has a defined endpoint; it cannot be on a block with only G2/G3, on a dwell, or on a block with no motion. The approach block must contain a tool-length-compensation-compatible geometry.
Rewriting the sample program to a known-good structure:
N760 CUT2D
N762 G18 ; lock working plane for turning
N764 T2 D1 ; select tool and offset (radius loaded here)
N766 M6 ; tool change (if applicable)
N768 G54 ; work offset
N770 G96 S290 M4 ; constant surface speed, spindle on
N772 LIMS=500 ; spindle speed clamp
N774 G0 Z5 ; safe Z retract
N776 G0 X145 Z3 ; pre-position
N778 G42 G0 X145.5 ; activate G42 on linear approach block
N780 G1 X148.771 Z1.5 F0.4 M8 M11
N782 G1 X150.7 Z-4.836 F0.17
...
The activation of G42 is moved onto a separate G0 block with a small step in the offset direction (X145.5 in this example). This guarantees the controller has a valid linear approach vector to compute the offset against. Activating G42 on the same block as a complex Z-X interpolation (as in the original sample's N778-N780 pair) can produce an undefined approach direction on some SW V9 builds, which yields an offset applied in the wrong axis.
Siemens 840D PowerLine TRC Alarm Reference
The following Siemens alarms are commonly raised when TRC configuration or activation is wrong. Each alarm number should be verified against the specific build of the 840D PowerLine programming manual in use, as alarm text and numbering can shift across SW releases:
| Alarm | Meaning (typical) | Recovery |
|---|---|---|
| 10750 | TRC activated without prior G41/G42 call structure; or wrong plane. | Verify G17/G18/G19 matches operation; insert CUT2D. |
| 10751 | Radius compensation requires G0/G1 in the activation block. | Move G41/G42 onto its own linear motion block. |
| 10752 | Tool radius compensation - contour violation / wrong offset direction. | Check edge position vs. physical holder; check active plane. |
| 10753 | Tool radius compensation - tool nose not considered. | Verify tool type ($TC_DP1) and edge position ($TC_DP7) loaded. |
| 10754 | Tool radius compensation - tool radius = 0 in D offset. | Enter geometry radius ($TC_DP6) in the active D offset. |
| 10755 | Tool radius compensation - tool type inconsistent with operation. | Set tool type to 500 for turning; recompile tool list. |
| 10760 | TRC - contour calculation overflow. | Reduce block length; avoid sub-micron motion blocks in compensation. |
Alarms 10750-10755 are the most likely candidates when the symptom is "controller accepts G42 but path is geometrically wrong."
Root Cause Matrix and Symptom Mapping
| Symptom | Most Likely Root Cause | Diagnostic Step |
|---|---|---|
| G42 produces path in -X instead of +X | Wrong edge position (1 instead of 3 or vice versa) | Read $TC_DP7, compare to physical holder |
| G42 has no effect at all; tool follows contour | Geometry radius ($TC_DP6) = 0, or CUT3D active in 2D turning | Read $TC_DP6 and $MC_CUTTING_EDGE_DEFAULT |
| Tool climbs in Z while G42 active | Wrong plane (G17 instead of G18) | Force G18 at program top; check reset state |
| Alarm 10751 immediately on G42 block | G42 on non-linear or non-motion block | Restructure activation block as G0/G1 with explicit endpoint |
| Alarm 10752 partway through the profile | Contour too tight for tool radius | Reduce depth of cut or use larger tool |
| Wrong path on first G42 block only, then correct | Edge position right but approach direction wrong | Add dedicated G42 activation block with small X step |
| Wrong path on every run, same geometry | Tool list entry corrupted (e.g., wrong D-offset) | Recreate D-offset from tool list; re-load from backup |
Step-by-Step Diagnostic Procedure
- Confirm the SW V9 firmware build. From the HMI main screen, navigate to Diagnosis > Version > NCK and read the build identifier. Cross-reference against the Siemens 840D PowerLine programming manual for the controller's series to confirm which compensation features are supported.
-
Force the working plane. Insert
G18at the top of the part program before any motion. If the path is corrected, the previous program left G17 or G19 modal and was never reset. -
Force the compensation type. Insert
CUT2Dimmediately afterG18. CUT2D is the correct type for two-axis turning and forces the controller to ignore any inherited CUT3D or CUT3DFS state. -
Deactivate before reactivating. Add
G40on its own G0 motion block before each G41/G42 activation. This ensures the controller cleanly exits the compensation state and re-enters with the correct vector. - Restructure the activation block. Move the G42 call onto its own G0 block with a small step in the intended offset direction (for OD turning above the centerline, step in +X by the tool nose radius). The subsequent G1 block carries the programmed contour, not the activation.
- Verify the tool data. In the HMI Tool List, open the active D offset for T2 D1. Confirm tool type 500, edge position 3, and a non-zero nose radius. If the tool data has been imported from a CAM system, manually re-enter the values to overwrite any import artifacts.
- Check machine data. Inspect $MC_CUTTING_EDGE_DEFAULT, $MC_SUMCORR_DEFAULT, and $MN_MM_TOOL_MANAGEMENT_MASK. These determine the system-wide default compensation behavior; a change here affects every program that does not declare CUT2D explicitly.
- Test with a known-good profile. Replace the production program with a single OD turning pass (G0 X100 Z3, G42 G0 X100.4, G1 X102 Z-50 F0.2, G40 G0 X150). If this passes, the issue is in the program structure, not the controller.
- Recompile the tool list. If the tool data is correct but G42 still appears wrong, delete and recreate the D offset for T2 from scratch in the HMI. Backup the tool list first via Tools > Backup > Tool List.
Fusion CAM Compatibility and Smoothing
If the part program was post-processed from Autodesk Fusion, an additional source of G41/G42 path deviation is the post-processor's Smoothing setting. Fusion's Smoothing option inserts short intermediate blocks (typically splines converted to line/arc approximations) between the original contour segments. On controllers with strict block-look-ahead limits — and the 840D PowerLine SW V9 has a smaller look-ahead buffer than the 840D sl — the smoothing blocks can be too short for the controller's TRC look-ahead, producing false alarms or an offset applied to the wrong segment.
To eliminate this variable, disable Smoothing in the Fusion toolpath setup, regenerate the G-code, and re-test. Detailed guidance is available in the Autodesk support article G41/G42 interference error when run on the machine an NC code created in Fusion.
Verification Procedure
After applying the corrections above, validate the fix with a structured test:
- Dry-run single block. Run the corrected program in Single Block mode from MDA. Confirm each block executes without alarm, and the displayed tool path trace on the HMI matches the programmed contour plus the radius offset.
- Air-cut test. Run the full program with the tool lifted 5 mm above the part (G0 Z+5 before G42). Confirm the displayed trace matches the expected offset path with no alarm.
- First-cut test on aluminum or soft steel. Measure the first diameter with calipers or a micrometer before proceeding to the next operation. A correctly compensated tool will hit the nominal diameter ±0.02 mm; an incorrect compensation will deviate by the full nose radius (typically 0.4 - 1.6 mm).
-
Verify modal state at M30. At program end, the active modal display should show G40, not G41/G42. If G41/G42 persists across M30, the controller is in a stuck modal state; insert an explicit
G40cancellation block at program end. - Lock the configuration. Once correct, back up the tool list, the machine data ($MC_*), and the compensated program. Future SW V9 reloads will not regress the working setup.
Long-Term Reliability Notes
On SINUMERIK 840D PowerLine controllers, three recurring causes of "G41/G42 going wrong" appear across multiple sites: (a) tool list values overwritten by a CAM import, (b) program fragments copied from milling operations that left G17 active, and (c) a CUT3D or CUT3DFS default that was set by a prior commissioning engineer for mill-turn and never reverted. All three are configuration issues, not firmware faults. The PowerLine SW V9 firmware does not have a known G41/G42 defect that causes compensation direction reversal on correctly configured channels.
For commissioning new turning programs on the same controller, adopt a standard header:
;*** STANDARD TURNING HEADER ***
G18 G54 G90 G95
CUT2D
G0 Z100
;*** END HEADER ***
This header locks the plane (G18), sets the work offset (G54), forces absolute mode (G90), sets feed-per-revolution (G95), and forces 2D compensation (CUT2D) regardless of any prior modal state. The header should be the first non-comment block of every turning program on this controller.
For official documentation references and field advisories, the primary resource is the Siemens Industry Online Support portal at support.industry.siemens.com, where controller-specific programming manuals, alarm help texts, and machine data references for the 840D PowerLine series are maintained.
Why does G42 produce a path in the wrong X direction on my 840D PowerLine lathe?
The most common cause is the cutting edge position number ($TC_DP7) not matching the physical tool holder orientation. For OD turning with a right-hand holder, edge position 3 is standard. Verify the value in the HMI Tool List against the actual holder and reread the value with R10 = $TC_DP7[2,1] in MDA.
Can the active plane cause G41/G42 to appear "not working" without an alarm?
Yes. If G17 (XY) or G19 (YZ) is active instead of G18 (ZX) on a two-axis turning channel, the controller computes the offset vector in the wrong plane. The compensation is mathematically valid but geometrically misaligned. Insert G18 at the top of the program to lock the plane.
What Siemens alarm indicates that G41/G42 was activated on a non-linear block?
Alarm 10751 ("Radius compensation activated without G0/G1" or similar wording) is raised when G41 or G42 is called on a block that does not contain a linear motion with a defined endpoint. Move the G41/G42 call onto its own G0 or G1 block with an explicit endpoint.
Does SINUMERIK 840D PowerLine SW V9 have a known G41/G42 firmware bug?
No firmware defect in SW V9 reverses compensation direction on a correctly configured channel. All reported "G41/G42 wrong direction" cases on this platform trace back to configuration: active plane, cutting edge position, compensation type, or zero tool radius in the active D offset. Check these four items before suspecting the firmware.
How do I reset the compensation type from CUT3D back to CUT2D?
Insert CUT2D in the part program at the start of the turning operation. The declaration is modal and persists until overridden. To force a permanent default, change machine data $MC_CUTTING_EDGE_DEFAULT to 0 (CUT2D) and save with the controller in commissioning mode.