SIMODRIVE 611U On-Fly MDI Position Change: Block-Change Setup

David Krause15 min read
Motion ControlSiemensTroubleshooting
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

Problem Description

A SIMODRIVE 611U servo drive equipped with the positioning module 6SN1118-1NH01-0AA1 on firmware 14.02, configured for MDI (Manual Data Input) mode 0x30 (relative, positive direction), exhibits the following fault behavior: when the PLC updates the MDI position setpoint and toggles control word bit 0.6 ("Start positioning task") while the axis is mid-motion, the drive first decelerates the motor toward the original target, then re-accelerates from near zero to the new target velocity. The expected engineering outcome is continuous path motion - equivalent to SINUMERIK G64 continuous-path mode - without the intermediate stop. The symptom is visible on the SimoComU trace as a sharp V-shaped velocity trough at the moment of the new trigger event.

Engineering impact: A zero-crossing of velocity on a rotary axis that is supposed to traverse across the modulo boundary (e.g., 359 degrees to 200 degrees absolute, traversing the short way) creates a mechanical shock, increases cycle time, and on web-handling or printing machines produces visible registration errors. The behavior is symptomatic of a "block change with exact stop" interpretation rather than the required "block change with continue."

Affected Hardware and Firmware

Item Value Notes
Drive family SIMODRIVE 611U Siemens catalog, 6SN11xx series
Positioning module 6SN1118-1NH01-0AA1 MLFB / part number
Firmware version 14.02 Reported on drive display / SimoComU
Control platform SIMATIC S7-300, CPU 319 STEP 7 V5.x or TIA Portal
HMI SIMATIC TP900 Comfort Operator panel
MDI mode 0x30 (relative, positive) STW2 mode field
Axis type Rotary (modulo) P0170 = 1, P0171 = 360000 LU

Root Cause Analysis

The deceleration/re-acceleration artifact originates from one of four independent causes. On a 611U the symptom rarely maps to a single parameter. Each must be verified before the on-the-fly behavior is restored.

1. Block-change condition is set to "exact stop"

The 611U positioning module interprets a new MDI setpoint plus a new rising edge of bit 0.6 according to the "block change condition" parameter. The factory default for firmware 14.x is exact-stop with ramp, meaning the axis must reach the previous setpoint within a positioning window before the new setpoint becomes active. When the bit is toggled mid-motion, the drive executes the deceleration ramp of the in-flight task, then the acceleration ramp of the new task. The two ramps touch at zero velocity and the velocity trace shows a V-shaped trough.

2. Acceleration and deceleration overrides are zero or too small

Parameters P0093 (MDI acceleration override) and P0094 (MDI deceleration override) scale the MDI acceleration/deceleration values defined in P0100 / P0101. If either override is 0% - for example because a previous commissioning session limited the override - the axis decelerates with the maximum allowed ramp (which appears as a very fast stop, not "zero"). More commonly, the override is left at 100% but the MDI acceleration itself was left at the conservative 100 ms factory default; the axis then has a soft ramp that visually mimics "smooth" motion but is still exact-stop.

3. Reference point / referencing is not complete

Writing 0 into P0160 (Reference point coordinate) is not equivalent to running the "Referencing" sequence. P0160 only stores the coordinate value the drive will assign to the reference cam position. The referencing sequence (search for reference cam switch, synchronise to zero marker, latch to P0160) must be executed at least once after power-up - otherwise the absolute position value is "unknown" / "not referenced", and the drive internally treats every new traversing task as a fresh start with full ramp-down of the prior motion. This is a documented firmware behavior of 611U from FW 13.x onward.

4. Telegram mapping does not match parameter bank

The position setpoints are written to PZD words 4 and 5 of the standard positioning telegram. If the HW Config telegram selected in STEP 7 (e.g., Siemens telegram 105) does not match the parameter bank assignment in P0875 (telegram selection) on the 611U, the words are interpreted as different quantities (e.g., velocity override instead of position), and the drive triggers an internal abort because the setpoint stream is inconsistent.

Telegram and Control Word Reference

For positioning tasks via PROFIBUS, the 611U expects one of the Siemens-specific telegrams 102, 103, 104, or 105. The bit 0.6 trigger ("Start positioning task") is bit 6 of control word 1 (STW1), in the PROFIdrive convention.

