SINAMICS S210 Position-at-Torque Control in TIA Portal Height

David Krause16 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

1. Application Overview

Position-at-torque (also called torque-limited positioning or soft-touch probing) is a hybrid motion profile where a servo drive is commanded to move a mechanical actuator toward a target position, but the motion is interrupted the instant the drive torque reaches a configured threshold. The instantaneous mechanical position at the moment torque saturates is then used as a measurement value. The classic application is dimensional gauging: a probe, plunger, or piston is driven into a soft, deformable product (food, foam, rubber, clay, cosmetic bars, biological tissue) until contact force equals a recipe-defined setpoint, and the position at that instant equals the product height to within the mechanical repeatability of the actuator.

On a Siemens SINAMICS S210 servo system with a SIMATIC S7-1500 controller, this application is implemented by combining a standard positioning telegram (105) with a supplementary torque telegram (750) on the same PROFINET connection to the drive, then programming the technology object to issue a torque-limited motion via the MC_MoveToPosition, MC_Halt, or the dedicated MC_Torque... command family from the PLCopen motion control library. The PLC reads the actual torque back through telegram 750, monitors when it crosses the recipe limit, captures the axis position at that instant, and stores the value as the measurement result.

2. Hardware and Software Bill of Materials

Component Article Number Firmware / Version Role
SIMATIC CPU 1510SP F-1 PN 6ES7510-1SJ01-0AB0 V2.5 or later (V2.0/V2.8 supported; V3.0 also available on this CPU) Motion controller, recipe store, HMI interface
SINAMICS S210 servo drive 6SL3210-5HB10-2UF0 FW V5.2 or later PROFINET slave, torque and position control
SIMOTICS S-1FK2 servo motor 1FK2203-2AG10-1CA0 Actuator with absolute encoder (single-turn/multi-turn per option)
TIA Portal V15 Update 2 minimum; V16/V17 recommended Engineering
S7-1500 Motion Control V3.0 or V4.0 (NOT V2.0 — see Section 5) Technology objects (TO_PositioningAxis, TO_SynchronousAxis, etc.)

The 6SL3210-5HB10-2UF0 is a 1-axis AC/AC converter in the S210 family rated for 200 V class 3-phase operation. The 1FK2203-2AG10-1CA0 is a compact 1FK2 motor with integrated Drive-CLiQ encoder. Match the motor's stall torque (M0) and rated speed (nN) to the mechanical load such that the probing torque setpoint lands between 10 % and 50 % of M0 for clean signal-to-noise without stalling.

Firmware pairing rule: The technology object (TO_PositioningAxis) of Motion Control V3.0/V4.0 requires the CPU firmware that supports it. On the 1510SP F-1 PN, CPU firmware V2.5 unlocks Motion Control V3.0 and V4.0 in TIA Portal. With older firmware, the drive does not appear in the TO hardware interface dropdown even though PROFINET is online.

3. Telegram Architecture: 105 Plus 750

SINAMICS S210 supports multiple parallel PROFINET telegrams on one logical connection, as documented in the SINAMICS S210 List Manual and the PROFINET telegram overview on the Siemens support portal. The combination required for torque-limited positioning is:

Telegram Type PZD Direction Function
105 Standard positioning Controller ↔ Drive Position, velocity, status words, control words, setpoints
750 Supplementary torque Controller → Drive: M_ADD, M_LIMIT_POS, M_LIMIT_NEG Torque feed-forward and bipolar torque limit override
750 Supplementary torque Drive → Controller: M_ACT Actual torque feedback, scaled

3.1 Telegram 105 PZD layout (SINAMICS standard)

PZD Word Controller → Drive (Setpoint) Drive → Controller (Actual)
1 STW1 (control word 1) ZSW1 (status word 1)
2 NSOLL_B (speed setpoint, 32-bit) NIST_B (actual speed, 32-bit)
3
4 STW2 (control word 2) ZSW2 (status word 2)
5 XERR (position error / position setpoint)
6
7
8
9
10

3.2 Telegram 750 PZD layout (supplementary torque)

PZD Word Controller → Drive Drive → Controller
1 M_ADD (supplementary torque feed-forward, 0x4000h = 100 % of p2003) M_ACT (actual torque smoothed, 0x4000h = 100 % of r0080/p2003)
2 M_LIMIT_POS (positive torque limit, 0x4000h = 100 %)
3 M_LIMIT_NEG (negative torque limit, 0x4000h = 100 %)
4

