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.
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 |
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.
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:
- p29245 = 1 — Activate linear/modulo axis selection.
- p29246 = 360000 (default) — Modulo range in 0.001° LU. Set to 360000 for one full revolution = 360°.
- p29247 = 1000 — Reference value: 1000 LU per mechanical revolution.
- p2646 — Maximum MDI velocity, e.g. 3000 rpm.
- 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).
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
- 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.
- 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.
- 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).
- 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
- SINAMICS S120 Function Manual Basic Positioner (109757593)
- Control and Status Word for the Positioner - Basic Positioner (109818117)
- BasicPosControl V2.1 Library - TIA Documentation Cloud
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.