SINAMICS S120 Basic Positioner: Telegram 111 Control Word Setup

David Krause11 min read
Motion ControlSiemensTutorial / How-to
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

Overview

The SINAMICS S120 Basic Positioner (EPos) accepts PROFIdrive Standard Telegram 111 to run an axis in MDI (Manual Data Input) mode from a SIMATIC S7 controller over PROFINET. Telegram 111 bundles the standard control word (STW1), the standard control word 2 (STW2), the positioner-specific control words (POS_STW1, POS_STW2), the velocity override, and the four MDI setpoints (target position, velocity, acceleration, deceleration) into a single cyclic frame. This article walks through the bit assignments, the MDI setpoint scaling rules, the modulo + follow-up mode configuration, and the most common reason a drive powers up but the motor never moves.

Source of truth: The bit fields below come from the Siemens Function Manual for the Basic Positioner (article ID 109757593) and the POS_STW reference page (article ID 109818117) on Siemens Industry Online Support. Always cross-check against the firmware version installed on your Control Unit (CU320-2 / CU310-2) and the STARTER / Startdrive commissioning tool you are using.

Prerequisites

  • SINAMICS S120 drive with CU320-2 PN or CU310-2 PN, firmware V5.x or later (EPos is supported from V4.4 onward).
  • SINAMICS Startdrive (TIA Portal) or STARTER with the EPos option installed.
  • TIA Portal V16 or higher with the BasicPosControl library V2.1 imported from the TIA Siemens Documentation Cloud.
  • Standard Telegram 111 configured on the drive (P0922 = 111) and on the SIMATIC controller's device view.
  • Axis mechanically commissioned: encoder calibrated, motor identified, speed controller tuned, travel limits set.

Telegram 111 PZD Layout

Telegram 111 contains the following 16-bit words in the receive direction (PLC → drive):

Word # Mnemonic Meaning PLC address (typical)
PZD1 STW1 Standard PROFIdrive control word 1 QW (drive slot base)
PZD2 STW2 Standard PROFIdrive control word 2 QW+2
PZD3 POS_STW1 Positioner control word 1 (mode select, jog, MDI direction) QW+4
PZD4 POS_STW2 Positioner control word 2 (MDI mode select, referencing) QW+6
PZD5 OVERRIDE Velocity override (0–16384 = 0–200 %) QW+8
PZD6 MDI_TARPOS MDI target position (LU = Length Unit) QW+10 / QD+10 (32-bit)
PZD7/8 MDI_VELOCITY MDI velocity setpoint QD+12 (32-bit)
PZD9 MDI_ACC MDI acceleration override (0–65535) QW+16
PZD10 MDI_DCC MDI deceleration override (0–65535) QW+18
Word order rule: In Telegram 111 the two MDI velocity words precede the acceleration/deceleration overrides because they are 32-bit. If you configure them in the wrong order the drive will ignore the velocity and you will see fault F07902 "MDI setpoint invalid".

STW1 (Control Word 1) Bit Assignments

Bits 0–10 of STW1 follow the PROFIdrive AC1 state machine. Only the bits you must manipulate from the PLC are listed below; the rest are reserved or evaluated internally.

Bit Name Required value Notes
0 ON / OFF1 1 Pulse enable request. Without this the drive stays in state S1 "Ready".
1 OFF2 (coast stop) 1 Keep at 1 to allow motion.
2 OFF3 (quick stop) 1 Keep at 1 unless you need fast stop.
3 Enable inverter / pulse enable 1 Transitions to S2 "Operation".
4 Ramp-function generator enable 1 Required to traverse to a setpoint.
5 Unfreeze ramp-function generator 1
6 Enable setpoint 1 Drives transition S2 → S3 "Setpoint present".
7 Acknowledge fault 0/1 edge Set to 1 to ACK, then back to 0.
10 Control by PLC 1 MUST be 1; otherwise the drive ignores all cyclic setpoints.
12–15 Reserved 0

The user's STW1 0000 0100 0111 ?111 is correct once bit 0 is set to 1, giving the final value 0000 0100 0111 1111 = 0x047F. The hidden fault when the motor does not move is almost always bit 10 (Control by PLC) being 0, OR the ramp-function generator enable bits being incorrectly latched.

STW2 Bit Assignments

STW2 is required even if you don't use it directly. The drive reads several bits as enable signals:

Bit Name Required value
0 Drive data set selection DDS bit 0 0
4 Ramp-function generator, bypass 0
6 Integrator inhibit, speed controller 0
7 Parking axis selection 0 (must be 0!)
8–9 Reserved 0
10 Master control by PLC requested 1
13 Command data set selection bit 0 0

Safe default value: STW2 = 0x0400 (only bit 10 set). Send this word every cycle even if you think you don't need it; if it stays at 0 the drive will not respond to setpoints because Master Control is not granted.

Common gotcha: The user's question "STW2: don't need to implement???" is the root cause of the "drive on, motor not moving" symptom. Bit 10 of STW2 (Master Control by PLC) MUST be set for any motion command to be accepted.

POS_STW1 (Positioner Control Word 1)