All torque words are 16-bit signed normalized to 0x4000h (16384) = 100 %. The reference value is the drive's torque reference p2003 in Nm (default derived from motor M0). The drive additionally publishes the actual torque internally on parameter r0080; telegram 750 simply exposes it on the bus for the PLC to read without acyclic parameter access.

3.3 Activating Telegram 750 in HW Config

  1. Open Devices & Networks in TIA Portal and select the SINAMICS S210 node.
  2. Open the PROFINET interface properties → tab Telegram configuration.
  3. Click Add telegram and select Telegram 750 in the drop-down. Telegram 105 must remain selected; the order of telegrams is arbitrary but should be kept consistent between drive and TO.
  4. Compile the hardware configuration and download to the CPU.
  5. Open the PositioningAxis technology object → ConfigurationHardware interface. Verify both telegrams appear as Standard telegram 1 (105) and Supplementary telegram 1 (750).
  6. Under Data exchanged with the drive → Additional data, enable the checkbox Torque data. Without this checkbox the technology object discards telegram 750 and the variable StatusTorqueData.ActualTorque stays at 0.
  7. Compile the technology object. The TO now publishes PositioningAxis_1.StatusTorqueData.ActualTorque, .ActualTorqueFiltered, and the supplementary setpoint outputs ActualPosition, ActualVelocity.
Don't skip step 6. Many engineers add telegram 750 in HW Config but forget the TO-side checkbox. The drive happily telegrams the data, but the structured variable never populates, and the application looks like torque is always zero.

4. Technology Object Configuration

The TO_PositioningAxis technology object is configured with three layers relevant to a probing application: hardware interface (covered above), mechanics, and limits.

4.1 Mechanics

Configure the conversion from motor revolutions to load units so that the ActualPosition reading represents the linear travel of the piston/plunger in millimeters:

  • Load gear: ratio numerator / denominator (e.g., 1:1 if the motor shaft directly drives a ballscrew, 5:1 if a planetary reducer is fitted).
  • Leadscrew pitch: mm/rev (e.g., 5 mm/rev for an SFU1605 ballscrew). TIA calculates linear units per load revolution from this value.
  • Encoder increments: leave at motor default (1FK2 with DRIVE-CLiQ = 20-bit singleturn + 12-bit multiturn) unless using an external encoder.

Resulting scaling: 1 LU = 1 mm or 1 µm depending on unit selection. Always select the unit before commissioning; changing it later requires TO re-initialization.

4.2 Limits

  • Max velocity: set to probing speed, typically 50–200 mm/s. Slow probing improves contact repeatability.
  • Max acceleration/deceleration: high enough that the jerk on contact does not bounce the piston off the product (e.g., 1000 mm/s² with 50 ms smoothing).
  • Software limit switches: define a guarded range above and below the expected product so the piston cannot crash into the fixture if the recipe is wrong.
  • Emergency stop limit (hardware): wired to the drive STO through PROFIsafe (see Section 9).

5. Motion Control Library Version Constraint

The TIA Portal V15 Update 2 default installation places S7-1500 Motion Control V2.0 on the project. With Motion Control V2.0 the SINAMICS S210 drive does not appear in the TO hardware interface drive drop-down. The fix:

  1. Update the CPU firmware from V1.8 to V2.5 or later (TIA Portal > Online > Accessible nodes > CPU > Online & Diagnostics > Firmware update).
  2. In Devices & Networks, open the CPU properties → Motion Control tab. Switch the version from V2.0 to V3.0 or V4.0.
  3. Recompile. The drive now appears in TO_PositioningAxis → Configuration → Hardware interface → Drive.
Compatibility matrix: Motion Control V4.0 requires CPU firmware ≥ V2.8 and TIA Portal V16 or later. Motion Control V3.0 is the highest version supported on TIA V15.1 Update 2. Plan project upgrades accordingly if you intend to scale to additional axes.

6. PLC Programming the Position-at-Torque Sequence

The control sequence has four phases:

  1. Approach: drive the piston from a safe home position to a position a few millimeters above the expected top of the product at high speed (open-loop torque limit disabled).
  2. Probe: drive down at reduced speed with torque-limited control active and the recipe-defined torque limit applied through telegram 750.
  3. Detect contact: when |ActualTorque| ≥ recipe threshold for a debounce window, latch the instantaneous ActualPosition.
  4. Retract: command a return motion to the home position and compare the latched position to the recipe acceptance window.

6.1 Code skeleton in SCL

// Recipe inputs (from HMI / DB)
RecipeData.TorqueLimit_Percent   : REAL := 25.0;   // % of M0
RecipeData.ProbingSpeed_mm_s     : REAL := 50.0;
RecipeData.MinHeight_mm          : REAL := 18.0;
RecipeData.MaxHeight_mm          : REAL := 22.0;