PZD Telegram 105 (Siemens) Direction Content
PZD1 STW1 / ZSW1 PLC -> Drive / Drive -> PLC Control word 1 / Status word 1
PZD2 STW2 / ZSW2 Bidirectional Control/Status word 2 (MDI mode)
PZD3 MDI_TARPOS / ACTPOS PLC -> Drive / Drive -> PLC MDI target position (high word) / Actual position (high)
PZD4 MDI_TARPOS / ACTPOS PLC -> Drive / Drive -> PLC MDI target position (low word) / Actual position (low)
PZD5 MDI_VEL / ACTVEL PLC -> Drive / Drive -> PLC MDI velocity setpoint / Actual velocity
PZD6 MDI_ACC / MDI_DEC PLC -> Drive MDI acceleration / deceleration override

Position format is 32-bit signed integer with 1 increment = 1 LU (length unit). The default LU for a rotary axis configured with P0170 = 1 and P0171 = 360000 is 0.001 degree per increment - i.e., 360000 LU per revolution.

Control word 1 (STW1) bit assignments

Bit Name Function in positioning
0 ON / OFF1 Drive enable
1 OFF2 Coast stop (low active)
2 OFF3 Quick stop (low active)
3 Enable operation Inverter enable
4 Enable ramp generator Ramp generator enable
5 Unfreeze ramp generator Unfreeze
6 Enable setpoint / start positioning Activates traversing task (0->1 = start)
7 Fault reset 0->1 = acknowledge fault
8-15 Mode / reserved MDI mode bits and additional functions

Bit 0.6 is the rising-edge trigger the PLC toggles to start a new MDI task. The firmware samples this bit on the PROFIBUS cycle. The new task is accepted only if the bit was previously at 0 - a static 1 does not re-trigger.

Configuration Steps for Smooth On-the-Fly Position Changes

Perform the following sequence using SimoComU (commissioning tool, RS232 service port on the 611U) or via parameter download from STEP 7. The drive must be in the "Parameterise" state (no enable) during writes.

Step 1 - Select the correct MDI mode

Confirm the mode word the PLC writes. For absolute positioning in the positive direction (so a 359 degrees to 200 degrees move traverses the short way across the modulo boundary), use mode 0x10 or 0x50 instead of 0x30. With 0x30 (relative positive), the drive computes a delta from the live position and selects direction based on sign; this is fine for a fixed-delta move but causes wrap-around issues for arbitrary target jumps.

STW2 (PZD2) = 16#0010   // MDI absolute, positive direction
STW2 (PZD2) = 16#0050   // MDI absolute, positive direction with bit flags

Step 2 - Set block-change condition to "continue"

The block-change condition lives in the position-controller parameter set. On firmware 14.x it is parameter P0140 (block change condition for positioning).

P0140 value Behavior Use case
0 Exact stop, fine Holding fixtures, indexing tables
1 Exact stop, coarse Indexing with reduced window
2 Continue with ramp (on-the-fly) Continuous-path motion, registration
3 Continue without ramp High-speed registration, only valid for short deltas

For continuous-path motion analogous to SINUMERIK G64, set P0140 = 2. The axis will now accept a new traversing task mid-motion and transition the velocity profile continuously, without decelerating to zero.

Caution: Setting P0140 = 3 ("continue without ramp") produces a step change in velocity at the new target. Use only when the velocity difference between consecutive tasks is small - for example, on registration correction axes where the correction magnitude is below 5% of the feed velocity. For arbitrary 359 degrees to 200 degrees moves, always use P0140 = 2.

Step 3 - Size the acceleration and deceleration overrides

The MDI acceleration/deceleration ramp times are defined in P0100 (acceleration ramp) and P0101 (deceleration ramp), with units of milliseconds for a velocity change from 0 to rated. The overrides P0093 and P0094 scale these ramps.

Override scaling formula:

P0093 = (P0100 / desired_MDI_accel_ms) * 100 [%]
P0094 = (P0101 / desired_MDI_decel_ms) * 100 [%]

For a continuous-path application, set both overrides to 100% and reduce P0100/P0101 directly until the velocity profile is smooth at the highest expected block-change frequency. A typical value for a packaging rotary axis is 200-500 ms for the full 0 to v_max ramp.