Bit Name Required value for MDI + follow-up
0 Follow-up mode 1 — converter continuously corrects the position setpoint to follow the actual value (parameter p2655[0])
1 Setpoint absolute / relative 1 = absolute (required for "absolute" MDI)
2 Jog bit 0 0
3 Jog bit 1 0
4 Do not reject traversing task 1
5 Jogging incremental / continuous 0
6 Jogging signal 1 0
7 Jogging signal 2 0
8 Referencing start 0 (already homed)
9 Reference point switch / home position 0
10 Reference cam 0
11 Home position mode bit 0 0
12 Pass-reference cam with reduced velocity 0
13 Fly referencing active 0
14 Reserved 0
15 Acknowledge traversing task edge 0→1 to start a new task

For "direct positioning, absolute, with modulo axis, with follow-up mode" the correct value is:

POS_STW1 = bit0 (follow-up) + bit1 (absolute) + bit4 (do not reject) = 0x0013

The user's 1001 0001 0000 0000 = 0x9100 sets bit 15 (acknowledge), bit 12 (reduced velocity pass-reference cam) and bit 8 (referencing start) which is inconsistent with absolute MDI. Replace with 0x0013 and trigger bit 15 as a 0→1 edge to start the traversing task.

POS_STW2 (Positioner Control Word 2)

Bit Name Required value
0 Operating mode MDI selection bit 0 1
1 Operating mode MDI selection bit 1 0
2 Selection of operating mode MDI 1 (combines with bits 0/1 to select mode "Traversing block" / "MDI direct setpoint")
3 Reserved 0
4 Independent position approach 0 for MDI
5 MDI direction, positive 1 for forward, 0 for negative
6 MDI direction, negative 0
7-15 Reserved / specific signals 0

For MDI set the bits so that POS_STW2 = 0x0005 (bits 0 and 2 set; bit 5 is direction-dependent). This selects the MDI mode where MDI_TARPOS / MDI_VELOCITY / MDI_ACC / MDI_DCC are taken directly from Telegram 111. The user's 0000 0001 0010 0001 = 0x0121 combines two MDI selections which is invalid.

MDI Setpoint Scaling

The four MDI setpoints in Telegram 111 each have a non-obvious scaling rule. Mis-scaling is the second most common reason the motor does not move.

Word Type Scaling Notes
MDI_TARPOS DINT (32-bit) 1 LU = 1 increments of p29247 reference value (default: 1000 LU = 1 mechanical revolution). For modulo axes the value is interpreted modulo p29246 (modulo range, default 360° in 0.001° LU). Hex 0x4000 = 16384 decimal = 16.384 revolutions or 16.384° × 1000 in default scaling.
MDI_VELOCITY DINT (32-bit) Unsigned in the range 0–16384 mapping to p2646 (default maximum speed). 0 = hold current setpoint. If left at 0 the drive will not start a traversing task even with valid STW1/POS_STW1.
MDI_ACC UINT (16-bit) 0–65535 → 0–100 % of p2647 (max acceleration). 0 means: use last valid acceleration; recommended minimum 100 for predictable braking.
MDI_DCC UINT (16-bit) 0–65535 → 0–100 % of p2648 (max deceleration). Same convention as MDI_ACC.
OVERRIDE UINT (16-bit) 16384 = 100 % (range 0–32767 = 0–200 %). Must be > 0. 0 freezes the velocity at 0.

Modulo Axis Configuration

To use a rotary axis as modulo, set the following parameters in Startdrive:

  1. p29245 = 1 — Activate linear/modulo axis selection.
  2. p29246 = 360000 (default) — Modulo range in 0.001° LU. Set to 360000 for one full revolution = 360°.
  3. p29247 = 1000 — Reference value: 1000 LU per mechanical revolution.
  4. p2646 — Maximum MDI velocity, e.g. 3000 rpm.
  5. p2647 / p2648 — Maximum MDI acceleration / deceleration (e.g. 100 rev/s²).

After homing with the active referencing type, the position actual value rolls over modulo p29246 automatically. Setting POS_STW1 bit 1 = 1 then loads the absolute setpoint relative to the modulo range.

Follow-Up Mode

Follow-up mode (POS_STW1 bit 0 = 1) is the special operating mode where the converter continuously tracks the actual position value as the new setpoint, so an external controller (PLC / higher-level NC) can take over without the drive fighting the move. According to the Basic Positioner Function Manual, parameter p2655[0] contains the follow-up mode function settings (default 0).

Caveat: Follow-up mode disables the integrated position controller. If you also need closed-loop position control, leave bit 0 = 0 and let the S120's internal position controller handle the move. Use follow-up mode only when an external controller (e.g. SIMOTION, S7-1500 TO with closed-loop position control) is generating the velocity profile.

Corrected Telegram 111 Frame

Putting everything together, the canonical start frame for "absolute MDI on a modulo axis with follow-up mode":