// Drive constant: p2003 in Nm (read once during commissioning, store in DB)
DriveTorqueReference_Nm          : REAL := 7.0;   // example for 1FK2203-2AG10

// Torque limit words for telegram 750 (normalized: 16384 = 100%)
TORQUE_FULL_SCALE                : INT  := 16384;
RecipeTorquePos_Word             : INT  := REAL_TO_INT(TORQUE_FULL_SCALE * RecipeData.TorqueLimit_Percent / 100.0);
RecipeTorqueNeg_Word             : INT  := -RecipeTorquePos_Word;

// Phase machine
CASE iState OF
  0: // IDLE
      IF bStartProbe THEN
          MC_Power(Axis := Axis, Enable := TRUE, StartMode := mcStartMode_absolute);
          MC_Reset(Axis := Axis);
          iState := 10;
      END_IF;

 10: // POWER ON
      IF Axis.StatusWord.PowerOn THEN
          MC_Home(Axis := Axis, Position := 0.0, Mode := mcHomingMode_Direct);
          iState := 20;
      END_IF;

 20: // HOME MOVE
      IF Axis.StatusWord.Homed THEN
          MC_MoveAbsolute(Axis := Axis, Position := RecipeData.ApproachPosition_mm, Velocity := 200.0);
          iState := 30;
      END_IF;

 30: // APPROACH COMPLETE
      IF Axis.StatusWord.PositionReached THEN
          // Apply torque limit via telegram 750 supplemental setpoints
          Axis.Telegram750.M_LimitPos := RecipeTorquePos_Word;
          Axis.Telegram750.M_LimitNeg := RecipeTorqueNeg_Word;
          MC_MoveAbsolute(Axis := Axis, Position := RecipeData.SafeLowPosition_mm, Velocity := RecipeData.ProbingSpeed_mm_s);
          iState := 40;
      END_IF;

 40: // PROBE — watch torque
      IF ABS(Axis.StatusTorqueData.ActualTorque) >= RecipeData.TorqueLimit_Percent THEN
          iDebounceCount := iDebounceCount + 1;
          IF iDebounceCount >= 5 THEN   // 5 * MC servo cycle (~5 ms)
              LatchedHeight_mm := Axis.ActualPosition;
              bContactDetected := TRUE;
              MC_Halt(Axis := Axis, Deceleration := 2000.0);
              iState := 50;
          END_IF;
      ELSE
          iDebounceCount := 0;
      END_IF;

      // Safety: if axis reached SafeLowPosition without contact, treat as under-height
      IF Axis.StatusWord.PositionReached AND NOT bContactDetected THEN
          LatchedHeight_mm := RecipeData.SafeLowPosition_mm;
          bContactMiss    := TRUE;
          MC_Halt(Axis := Axis);
          iState := 50;
      END_IF;

 50: // EVALUATE
      IF Axis.StatusWord.Standstill THEN
          IF LatchedHeight_mm >= RecipeData.MinHeight_mm AND
             LatchedHeight_mm <= RecipeData.MaxHeight_mm THEN
              bAccepted := TRUE;
          ELSE
              bRejected := TRUE;
          END_IF;
          MC_MoveAbsolute(Axis := Axis, Position := 0.0, Velocity := 200.0);
          iState := 60;
      END_IF;

 60: // RETURN HOME — sequence done
      IF Axis.StatusWord.PositionReached THEN
          bAccepted := FALSE;
          bRejected := FALSE;
          bContactDetected := FALSE;
          bContactMiss := FALSE;
          iDebounceCount := 0;
          iState := 0;
      END_IF;
END_CASE;

6.2 Pure MC_Torque API alternative

For applications where the PLC should command a torque (rather than a position with torque limit), use the MC_TorqueLimiting or the V4.0 MC_TorqueControl instruction. Per the S7-1500 Motion Control function manual (entry 109749262), these instructions place the axis in torque-controlled operation; the PLC then closes the position loop by reading ActualPosition and stopping the motion when the height window is satisfied or torque limits are exceeded. Telegram 750 is mandatory for this mode because the standard telegrams do not expose torque data.

7. Reading and Interpreting Torque Data

The structured variable PositioningAxis_1.StatusTorqueData.ActualTorque returns torque as a percentage of the drive's reference torque (p2003), in the same scaling as telegram 750. Conversion to engineering units:

Torque_Nm = (StatusTorqueData.ActualTorque / 16384.0) * DriveTorqueReference_Nm;

Where DriveTorqueReference_Nm is read from drive parameter r0080 ratio p2003 during commissioning and stored in a non-volatile DB (e.g., in the startup OB). The default scaling for 1FK2 motors is p2003 = 2 × M0 / √3 when the drive uses 3-phase AC; check the S210 commissioning manual for the exact entry.

7.1 From torque to linear clamping force

When the piston is driven through a ballscrew and the application cares about contact force (Newton) rather than motor torque (Newton-meter), the conversion chain is:

F_N = (M_motor_Nm * i_ratio * 2 * π * η) / leadscrew_pitch_mm

Where:

  • M_motor_Nm = actual motor torque from telegram 750 / status word
  • i_ratio = load gear ratio (motor:load). For a direct drive i = 1; for a 5:1 reducer between motor and screw, i = 5.
  • η = mechanical efficiency of the screw (0.85–0.95 for a preloaded ballscrew, 0.3–0.5 for a standard leadscrew).
  • leadscrew_pitch_mm = axial travel per screw revolution.

When the technology object's Mechanics dialog is filled with the correct load gear ratio and leadscrew pitch, the TO automatically maintains the linear position in mm; the motor torque value is still exposed through StatusTorqueData.ActualTorque in Nm (motor side). To compare against a linear force setpoint, multiply by the conversion above inside the application code or store the conversion constant in a recipe.

Common mistake: Using StatusTorqueData.ActualTorque as if it were already a linear force. The variable is motor torque; for a 5 mm pitch screw and 7 Nm motor torque, the resulting axial force is roughly 8800 N (assuming 100 % efficiency), not 7 N. Mis-scaling the force reading will under- or over-torque the workpiece.

8. Recipe Management and Accept/Reject Logic

The recipe should contain at minimum:

Field Type Unit Typical Range
ApproachPosition REAL mm 5–20 above product
SafeLowPosition REAL mm 2–3 below expected minimum height
ProbingSpeed REAL mm/s 10–100
TorqueLimit REAL % of p2003 10–50
MinHeight REAL mm product spec low
MaxHeight REAL mm product spec high
DebounceCycles INT servo cycles 3–10
RetractSpeed REAL mm/s 100–500

Store recipes in a global DB (Recipe_DB) and write to it from the HMI or a higher-level MES. The PLC's accept/reject flag drives a reject diverter or marker downstream; integrate a parts-tracking shift register if the line runs continuously between probe cycles.

9. PROFIsafe and Functional Safety

Because the piston presses against a deformable product, an erroneous software failure must not result in continued force. Use PROFIsafe on the S210 (telegram 30 supplementary) to wire:

  • STO (Safe Torque Off): trip on E-stop or guard door.
  • SS1 (Safe Stop 1): controlled stop then STO.
  • SLS (Safely-Limited Speed): limit velocity to a safe value (≤ probing speed) when the operator guard is open, so any contact is below the threshold of injury.

The S210 supports PROFIsafe via F-CPU on the 1510SP F-1 PN. Activate the safety telegram in the same Telegram configuration dialog used for 105 and 750. Map the F-I/O to a fail-safe DB and gate the MC_Power.Enable instruction with the safety OK status.

10. Commissioning Procedure

  1. With the CPU online and the drive online in TIA Portal, run the S210 Commissioning wizard. Verify motor identification, encoder tuning, and current controller response.
  2. Run a velocity-controlled jog at 50 mm/s and confirm direction and scaling match the HMI display.
  3. Run Trace in the drive on r0080 (actual torque) and verify no torque ripple above 5 % of M0 at constant velocity. Excessive ripple indicates a mechanical bind or encoder misalignment.
  4. Enable telegram 750 as described in Section 3.3.
  5. Set TO mechanical configuration, then run homing.
  6. Disable all torque limits in telegram 750 (set M_LimitPos = 32767 and M_LimitNeg = -32767) and execute a test profile without the product to verify the piston reaches the safe low position with zero error.
  7. Re-enable recipe torque limit and run the probing sequence on a calibrated gauge block. Latch height should equal block height ± the repeatability of the system (typically ±0.05 mm for a clean 1FK2 with 20-bit encoder and 5 mm pitch screw).
  8. Verify the accept/reject logic with known-good and known-bad samples.
  9. Save the project, back up the drive parameters via Drive > Upload to PG, and archive both files.

11. Diagnostic and Troubleshooting Matrix