Step 4 - Configure the axis type for modulo motion

Parameter Value Meaning
P0170 1 Axis type = rotary
P0171 360000 Modulo range in LU (0.001 degree resolution)
P0172 1 Direction convention: positive = mathematical positive
P0173 1 Position display in 0.001 degree

With the rotary axis active, the drive automatically handles wrap-around at 0/360 degrees and selects the shortest path for absolute MDI moves by default. This is the behavior required for the 359 degrees to 200 degrees move described in the application: a 161 degrees positive move rather than a 199 degrees negative move.

Step 5 - Run the referencing sequence

Before any on-the-fly operation is attempted in production, complete the referencing sequence:

  1. Ensure the reference cam is wired to the positioning-module input.
  2. Start the reference-point travel via P0174 = 1 (start reference point travel in positive direction) or use the SIMATIC FB POS_REF call.
  3. Wait for the status bit "Referenced" (ZSW1 bit 0.11 = "Reference point set") to assert.
  4. Verify the actual position reads the value stored in P0160 (default 0).

If the system is a single-turn rotary axis with an absolute encoder (e.g., Singleturn SSI), referencing is required only once after commissioning and is retained across power cycles. With a multi-turn encoder, no referencing is required.

PLC Programming Example (S7-300, Structured Text)

The following ST function block implements the on-the-fly MDI position change. The block runs in OB1 (cyclic) and writes to the I/O area of the positioning module via SFC14 / SFC15 (consistent data write).

FUNCTION_BLOCK FB850 "MDI_OnFly_Positioning"
VAR_INPUT
    iAxisEnable   : BOOL;          // Master enable from safety chain
    iNewTarget    : BOOL;          // Trigger: new target available
    iTargetPos    : DINT;          // Target position in LU (rotary, 0..359999)
    iVelocityLUps : DINT;          // MDI velocity in LU/s
END_VAR
VAR_OUTPUT
    oInMotion     : BOOL;          // ZSW1 bit 0.14 (motion status)
    oAtTarget     : BOOL;          // ZSW1 bit 0.10 (target reached)
    oFaulted      : BOOL;          // Fault active
END_VAR
VAR
    sState        : INT;           // 0=idle, 1=await_edge, 2=ack
    sTrigPrev     : BOOL;          // Edge memory
    sSTW1         : WORD;          // Control word 1
    sSTW2         : WORD;          // Control word 2 (MDI mode)
    sTarPos       : DWORD;         // PZD3+PZD4 (32-bit position)
    sVel          : WORD;          // PZD5 (velocity, N2 format)
    sAccDec       : WORD;          // PZD6 (override)
    sSendBuf      : ARRAY[0..11] OF BYTE;  // Telegram 105 output
