Problem Description: POS[Axis] Produces No Motion on a Single Enabled Axis
On a SINUMERIK 840D sl control configured with one channel containing four machine axes, the high-level NC language command POS[axis] fails to generate motion when only the addressed axis has its enable signals asserted. The HMI diagnosis page reports the channel and axis as "ready", yet the drive setpoint remains at zero and no position command is released to the drive. Motion is only produced when all four axes in the channel carry their full enable chain simultaneously — a state that is operationally undesirable for a 4-axis machine that must perform independent single-axis positioning moves such as tool change, index table rotation, or tailstock advance.
The symptom is repeatable. POS[axis1] = 100.0 with axis 1 enabled and axes 2-4 disabled produces zero axis setpoint, zero following error, and no NC or drive alarm. The PLC-side interface bytes that the field engineer reports as set correctly are DB3x.DBB0 and DB3x.DBB1 — the axis-specific control image from the PLC to the NCK. Yet the setpoint path from the channel's interpolator to the drive remains blocked.
POS instruction; the missing element is one of the enable signals that the NC requires before the IPO interpolator is permitted to release a setpoint to the addressed axis.SINUMERIK Channel-Axis Architecture and Setpoint Routing
SINUMERIK separates the NC program execution unit (channel) from the motion control unit (axis). A single channel can command many axes, but the command flow crosses two distinct enable barriers before reaching the drive:
- Channel-level enable barrier — gated by channel-interface signals such as the feedrate enable, feedrate override, and rapid-traverse override. This gate decides whether the channel's interpolator is permitted to compute a new position setpoint at all.
- Axis-level enable barrier — gated by axis-interface signals such as controller enable, pulse enable, position-measuring-system selection, and follow-up mode. This gate decides whether an individual axis is allowed to follow a setpoint.
The POS[axis] command is interpreted by the channel interpreter. The channel's interpolator generates the position setpoint for the addressed axis; the setpoint is then routed through the axis interface to the drive. If the channel-level gate is closed, no setpoint is generated regardless of the axis-level configuration. If only the addressed axis has its axis-level gate open while other axes in the channel have theirs closed, the channel's overall "ready to move" condition may still fail — depending on how the PLC program constructs the channel-level gate.
The user's PLC program is configuring the axis-level gate correctly for the addressed axis. The observed behavior (motion only when all four axes are enabled) is a strong indicator that the channel-level gate is being driven by a logical AND of all four axis enable signals. This is a common PLC-programming oversight when the original machine logic was written for a synchronous 4-axis contouring application and was later expanded to include single-axis positioning routines.
POS Command Variants and Their Enable Profiles
SINUMERIK provides several positioning command variants, each with a different execution profile. All of them depend on the channel-level enable gate, but the block-change behavior differs.
| Command | Syntax | Execution Behavior | Block Change | Enable Profile |
|---|---|---|---|---|
POS |
POS[axis] = value |
Traverse to absolute position; block waits until position reached | After position reached | Channel + axis enables |
POSA |
POSA[axis] = value |
Output setpoint, continue NC processing immediately | Immediate | Channel + axis enables |
POSP |
POSP[axis] = (end, length) |
Pendulum positioning; back-and-forth motion | Per oscillation | Channel + axis enables |
MOVE |
MOVE[axis] = value |
Relative incremental distance | After position reached | Channel + axis enables |
SPOS |
SPOS[axis] = value |
Spindle positioning to absolute angle | After position reached | Spindle + axis enables |
For a POS[axis] command to actually move an axis, the NCK requires the following chain of conditions:
- The channel is in AUTO, JOG, or MDI mode (whichever is appropriate for the running program)
- NC Start is active and the program is running (not interrupted, not reset)
- The channel feedrate enable is TRUE
- The channel feedrate override is greater than 0%
- The rapid-traverse override is greater than 0% (only relevant for rapid blocks)
- The addressed axis has its axis enable, controller enable, and pulse enable all TRUE
- At least one position measuring system is selected
- Follow-up mode is not active for the addressed axis
- The drive reports ready (PROFIdrive state word "operation enabled")
- No active NC or drive alarm is blocking motion
If any condition fails, the POS command is decoded but no setpoint is generated. The diagnosis page may show "ready" because the axis itself reports ready — but the channel-level gate is the actual decision point.
PLC-NCK Interface Signals That Gate POS Execution
The following table summarizes the most common PLC-to-NCK interface signals that govern POS command execution on a SINUMERIK 840D sl. Exact bit positions vary by software release; consult the PLC Interface Description (List Manual) for the specific NCK version in service.
| Signal | DB Location | Function | Effect on POS |
|---|---|---|---|
| Channel reset | DB21-30 DBX0.7 | Resets the channel to initial state | If active, blocks all motion and program execution |
| Channel feedrate enable | DB21-30 DBX6.0 | Master enable for feedrate-driven motion | If FALSE, no setpoint is generated for any axis |
| Feedrate override | DB21-30 DBB4 / DBB5 | Programmed feedrate multiplier (0-200%) | If 0%, no setpoint generated |
| Rapid-traverse override | DB21-30 DBX6.7 | Rapid-traverse multiplier | If 0%, rapid blocks blocked (G0, POS in rapid mode) |
| NC Start | DB21-30 DBX7.0 | Program run signal | Required for AUTO/MDI program execution |
| NC Stop | DB21-30 DBX7.1 | Halts program execution | Active = program paused, no new blocks read |
| Axis enable | DB31-61 DBX1.0 | Master enable for the addressed axis | Required for the addressed axis only |
| Controller enable | DB31-61 DBX2.0 | Permits position controller to operate | Required for the addressed axis only |
| Pulse enable | DB31-61 DBX2.1 | Releases drive pulses | Required for the addressed axis only |
| Measuring system 1 | DB31-61 DBX1.2 | Selects encoder 1 | At least one measuring system must be active |
| Measuring system 2 | DB31-61 DBX1.3 | Selects encoder 2 | Alternative to measuring system 1 |
| Follow-up mode | DB31-61 DBX1.1 | Axis position follows actual value | If active, axis does not follow commanded setpoint |
DB21.DBX6.0 (Channel feedrate enable, channel 1) is the master gate. If this signal is FALSE in the PLC, no axis in the channel will move regardless of how the individual axis enables are configured. The user's symptom — "diagnose page shows everything ready, but no feedrate is output to the drive" — is the classic signature of this signal being FALSE while the axis-level signals are TRUE.Root Cause: Channel Feedrate Enable Driven by Global Axis-Enable AND
The most likely root cause of the observed symptom is that the channel feedrate enable signal (DB21.DBX6.0 for channel 1) is being driven in the PLC by a logical AND of all four axis enable bits. This is one of the most common PLC-programming mistakes in 840D sl applications and typically arises from one of three scenarios:
-
Legacy contouring logic: The original PLC program was written for a 4-axis contouring application where all axes are always enabled. The channel feedrate enable is hardwired to a "machine ready" rung that includes a series-AND of all axis enable bits (
DB31.DBX1.0 AND DB32.DBX1.0 AND DB33.DBX1.0 AND DB34.DBX1.0). -
Aggregated machine-ready flag: A single machine-ready flag aggregates all axis states plus safety conditions; the same flag is used as the channel feedrate enable. When any axis is disabled, the aggregated flag is cleared, the channel feedrate enable is cleared, and no
POScommand can produce motion. - Shared interlock logic: A safety or process interlock (ESTOP chain, guard interlock, mode selector, or operator panel signal) is wired such that disabling a non-addressed axis clears the channel feedrate enable. This can be intentional safety design or an accidental side effect of shared logic.
The diagnostic evidence is consistent with the AND-of-all-axes hypothesis. With all four axes enabled, the AND condition is TRUE, the channel feedrate enable is TRUE, and the POS command generates motion. With only the addressed axis enabled, the AND condition is FALSE, the channel feedrate enable is FALSE, and the POS command produces no setpoint output. The diagnosis page shows "ready" because the NC is in a state where the axis interface is satisfied, but the channel-level gate is closed by the PLC.
Inline SVG: Channel-Axis Enable Decision Flow
The diagram illustrates the failure mode. The POS[axis1] command is decoded correctly; the channel-level conditions (mode, NC Start, override) are satisfied; the channel feedrate enable DB21.DBX6.0 is computed as a logical AND of all four axis enable bits. When axis2-4 are disabled, the AND goes FALSE, the channel feedrate enable goes FALSE, and the setpoint is silently blocked without an alarm. The diagnosis page reports "ready" because the channel and axis are not in a faulted state — the gate is simply closed by design.
Step-by-Step Diagnostic Procedure
The following procedure isolates the channel feedrate enable as the gate. It is non-intrusive and uses the SINUMERIK Operate HMI diagnosis pages plus the PLC online monitor.
-
Verify the NC has decoded the POS command. Open Menu → Diagnostics → NC/PLC variables. Navigate to the channel status word (typically
DB21.DBB35andDBB36for channel 1). Verify the channel state is "running" (DBX35.0= active in most versions) and that the program is actively reading blocks. If the channel is "interrupted", "reset", or "stopped", thePOScommand is not being decoded; the issue is upstream. -
Check the channel feedrate enable directly. In the same NC/PLC variables page, navigate to
DB21.DBX6.0(channel 1, channel feedrate enable). Verify this bit is TRUE while thePOScommand is being executed. If this bit is FALSE while motion is expected, the channel gate is closed — record the value and proceed to the next step. -
Trace the source of the channel feedrate enable in the PLC. Open the PLC programming editor (TIA Portal or STEP 7). Use cross-reference or "Go to application" to find every write to
DB21.DBX6.0. Identify the rung or function block that drives the bit. Right-click the input conditions of that rung and use "Monitor" to view live state. -
Identify the gating condition. Inspect the input conditions of the rung driving
DB21.DBX6.0. If the conditions include a series-AND ofDB31.DBX1.0,DB32.DBX1.0,DB33.DBX1.0, andDB34.DBX1.0(or their equivalents), the root cause is confirmed. The fix is to remove the AND-of-all-axes condition from the channel feedrate enable rung. -
Verify axis-level enables for the addressed axis. Navigate to the axis interface DB (DB31 for axis 1, DB32 for axis 2, DB33 for axis 3, DB34 for axis 4). Verify the following are TRUE for the addressed axis:
DBX1.0(axis enable),DBX2.0(controller enable),DBX2.1(pulse enable), and at least one ofDBX1.2/DBX1.3(measuring system 1 or 2). If any is FALSE, the axis cannot move regardless of thePOScommand. - Check the drive enable chain (PROFIdrive). Verify the drive itself is in "Operation enabled" state (PROFIdrive state word bit 0 = 1, bit 1 = 1, bit 2 = 1 in most cases). Check the drive status word for any active fault such as 8020 (speed setpoint limited) or F07900 (drive: motor blocked). If the drive is reporting "enable missing" or a fault, motion is blocked at the drive level.
-
Check the feedrate and rapid-traverse overrides. Verify the channel feedrate override (HMI rapid/feedrate selector) is greater than 0%. Verify the rapid-traverse override is greater than 0% if the
POSblock is being processed in rapid mode. An override of 0% silently blocks the setpoint output with no alarm. -
Check the synchronized-action context. If the
POScommand is being issued from a synchronized action (SYNFCTor motion-synchronous action), verify the synchronized action is actually firing. Use the synchronized-action diagnosis page to confirm the action condition is evaluating TRUE at the IPO cycle. A condition that never fires produces the same symptom as a closed channel gate.
Workaround Assessment: Enabling All Axes in the Channel
The user has identified a temporary workaround: enable all four axes in the channel whenever a POS command is to be executed. The workaround functions because it satisfies the AND-of-all-axes condition that drives the channel feedrate enable. It should be treated strictly as a stopgap. It carries several operational and safety risks that make it unsuitable for production deployment:
- It energizes drives that may not need to be active, increasing IGBT switching losses, motor heating, and contactor wear.
- It defeats selective axis enable, which is frequently used as a safety function during operator access, maintenance, or set-up.
- It can violate machine safety requirements; many OEM safety circuits are designed on the assumption that an axis can be safely disabled independently.
- It can cause unintended motion if a subsequent NC block commands a different axis with all axes enabled.
- It masks the actual PLC logic defect, making the underlying safety problem harder to detect during future maintenance.
The workaround is acceptable for diagnostic purposes only. It can be used to confirm the AND-of-all-axes hypothesis (if enabling all axes restores motion, the hypothesis is correct), but it should not be left in place once the root cause is identified.
Permanent Solution: Correcting the PLC Logic
The permanent fix is to decouple the channel feedrate enable from the axis enable bits. The channel feedrate enable should reflect only channel-wide conditions, not axis-specific ones. Channel-wide conditions typically include:
- The control is in AUTO, MDI, or JOG mode (per mode selector / NCK mode word)
- No active ESTOP at the channel level (hard-wired safety circuit)
- The channel is not in reset state
- The drive system bus (PROFIBUS / PROFINET) is cyclic and in "operational" state
- No NC channel-level alarm is blocking motion
Axis-specific conditions (axis enable, controller enable, pulse enable, measuring system) belong on the individual axis interface DBs (DB31.DBX1.0, DBX2.0, DBX2.1, DBX1.2, DBX1.3) and are evaluated by the NCK independently for each axis. They must not appear in the rung that drives the channel feedrate enable.
The following Structured Text example shows the corrected pattern. It is a simplified illustration; the actual implementation depends on the specific PLC program and the safety architecture of the machine.
// --- Corrected channel feedrate enable logic (channel 1) ---
// Channel-wide conditions only. Axis enables must NOT appear here.
//
// DB21.DBX6.0 := Channel 1 feedrate enable to NCK
//
// Inputs (channel-wide only):
// b_AutoMode : TRUE if NCK is in AUTO or MDI mode
// b_NCStartActive : TRUE while NC Start is asserted
// b_ChannelNotReset : TRUE if channel is not in reset state
// b_DriveBusOK : TRUE if PROFIdrive bus is cyclic & operational
// b_NoChAlarm : TRUE if no active channel-blocking alarm
//
// Axis-specific enables (DB31.DBX1.0, etc.) belong on each axis
// interface and are evaluated by the NCK per-axis. Do NOT add them
// to this rung.
IF b_AutoMode
AND b_NCStartActive
AND b_ChannelNotReset
AND b_DriveBusOK
AND b_NoChAlarm
THEN
"DB21".DBX6.0 := TRUE; // channel feedrate enable ON
ELSE
"DB21".DBX6.0 := FALSE; // channel feedrate enable OFF
END_IF;
// --- Per-axis enable logic (axis 1 example) ---
// Axis-specific conditions only. Do NOT combine axes here.
IF b_Axis1Requested
AND b_Axis1SafetyOK
AND b_Axis1DriveReady
THEN
"DB31".DBX1.0 := TRUE; // axis 1 enable
"DB31".DBX2.0 := TRUE; // axis 1 controller enable
"DB31".DBX2.1 := TRUE; // axis 1 pulse enable
ELSE
"DB31".DBX1.0 := FALSE;
"DB31".DBX2.0 := FALSE;
"DB31".DBX2.1 := FALSE;
END_IF;
Two design rules follow from this pattern:
- Channel-level enables and axis-level enables are independent rungs. The channel feedrate enable is computed from channel-wide inputs. Each axis enable is computed from axis-specific inputs. They do not reference each other.
- Safety gates channel-wide, not axis-wide, for channel-level signals. ESTOP, guard interlock, and similar hard-wired safety circuits should affect the channel feedrate enable and may also kill the axis enables, but they should not cause disabling one axis to block motion on another axis.
Verification Procedure After the PLC Fix
After correcting the PLC logic, verify the fix with the following test sequence. Each test must pass before the machine is returned to production.
| Test # | Setup | Action | Expected Result | Pass Criteria |
|---|---|---|---|---|
| 1 | Enable only axis 1; axes 2-4 remain disabled | Run POS[axis1] = 100.0 in MDI |
Axis 1 moves to 100 mm; axes 2-4 do not move | Position reached on axis 1; no motion on others; no alarm 25201 |
| 2 | Enable all four axes | Run a 4-axis contouring program | All four axes move synchronously per the program | Path is correct; following error within tolerance; no alarm |
| 3 | Enable axes 1 and 2; start POS[axis1]=200 | Mid-motion, disable axis 2 | Axis 1 continues to 200; axis 2 is stopped | Axis 1 reaches target; axis 2 reports "follow-up mode" or alarm; no cross-axis effect |
| 4 | Enable axis 1; POS[axis1] running | Activate channel reset (DB21.DBX0.7) |
Motion stops; no spurious axis alarm | Position setpoint = 0; no alarm 25201; channel shows "reset" |
| 5 | Enable axis 1; disconnect axis 2 drive enable at PROFIdrive | Run POS[axis1] = 50
|
Axis 1 moves; axis 2 reports drive enable missing | Axis 1 reaches 50; axis 2 alarm 21612 or similar; no effect on axis 1 |
| 6 | Set feedrate override to 0% | Run POS[axis1] = 100
|
No motion; no alarm | Setpoint 0; override displayed as 0%; POS command still decoded |
| 7 | Set feedrate override to 100% | Run POS[axis1] = 100
|
Axis 1 moves at programmed velocity | Position reached in expected time; velocity within tolerance |
Safety Considerations and Common Pitfalls
Several safety considerations apply to this fault pattern and its remediation:
- Selective axis enable is often a safety requirement. Disabling a specific axis may be required during maintenance, set-up, or operator intervention. A PLC design that prevents single-axis motion forces the operator to either bypass the disable or to work with the axis enabled — both of which are safety violations.
- Do not mix channel-wide and axis-wide safety signals. ESTOP and similar hard-wired safety circuits should be channel-level signals when they affect the entire channel, and axis-level signals when they affect only one axis. Cross-coupling them creates unpredictable motion behavior and is a common source of safety incidents.
- Alarm 25201 ("Axis not enabled") is the standard alarm. If the NC believes an axis is enabled but the setpoint is still blocked, the cause is almost always upstream of the axis interface. The absence of alarm 25201 in the user's case is consistent with the channel feedrate enable hypothesis, not with an axis enable problem.
- Use the diagnosis page to confirm gating decisions. The SINUMERIK Operate diagnosis pages (Menu → Diagnostics → NC/PLC variables) reflect the actual state of every interface bit. If the diagnosis page disagrees with the PLC program, the PLC program is wrong.
- Document the PLC logic. After correcting the fix, update the PLC documentation to reflect the new structure. Future maintenance engineers will need to know that the channel feedrate enable is decoupled from axis enable bits.
Related Commands and Execution Contexts
The POS command is used in several execution contexts in SINUMERIK NC programming. All of them depend on the same channel-level enable gate, but the failure mode can look different depending on context.
-
Synchronized actions (SYNFCT / ID = 1 syntax):
POS[axis] = valueinside a synchronized action is the most common use case for single-axis positioning. The synchronized action is evaluated at the IPO cycle. If the action condition is never TRUE, thePOScommand is never issued and the diagnosis page shows no motion attempt. If the action condition is TRUE but the channel gate is closed, thePOScommand is issued but no setpoint is generated. - Motion-synchronous actions in the interpolator (ID = 2): Same enable profile as synchronized actions; the difference is execution timing within the IPO cycle.
-
NC part program blocks:
POS[axis] = valuein a part program block is less common; the standard G-code equivalents areG0 axis=value(rapid) orG1 axis=value F=value(linear feed). The enable profile is identical. -
ASL (Action List) and compile cycles: The enable profile is the same. Compile cycles and OEM applications that use
POSin custom ways must follow the same channel-level enable rules. -
Technology cycles and measuring cycles: Many standard Siemens measuring cycles and technology cycles use
POSinternally. If those cycles fail to move a single axis while manualPOScommands work, the issue is in the cycle's enable handling, not in thePOScommand itself.
For comprehensive reference, consult the SINUMERIK 840D sl/840Di sl Programming Manual (Basic) for the POS command definition and the SINUMERIK 840D sl/840Di sl PLC Interface Description (List Manual) for the exact interface signal definitions, bit positions, and timing diagrams. The SINUMERIK 840D sl Diagnostics Manual provides additional troubleshooting flowcharts. All three documents are available through the Siemens Industry Online Support portal at https://support.industry.siemens.com.
FAQ
Why does POS[axis] not move the axis when only that one axis is enabled in a SINUMERIK channel?
The NC has decoded the POS command, but the channel feedrate enable DB21.DBX6.0 is FALSE. This bit is typically driven in the PLC by a logical AND of all axis enable bits; disabling any one axis clears the AND, which clears the channel gate, which blocks the setpoint output. Remove the AND-of-all-axes condition from the channel feedrate enable rung and use per-axis enable bits (DB31.DBX1.0, DBX2.0, DBX2.1) instead.
What is the difference between POS, POSA, and POSP in SINUMERIK NC programming?
POS[axis]=value is an absolute positioning move that holds the block until position reached. POSA outputs the setpoint and continues NC processing immediately. POSP is a pendulum positioning command (back-and-forth motion). All three require the same channel-level and axis-level enable signals to produce motion.
Which interface signals must be TRUE for a POS command to produce motion on a single axis?
Channel-level: DB21.DBX6.0 (feedrate enable), feedrate override > 0%, NC Start active, valid mode. Axis-level for the addressed axis: DB31.DBX1.0 (axis enable), DBX2.0 (controller enable), DBX2.1 (pulse enable), at least one measuring system active (DBX1.2 or DBX1.3), follow-up mode FALSE. Drive must report "Operation enabled" on PROFIdrive.
How do I check the channel feedrate enable state in SINUMERIK Operate?
Navigate to Menu → Diagnostics → NC/PLC variables, enter DB21.DBX6.0 in the variable field, and read the value while the POS command is being executed. TRUE = gate open, motion permitted. FALSE = gate closed, setpoint blocked regardless of axis enable state.
Can I use POS in a synchronized action without enabling all axes in the channel?
Yes, as long as the channel feedrate enable DB21.DBX6.0 is TRUE. The synchronized action itself only requires the addressed axis to have its axis enable, controller enable, and pulse enable set. Other axes in the channel may remain disabled. The synchronized action's condition must also evaluate TRUE at the IPO cycle for the POS command to be issued.