STW1      := 16#047F;   // ON, OFF2/3 inactive, enable inverter, enable RFG, enable setpoint, control by PLC
STW2      := 16#0400;   // Master control by PLC
POS_STW1  := 16#0013;   // Follow-up (bit0) + absolute (bit1) + do-not-reject (bit4)
POS_STW2  := 16#0005;   // MDI direct setpoint (bit0 + bit2)
OVERRIDE  := 16#4000;   // 100 %
MDI_TARPOS:= LREAL_TO_DINT(45.0 * 1000.0);  // 45° on the modulo axis (45 * p29247)
MDI_VEL   := 16#2000;   // ~50 % of p2646
MDI_ACC   := 16#4000;   // 100 %
MDI_DCC   := 16#4000;   // 100 %

To start the task, pulse POS_STW1 bit 15 (0 → 1 → 0). The drive will then execute the move to 45°.

Verification Procedure

  1. In Startdrive connect online to the drive and watch r2522 (control word, positioner) and r2523 (status word, positioner). r2523 should show bit 13 "Traversing task active" = 1 within 1–2 telegram cycles.
  2. Open the trace tool and record r0021 (actual speed), r0024 (output frequency), r2523.x and the four MDI setpoints. The actual speed must follow the command within 50 ms if the speed controller is well tuned.
  3. If the drive still does not move, check r2139 / r2135 for active fault. Common faults: F07902 (MDI setpoint invalid), F07413 (drive object not configured for EPos), F07950 (setpoint timeout, telegram failure).
  4. Confirm that the PROFINET watchdog in TIA Portal device view is ≥ 3 ms; otherwise the drive will interpret a cyclic gap as a fault and revert to OFF2.

Using the BasicPosControl Library V2.1

Rather than hand-coding every control bit, use the official BasicPosControl V2.1 library from the SINAMICS Motion Control library on docs.tia.siemens.cloud. It provides:

  • LAcycCom_SinaMdl — wraps the cyclic Telegram 111 frame and handles the bit encoding/decoding for STW1, STW2, POS_STW1, POS_STW2, ZSW1, ZSW2, POS_ZSW1, POS_ZSW2.
  • LAcycMdl_BasicPosControl — exposes I/O fields for ModeSelect (MDI/Jog/Homing/Traversing block), AbsoluteFlag, FollowUp, Override, TargetPos, Velocity, Acc, Dec, plus a Start boolean that pulses bit 15 of POS_STW1 automatically.
  • LDPV2_SinaMdl_Enc — decoder for actual position / velocity scaled to engineering units.

Importing the library removes 90 % of the bit-toggling errors and lets you focus on the PLC motion logic. The library is targeted at S7-1200 / S7-1500 and assumes Telegram 111 is already configured on both sides.

Troubleshooting Matrix

Symptom Likely cause Parameter / check Fix
Drive "ON", motor still STW2 bit 10 = 0 r0898.10 Set STW2 = 0x0400 every cycle
Drive "ON", no motion, no fault MDI_VELOCITY = 0 Trace MDI_VELOCITY Send non-zero velocity (e.g. 0x2000)
Drive faults F07902 Invalid MDI combination (bit 0/1/2 of POS_STW2) r2072 / r2074 POS_STW2 = 0x0005 (MDI direct)
Motor jumps by wrong distance MDI_TARPOS scaling wrong p29247 Multiply degrees by p29247 (e.g. ×1000)
F07413 "EPos not configured" EPos option missing r1082 / r0108.4 Activate basic positioner (p1082 + license)
Follow-up mode but no closed-loop control External controller not generating setpoints p2655[0] Either disable bit 0 of POS_STW1 or feed MDI_VEL from the PLC
PROFINET timeout F01910 Watchdog too short Watchdog config in TIA Increase PROFINET update / watchdog to ≥3 ms

Reference Parameters and Documentation

Why does my SINAMICS S120 power up but not move the motor?

In almost every case STW2 bit 10 (Master Control by PLC) is missing, or MDI_VELOCITY is 0. Send STW2 = 0x0400 every cycle and a non-zero MDI_VELOCITY (e.g. 0x2000), then pulse POS_STW1 bit 15.

How is MDI_TARPOS scaled on a modulo axis?

The value is interpreted modulo p29246. With p29246 = 360000 and p29247 = 1000, sending 0x4000 (16384 LU) means 16.384° within the 360° range. Hex 0x4000 alone does not mean "one revolution"; it is unitless and depends on p29247.

Do I have to implement STW2 if I only need basic motion?

Yes. Without STW2 bit 10 the drive never grants master control to the PLC and ignores all cyclic setpoints, even if STW1 and POS_STW1 are correct.

What is the correct POS_STW1 for absolute MDI + follow-up?

Set bits 0 (follow-up), 1 (absolute) and 4 (do not reject traversing task). That gives POS_STW1 = 0x0013. Pulse bit 15 (0 → 1) to start a new traversing task.

Should I use Technology Objects or hand-coded Telegram 111?

Use the BasicPosControl V2.1 library (TIA Documentation Cloud). It encodes STW1, STW2, POS_STW1 and POS_STW2 automatically, eliminating the bit-level errors that cause "drive on, motor off" symptoms. Technology Objects (TO_PositioningAxis) work only on S7-1500 CPUs and require the drive to be configured as a Siemens object, which is not always possible with SINAMICS S120 in Telegram 111.

Back to blog