END_VAR
BEGIN
    // Build control word 1: enable drive, no fault, ramp enabled
    sSTW1 := 16#004F;  // bits 0,1,2,3,6 set => ON, no OFF2/OFF3, enable op, enable setpoint
    // MDI absolute, positive direction (P0140=2 makes this on-the-fly capable)
    sSTW2 := 16#0010;
    // Override 100% on both acceleration and deceleration
    sAccDec := 16#64;  // 100 in low byte, 100 in high byte per telegram spec
    // Convert velocity to N2 (Siemens normalized) format
    sVel := WORD(iVelocityLUps / 100);  // example scaling; tune per P0200
    sTarPos := DWORD(iTargetPos);
    // State machine for edge-triggered start
    IF iAxisEnable THEN
        CASE sState OF
            0:  // idle - bit 0.6 LOW, awaiting trigger
                sSTW1 := sSTW1 AND (NOT 16#0040);  // clear bit 6
                IF iNewTarget AND NOT sTrigPrev THEN
                    sState := 1;
                END_IF;
            1:  // bit 0.6 HIGH - drive starts new task
                sSTW1 := sSTW1 OR 16#0040;          // set bit 6
                IF oInMotion THEN
                    sState := 2;
                END_IF;
            2:  // motion active - release bit 0.6 immediately
                sSTW1 := sSTW1 AND (NOT 16#0040);  // clear bit 6
                IF NOT iNewTarget THEN
                    sState := 0;
                END_IF;
        END_CASE;
    END_IF;
    sTrigPrev := iNewTarget;
    // Fault latch
    IF oFaulted THEN
        sSTW1 := 16#0080;  // only fault reset bit
    END_IF;
    // Pack telegram 105 into sSendBuf
    sSendBuf[0]  := LO(WORD_TO_BYTE(sSTW1));
    sSendBuf[1]  := HI(WORD_TO_BYTE(sSTW1));
    sSendBuf[2]  := LO(WORD_TO_BYTE(sSTW2));
    sSendBuf[3]  := HI(WORD_TO_BYTE(sSTW2));
    sSendBuf[4]  := BYTE(sTarPos);
    sSendBuf[5]  := BYTE(SHR(DWORD_TO_DINT(sTarPos),8));
    sSendBuf[6]  := BYTE(SHR(DWORD_TO_DINT(sTarPos),16));
    sSendBuf[7]  := BYTE(SHR(DWORD_TO_DINT(sTarPos),24));
    sSendBuf[8]  := LO(WORD_TO_BYTE(sVel));
    sSendBuf[9]  := HI(WORD_TO_BYTE(sVel));
    sSendBuf[10] := LO(WORD_TO_BYTE(sAccDec));
    sSendBuf[11] := HI(WORD_TO_BYTE(sAccDec));
    // Write to drive via SFC15
    // CALL SFC15 (LADDR := 256, RECORD := sSendBuf, RET_VAL := iRetVal);
END_FUNCTION_BLOCK
Note on the edge discipline: The drive samples bit 0.6 on each PROFIBUS cycle. Holding bit 0.6 statically at 1 does not retrigger; only a 0 to 1 transition starts a new task. Releasing bit 0.6 too early (within the same cycle that asserted it) can cause a "task not accepted" event. The state machine above guarantees a minimum high-time of one OB1 cycle and releases the bit as soon as the drive acknowledges motion (ZSW1 bit 0.14 = "Motion active").

Verification Procedure

  1. Configure the trace in SimoComU to record at 4 ms sample rate: actual position, actual velocity, control word 1 (STW1), status word 1 (ZSW1).
  2. Start an MDI move from 190 degrees to 200 degrees at 2000 degrees/s with P0140 = 0 (baseline exact stop). Confirm a V-shaped velocity trough at the moment of trigger - this validates the trace setup.
  3. Change P0140 to 2, repeat the move. Confirm continuous velocity across the trigger event with no zero-crossing.
  4. Run a 359 degrees to 200 degrees absolute move across the modulo boundary. Confirm the drive selects the 161 degrees positive direction, not the 199 degrees negative direction.
  5. Verify ZSW1 bit 0.11 (referenced) = 1 before the on-the-fly test.
  6. Run the cycle 100 times. Confirm no F-class faults in the diagnostic buffer.

Diagnostic Buffer Entries to Watch

Fault code Meaning Action
F021 Setpoint step too large for block-change "continue without ramp" Increase P0100/P0101 or use P0140 = 2
F022 Referencing not complete during absolute move Run referencing sequence
F033 Axis not enabled (OFF2/OFF3 active) Check STW1 bits 1, 2
F041 Telegram configuration mismatch Match STEP 7 HW Config to P0875
F100 Following error exceeded window Increase P0321 or reduce acceleration

Troubleshooting Matrix

Symptom Likely cause First check Fix
Velocity goes to zero between MDI tasks Block-change condition = exact stop Read P0140 P0140 = 2
Drive faults F022 at startup Reference not set Read ZSW1 bit 0.11 Run referencing
Move direction reversed at 359 to 200 deg Modulo handling wrong Read P0170/P0171 P0170 = 1, P0171 = 360000
Position setpoint ignored after new trigger Bit 0.6 toggled too fast PLC trace Add minimum high-time of 2 PLC cycles
Mechanical shock at block change P0140 = 3 (continue without ramp) Read P0140 P0140 = 2, verify P0100/P0101
Cycle time increases 50% on the fly Drive reverts to ramp-down on each trigger Read P0093, P0094 Override 100%

Engineering Notes and Field-Proven Caveats

On-the-fly changes and absolute encoders

If the axis uses a multi-turn absolute encoder (e.g., Heidenhain EQN 1325 connected via EnDat), referencing is required only once after battery replacement. However, an absolute encoder does not by itself enable on-the-fly changes - the firmware-level block-change condition (P0140) must still be set to "continue."

Velocity scaling for rotary axes

For a rotary axis with P0171 = 360000 LU/revolution, the MDI velocity is set in LU/s. Convert from RPM with:

v_LU_per_s = (RPM / 60) * 360000

For 2000 deg/s = 333.33 rpm = 200000 LU/s. The N2 scaling against reference speed P0200 (default 3000 rpm = 1800000 LU/s) yields N2 = 200000 / 1800000 x 16384 ~ 1819.

Acceleration ramp timing

The acceleration ramp P0100 is specified in ms for 0 to rated velocity. For a rotary axis rated at 3000 rpm and an MDI velocity of 2000 deg/s:

  • Actual ramp time = P0100 x (2000 / 18000) ms (if 3000 rpm = 18000 deg/s)
  • For 500 ms desired ramp at 2000 deg/s: P0100 = 500 x 18000 / 2000 = 4500 ms

Multi-block changes at high frequency

If the PLC must issue a new MDI task every 5-10 ms (registration correction), the PROFIBUS cycle time must be <= 4 ms. Set DP cycle in HW Config to 3 ms and ensure no other slaves share the bus segment.

Differences from SINUMERIK 840D

611U with positioning module does not interpret G-code. The equivalent of G60 (exact stop at block end) is P0140 = 0. The equivalent of G64 (continuous-path mode) is P0140 = 2. The equivalent of G64 with tolerance is P0140 = 3 plus P0321 (positioning window) for tolerance.

Related Parameters Quick Reference

Parameter Function Typical value
P0093 MDI acceleration override 100 %
P0094 MDI deceleration override 100 %
P0100 Acceleration ramp time (0 to rated) 1000-4500 ms
P0101 Deceleration ramp time 1000-4500 ms
P0140 Block change condition 2 (continue, on-the-fly)
P0160 Reference point coordinate (LU) 0
P0170 Axis type 1 (rotary)
P0171 Modulo range (LU) 360000
P0200 Reference speed for normalization 3000 rpm (default)
P0321 Positioning window (LU) 100 (0.1 deg)
P0875 Telegram selection 105

Why does the drive decelerate to zero between two MDI tasks even though I just toggle bit 0.6?

The 611U positioning module defaults to exact-stop block change (P0140 = 0). Each new traversing task requires the previous one to reach its target before the next one starts, which produces a full deceleration to zero. Set P0140 = 2 ("continue with ramp") to enable on-the-fly transitions.

What is the difference between P0160 = 0 and "referencing complete"?

P0160 only stores the coordinate value that will be assigned to the reference point (default 0). It does not perform the referencing motion. The referencing sequence must be executed separately - search for the cam, latch to the encoder zero marker, then write the actual position to P0160. Until this completes, ZSW1 bit 0.11 = 0 and absolute MDI moves will fault F022.

Can I write Word 4 and Word 5 of the Siemens telegram as the new target position?

Yes, but only when the telegram selected on the drive (P0875) matches the telegram selected in STEP 7 HW Config. Telegram 105 places the 32-bit MDI target position in PZD3 (high word) and PZD4 (low word), and the MDI velocity in PZD5. After writing, toggle control word 1 bit 0.6 with a 0 to 1 rising edge of at least one PROFIBUS cycle.

What is the equivalent of SINUMERIK G60 and G64 on a 611U positioning module?

P0140 = 0 is equivalent to G60 (exact stop at block end). P0140 = 2 is equivalent to G64 (continuous-path mode, on-the-fly with ramp). P0140 = 3 is G64 with a hard velocity step - use only for small corrections where velocity continuity is not required.

Why does a 359 to 200 degree move take the long way around?

The drive is treating the move as a relative move (mode 0x30) and computing the delta from the live position. With mode 0x30, the drive does not apply modulo reduction. Switch to MDI absolute mode (STW2 = 16#0010) and confirm P0170 = 1 (rotary axis), P0171 = 360000 LU/rev. The drive will then automatically select the shortest 161 degree positive direction.

Back to blog