Symptom Likely Cause Diagnostic Step Remedy
Drive not selectable in TO drive drop-down Motion Control V2.0 on CPU V1.8 Check CPU firmware (Online & Diagnostics > CPU > Identification); check TO version in project tree Update CPU firmware to V2.5+, switch TO Motion Control to V3.0/V4.0
StatusTorqueData.ActualTorque = 0 even when probe is pressed Telegram 750 not enabled in TO additional data TO Configuration > Data exchanged with drive > Additional data > Torque data checkbox Enable checkbox, recompile TO
Telegram 750 cannot be added to PROFINET interface S210 firmware < V5.1 SP1 Online & Diagnostics > SINAMICS > Firmware version Update S210 firmware via Web server or TIA
Probing position off by exactly 2× Load gear ratio reversed in TO mechanics Jog a known distance, compare TO position to physical scale Correct load gear numerator/denominator
Piston oscillates on contact Velocity loop gain too high for the mechanical compliance Trace actual velocity; observe overshoot Reduce Kp, increase torque filter p0045
Latched height drifts cycle to cycle Insufficient debounce on torque threshold OR thermal drift Add logging to trace latched value over 100 cycles Increase debounce to 10–20 cycles; allow 2-minute warm-up
F0180 (PROFIsafe fault) at start-up F-CPU address mismatch or safety telegram parameter mismatch Online & Diagnostics > Safety > Status Reassign F-destination address and CRC; re-acknowledge
F30002 (DC link undervoltage) during fast retract Regenerative energy exceeds braking resistor capacity Trace DC link voltage during retract Add external braking resistor or reduce retract deceleration
F07900 (motor blocked) immediately on probe start Torque limit too low for friction Read r0080 vs. applied torque word Lower torque threshold to 5 % and ramp up to recipe value

12. Performance and Repeatability Notes

  • Position repeatability of a 1FK2 + S210 system with a 5 mm pitch ballscrew is dominated by the encoder (≈ ±0.0003 mm per 20-bit count) and the mechanics backlash, not by the control loop.
  • Probing repeatability on soft products is typically ±0.02–0.10 mm depending on product elasticity, piston shape, and approach speed. A flat piston (Ø ≥ 3× product height variation) gives the best results.
  • Sample cycle budget on a 1510SP F-1 PN at V2.5: PROFINET IRT cycle 1 ms, MC servo cycle 2 ms, PLC application OB1 2 ms. Plan for 5 ms worst-case detection latency between contact and MC_Halt; at 50 mm/s probing speed this is 0.25 mm of post-contact travel.
  • For higher speed probing without sacrificing repeatability, increase the MC servo cycle to 1 ms (requires CPU V2.8+ and Motion Control V4.0).

Which telegrams must be configured for torque-limited positioning on SINAMICS S210?

Telegram 105 (standard positioning) plus supplementary telegram 750 (torque data: M_ADD, M_LIMIT_POS, M_LIMIT_NEG from controller; M_ACT from drive). Both must be active in HW Config, and the technology object must have "Torque data" enabled under Additional data, or StatusTorqueData.ActualTorque will not populate.

Why is the SINAMICS S210 not selectable in the TO_PositioningAxis drive drop-down?

The CPU firmware is too old for the active Motion Control library version. Update the 6ES7510-1SJ01-0AB0 to firmware V2.5 or later and switch the project's Motion Control version from V2.0 to V3.0 or V4.0. Recompile and the drive will appear.

What engineering units does StatusTorqueData.ActualTorque return?

It returns torque normalized to 0x4000h (16384) = 100 % of drive reference torque p2003 (Nm). To get Newton-meters, multiply by p2003 / 16384. To get linear clamping force from a ballscrew, additionally divide by (leadscrew_pitch_mm / (2 × π × η × i_ratio)).

How do I implement pure torque control on SINAMICS S210 from TIA Portal?

Use the MC_TorqueControl instruction from the Motion Control library V4.0 with telegram 750 enabled. The drive enters torque-controlled mode; the PLC then reads ActualPosition and commands MC_Halt or MC_MoveAbsolute when the desired position window or torque limit is reached. See the S7-1500 Motion Control function manual (Siemens entry ID 109749262) for the full instruction reference.

Can the S210 force the product below its setpoint without damaging it?

Yes, if the torque limit is set correctly through telegram 750. With a recipe torque limit of 25 % of M0 on a 1FK2203-2AG10, contact force at a 5 mm ballscrew with 90 % efficiency is approximately 1980 N. Drop the limit to 10 % for delicate products. Always wire an SLS PROFIsafe limit in addition to the software limit, and verify with a calibrated gauge block before production.

Back to blog