S7-1200 Torque Limiting with Festo CMMT: Telegram 750 Setup
The SIMATIC S7-1200 does not expose a native MC_TorqueLimiting technology object in the same form as S7-1500T, but torque limiting is achievable through PROFINET Telegram 750, Siemens-supplied function blocks, and intelligent drive-side handling on the Festo CMMT-AS servo drive. This reference describes the complete architecture, parameter mapping, Festo commissioning, Siemens FB wiring, and verification procedure for a linear axis application requiring ~50 N force limit.
1. System Overview
The application consists of a linear axis driven by a servo motor and controlled by a Festo CMMT-AS servo drive, supervised by a SIMATIC S7-1215 DC/DC/DC (firmware V4.6 or later recommended). The PLC sets torque limits via PROFINET using Siemens standard telegram 750, which carries the torque limit setpoint to the drive. The drive itself monitors actual torque (motor current) against the limit and either reduces command velocity or stops the axis when the threshold is exceeded.
1.1 Topology
1.2 Component List
| Component | Model / Part No. | Role |
|---|---|---|
| CPU | S7-1215 DC/DC/DC (6ES7215-1AG40-0XB0) | Master, PROFINET controller |
| Servo drive | Festo CMMT-AS-C2-3A (or CMMT-ST) | Torque limiting executor, current controller |
| Servo motor | Festo EMME-AS / EMMT-AS | Mechanical actuator |
| Linear axis | Festo EGC / DGCI spindle-driven | Load-bearing axis |
| Engineering | Siemens TIA Portal V18 / V19 | PLC + device configuration |
| Festo tool | Festo Automation Suite V4.x | Drive commissioning, telegram config |
2. Prerequisites
- S7-1200 CPU firmware V4.4 or later (V4.6+ recommended for G2 series and full S7-1200 G2 function-block support).
- Festo CMMT-AS firmware with PROFIdrive profile enabled (default on current production units).
- TIA Portal project with the Festo CMMT GSDML file imported (e.g.
GSDML-V2.34-Festo-CMMT-AS-...). - GSDML/GSD file for the CMMT available from Festo support or the Festo Support Portal.
- Siemens application manual for S7-1200 G2 torque limiting with SINAMICS (109988351) referenced as SIMATIC S7-1200 G2: Torque limiting with SINAMICS Drives.
- Reference architecture for S7-1500 force/torque limiting at Siemens TIA Portal V20 documentation: Force/Torque limiting (S7-1500/S7-1500T) for parameter semantics when applying the same concept to S7-1200.
3. Why Drive-Side, Not PLC-Side
The S7-1200 OB1 cycle time is typically 1–10 ms depending on program size. Motion control OB (MC-Servo) typically runs at 4 ms. The Festo CMMT-AS current/torque loop runs at 250 µs with field-oriented control. Any torque-limiting decision made on the PLC must travel across PROFINET (1–2 ms update) and into the drive before the drive can react. Total latency from "excess torque detected" to "drive stops" via the PLC exceeds 10 ms. By the time the PLC command reaches the drive, the motor has already been producing peak torque for several milliseconds—long enough to either trip a drive fault (Festo CMMT I²t monitoring) or damage the mechanical load.
The recommended architecture places torque evaluation in the drive. The PLC writes a torque limit value into telegram 750; the drive compares this against actual torque every cycle and either:
- Reduces velocity command (soft limit), or
- Trips a stop (hard limit) with configurable deceleration.
The PLC's role is to:
- Provide the torque limit value (Nm or %, depending on drive scaling).
- Enable/disable the limit via a control bit in telegram 750.
- Monitor status bits in the process data for "limit active" and "limit reached".
- React to the status by halting higher-level motion jobs.
4. PROFINET Telegram 750 Configuration
Telegram 750 is a Siemens free-configurable telegram used for vendor-specific I/O on PROFIdrive-compatible drives. The Festo CMMT-AS supports telegram 750 as a "manufacturer-specific" slot for transmitting torque limits and reading torque status.
4.1 Telegram 750 Signal Layout
| Word | Direction | Signal | Data Type | Unit / Range |
|---|---|---|---|---|
| 0 | PLC → Drive | Control word (torque limit) | WORD | Bit field |
| 1 | PLC → Drive | Torque limit positive | INT | 0.1% of rated torque (signed) |
| 2 | PLC → Drive | Torque limit negative | INT | 0.1% of rated torque (signed) |
| 3 | PLC → Drive | Reserved / mode | WORD | Mode selection |
| 4 | Drive → PLC | Status word | WORD | Bit field |
| 5 | Drive → PLC | Actual torque | INT | 0.1% of rated torque (signed) |
| 6 | Drive → PLC | Limit status | WORD | Bit field |
| 7 | Drive → PLC | Diagnostic | WORD | Drive-specific |
4.2 Selecting Telegram 750 in TIA Portal
- Open the device configuration of the Festo CMMT in TIA Portal.
- Navigate to Properties > PROFINET interface > Module parameters.
- In Slot configuration, add module
Free PROFIdrive telegram 750with the configured I/O length (default 8 words each direction). - Confirm the slot is mapped under Submodule list; the start address is automatically assigned (e.g.
I/QW 256..271). - Compile and download the device configuration.
4.3 Configuring Telegram 750 in Festo Automation Suite
- Open Festo Automation Suite and connect to the CMMT-AS.
- Navigate to Parameters > PROFIdrive > Telegram selection.
- Select Telegram 750 (vendor-specific).
- Configure the torque limit scaling (e.g. 1000 = 100% rated torque).
- Set reaction on limit exceed: velocity reduction (default) or rapid stop.
- Save parameters to the drive (Save > Save to device + Save to project).
5. S7-1200 G2 Function Block for Torque Limiting
The Siemens application manual SIMATIC S7-1200 G2: Torque limiting with SINAMICS Drives (FB version V1.0.0) provides a ready-made SCL function block for torque limiting on the S7-1200 / S7-1200 G2 platform. Although the reference integration is with SINAMICS drives, the same telegram-750-based logic is applicable to any PROFIdrive-compatible drive including the Festo CMMT, provided the telegram mapping is identical.
5.1 Function Block Interface
| Parameter | Direction | Type | Description |
|---|---|---|---|
enable |
INPUT | BOOL | Master enable for torque limit |
limitPositive |
INPUT | INT | Positive torque limit (0.1% units, signed) |
limitNegative |
INPUT | INT | Negative torque limit (0.1% units, signed) |
torqueHWAddr |
INPUT | HW_IO | PROFINET slot HW identifier |
driveReady |
INPUT | BOOL | Drive state ready feedback |
active |
OUTPUT | BOOL | Torque limit active |
limitReached |
OUTPUT | BOOL | Drive reported limit reached |
actualTorque |
OUTPUT | INT | Actual torque feedback (0.1%) |
error |
OUTPUT | BOOL | Function-block error |
status |
OUTPUT | WORD | Status / error code |
5.2 SCL Implementation Skeleton
The following SCL code shows the typical structure for a torque-limiting FB on S7-1200. Adapt the fieldbus write/read offsets and the bit assignments to match your exact telegram-750 mapping.
FUNCTION_BLOCK "FB_TorqueLimit_S7_1200"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 1.0
VAR_INPUT
enable : BOOL; // Master enable
limitPositive : INT; // 0.1% units, signed
limitNegative : INT; // 0.1% units, signed
hwTorqueSlot : HW_IO; // Telegram 750 HW identifier
driveReady : BOOL; // Drive ready feedback (STW1 bit, e.g. ZSW1.2)
END_VAR
VAR_OUTPUT
active : BOOL; // Limit currently enforced
limitReached : BOOL; // Drive reported "limit reached"
actualTorque : INT; // Actual torque 0.1% units
error : BOOL; // FB error
status : WORD; // Status / diagnostic word
END_VAR
VAR
controlWord : WORD; // Telegram 750 word 0 (PLC->drive)
statusWord : WORD; // Telegram 750 word 4 (drive->PLC)
limitStateWord : WORD; // Telegram 750 word 6 (drive->PLC)
fbError : BOOL;
END_VAR
BEGIN
// Default outputs
active := FALSE;
limitReached := FALSE;
actualTorque := 0;
error := FALSE;
status := 16#0000;
IF enable AND driveReady THEN
// Build control word: bit 0 = enable limit, bit 1 = ramp
controlWord.%X0 := TRUE; // enable torque limit
controlWord.%X1 := TRUE; // soft ramp engaged
// Write 8-word telegram to drive via direct I/O access
%QW0 := controlWord; // PZD 0 - control
%QW2 := WORD(UINT(limitPositive)); // PZD 1 - limit +
%QW4 := WORD(UINT(limitNegative)); // PZD 2 - limit -
%QW6 := 16#0000; // PZD 3 - reserved
// Read 8-word telegram from drive
statusWord := %IW0; // PZD 0 - status
actualTorque := INT(%IW2); // PZD 1 - actual torque
limitStateWord := %IW4; // PZD 2 - limit status
active := statusWord.%X0;
limitReached := limitStateWord.%X0;
status := statusWord;
ELSIF NOT driveReady THEN
// Drive not ready - clear control word, raise diagnostic
%QW0 := 16#0000;
%QW2 := 16#0000;
%QW4 := 16#0000;
%QW6 := 16#0000;
status := 16#0001; // 0x0001 = drive not ready
END_IF;
// Catch I/O access faults (PLC runtime)
IF ... runtime fault present ... THEN
error := TRUE;
status := 16#8001;
END_IF;
END_FUNCTION_BLOCK
MC_TorqueLimiting. The naming convention MC_TorqueLimiting is reserved for S7-1500T technology objects (see Siemens S7-1500T force/torque limiting, where Mode = 0 selects force/torque limiting and Limit sets the value). On S7-1200, the user constructs a functionally equivalent FB using telegram 750.
6. S7-1500T Reference Semantics Applied to S7-1200
The S7-1500T force/torque-limiting technology object exposes two key parameters per the S7-1500T documentation:
| Parameter | Type | Meaning |
|---|---|---|
Mode |
INT | 0 = force/torque limiting active (drive enforces limit and reduces velocity) |
Limit |
LREAL | Limit value in user units (N for linear, Nm for rotary) |
On S7-1200, replicate this model inside your FB:
-
Mode = 0 (drive enforces, reduces velocity): Set
controlWord.%X0, leave stop-bit clear. -
Mode = 1 (drive enforces, rapid stop on limit): Set
controlWord.%X0andcontrolWord.%X1(stop-on-limit). - Limit value: Convert your engineering-unit value (e.g. 50 N) to 0.1% of rated torque using the drive's torque constant (Nm/A) and the force-to-torque conversion (Nm = N × ball-screw lead / 2π × efficiency).
7. Converting 50 N to Telegram 750 Setpoint
Suppose the linear axis is a ball-screw-driven stage with the following parameters:
| Parameter | Symbol | Value |
|---|---|---|
| Required force limit | Flimit | 50 N |
| Ball-screw lead | h | 5 mm/rev = 0.005 m/rev |
| Drive efficiency | η | 0.9 |
| Motor rated torque | MN | 2.4 Nm (example EMMT-AS-40) |
7.1 Torque Equivalent of 50 N
For a ball-screw:
M = F × h / (2π × η)
M = 50 × 0.005 / (2π × 0.9) = 0.0442 Nm
7.2 Percentage of Rated Torque
%M = M / MN × 100 = 0.0442 / 2.4 × 100 = 1.84 %
7.3 Telegram 750 Integer Value
Setpoint = %M × 10 = 18 (integer, 0.1% units)
This means limitPositive := 18 and limitNegative := -18 in the FB. The drive will limit motor torque to 1.84% of rated, equivalent to ~50 N at the load.
8. Festo CMMT-AS Drive Configuration
8.1 Required Drive Parameters
| Festo Parameter | Meaning | Recommended Value |
|---|---|---|
| Telegram type | PROFIdrive telegram | 750 (vendor-specific) |
| Torque limit source | Source for torque limit | Fieldbus (telegram 750) |
| Torque limit reaction | Action on limit | Reduce velocity (soft) / Stop (hard) |
| Torque limit scaling | 100% = integer value | 1000 (= 100.0%) |
| Torque monitoring window | Hysteresis | 2–5% |
| I²t warning threshold | Thermal pre-alarm | 80% rated |
| I²t shutdown threshold | Thermal shutdown | 105% rated |
8.2 Activating Torque Limiting on the CMMT
- In Festo Automation Suite, navigate to Application > Torque Limiting.
- Enable the function and select Source: Fieldbus telegram 750.
- Set Reaction:
- For gentle press-fit applications: Velocity reduction to zero.
- For safety-sensitive applications: Category 1 stop (controlled, then STO).
- Save parameters and cycle drive power if required (CMMT applies most parameters non-volatile on save).
9. PLC Program Architecture
9.1 OB1 Cyclic Call
// OB1 - main cyclic
// Instantiate the torque limit FB once per axis
"iDB_TorqueLimit_Axis1"(
enable := "Axis1_DriveReady",
limitPositive := REAL_TO_INT("Axis1_Limit_N" * 10.0 / "Axis1_ScalingFactor"),
limitNegative := -REAL_TO_INT("Axis1_Limit_N" * 10.0 / "Axis1_ScalingFactor"),
hwTorqueSlot := 256, // HW address of telegram 750
driveReady := "Axis1_DriveReady",
active => "Axis1_TorqueLimitActive",
limitReached => "Axis1_TorqueLimitReached",
actualTorque => "Axis1_ActualTorque",
error => "Axis1_TorqueLimitError",
status => "Axis1_TorqueLimitStatus"
);
// React to limit reached: halt higher-level motion
IF "Axis1_TorqueLimitReached" THEN
"MC_Halt"(Axis := "TO_Axis1");
END_IF;
9.2 State Machine for 50 N Tool-Detect Use Case
9.3 HMI Integration
Bind the following tags to the HMI for diagnostics:
-
Axis1_ActualTorque(INT, 0.1% units) — bar graph 0–100%. -
Axis1_TorqueLimitActive(BOOL) — green indicator. -
Axis1_TorqueLimitReached(BOOL) — red indicator with history bit. -
Axis1_TorqueLimitError(BOOL) — alarm field. -
Axis1_Limit_N(REAL) — HMI input field, writeable in operator mode.
10. Step-by-Step Commissioning
- Hardware wiring: PROFINET cable from S7-1215 port to Festo CMMT-AS. Verify PROFINET link LED on CMMT is solid green.
- Import GSDML in TIA Portal: Options > Manage device description files (GSD). Browse to Festo CMMT GSDML; install.
- Add CMMT to PROFINET topology: drag from catalog under "PROFINET IO > Drives > Festo > CMMT-AS". Assign to the S7-1215 PROFINET interface.
- Configure telegram 750: in the CMMT device view, slot 0, add submodule "Free PROFIdrive telegram 750". Confirm 8 PZD words each direction.
- Assign IP and device name: from TIA Portal, "Assign PROFINET device name" to "cmmt-as-axis1".
- Download TIA project to S7-1215.
-
Festo Automation Suite commissioning:
- Run motor/axis setup wizard (commutation, encoder, homing).
- Set current/torque limits in drive to safe maximums first.
- Enable telegram 750 reception.
- Set reaction on limit to "reduce velocity" for initial test.
-
Test open-loop torque limit: with drive enabled but axis not commanded to move, write
limitPositive := 20via watch table. Verify in Festo trace that drive registers the limit value. - Test axis stop on torque: command slow jog motion (10 mm/s) toward a fixed stop. Verify axis decelerates and stops within ~50 ms of contact.
- Tune reaction: switch reaction between "velocity reduction" and "rapid stop" depending on application needs.
- Save and back up: save Festo parameters to PC and to SD card on S7-1215.
11. Verification Checklist
| # | Verification | Pass Criterion |
|---|---|---|
| 1 | PROFINET telegram 750 communication | Watch table shows PLC output words update and input words reflect drive status |
| 2 | Limit value reaches drive | Festo Automation Suite diagnostic shows limit = expected % torque |
| 3 | Force threshold accuracy | Measured contact force = 50 N ± 5 N (use calibrated load cell) |
| 4 | Stop latency | From contact to drive stop < 30 ms (Festo trace) |
| 5 | Status bits |
limitReached toggles TRUE on contact event |
| 6 | No PLC fault | S7-1215 diagnostic buffer clean during and after test |
| 7 | Repeatability | 10 successive contacts give consistent stop position ±0.05 mm |
| 8 | No drive I²t trip | Drive thermal load < 80% after 100 cycles |
12. Troubleshooting Matrix
| Symptom | Root Cause | Remedy |
|---|---|---|
| Drive ignores torque limit | Telegram 750 not selected on CMMT | In Festo Automation Suite, set telegram selection to 750 |
| Limit value always 0 in drive | PLC not writing telegram 750 outputs | Check HW address in FB matches configured slot; verify with watch table |
| Drive faults with overcurrent | Reaction is "reduce velocity" but limit value too high | Lower limitPositive / limitNegative; verify scaling |
| Axis stops but force exceeds 50 N | Drive current loop saturated above torque limit during deceleration | Add 5–10% margin to setpoint; use rapid stop reaction instead of velocity reduction |
| HMI shows limitReached permanently | Bit assignment inverted in FB | Verify status bit in telegram 750 (read drive manual for bit polarity) |
| PROFINET diagnostic alarm on CMMT | Wrong PZD length | Match submodule PZD length to drive configuration |
| S7-1200 OB1 cycle too long | Torque-limit processing in OB1 instead of MC-Servo | Move torque-limit FB call to a cyclic interrupt OB (OB30–OB38) at 1–4 ms |
| Drive I²t alarm during repeated tests | Cycle time too short for thermal recovery | Increase dwell time between test cycles; lower setpoint |
| Actual torque reads negative unexpectedly | Sign convention in telegram differs from FB | Apply sign inversion in FB or check drive scaling |
| MC_Halt doesn't trigger on limit | HMI tag "limitReached" not wired to MC_Halt input | Wire directly in OB1 or in a dedicated interrupt OB |
13. Performance Comparison: S7-1200 vs S7-1500T
| Feature | S7-1200 (this article) | S7-1500T |
|---|---|---|
| Native TO function | Not available (user FB) | MC_TorqueLimiting / ForceLimiting |
| Min cycle time | 1 ms (OB30) | 250 µs (MC-Servo) |
| Telegram type | 750 (vendor-specific) | 750, 751 or TO-specific |
| Encoder in TO | Indirect via drive | Direct via TO |
| Drive-side enforcement required | Yes (recommended) | Optional (TO can also enforce) |
| Reference | S7-1200 G2 manual | TIA V20 docs |
14. Specifications Summary
| Item | Value |
|---|---|
| Target PLC | S7-1215 DC/DC/DC (FW V4.6+) |
| Target drive | Festo CMMT-AS-C2-3A / CMMT-ST |
| PROFINET telegram | Telegram 750 (vendor-specific) |
| PZD word count | 8 input + 8 output (verify with GSD) |
| Torque setpoint scaling | 1000 = 100% rated torque |
| Setpoint resolution | 0.1% |
| Update rate (PLC → drive) | 1–4 ms (PROFINET IRT) |
| Update rate (drive cycle) | 250 µs (Festo CMMT) |
| Force limit (example) | 50 N ± 5 N |
| Reaction options | Velocity reduction, rapid stop |
| Siemens reference FB version | V1.0.0 (109988351) |
15. Safety Considerations
- Always commission with mechanical end-stops in place as a secondary hard stop.
- Configure drive I²t limits for thermal protection of motor and wiring.
- Use PROFINET IRT (isochronous real-time) for sub-millisecond deterministic updates if reaction latency is critical.
- Validate stop distance under worst-case velocity at the maximum mass.
- Implement HMI-side acknowledgement of limit-reached events to prevent auto-restart into a stalled condition.
16. Frequently Asked Questions
Does the S7-1200 have a built-in MC_TorqueLimiting technology object?
No. The S7-1200 does not expose a native MC_TorqueLimiting TO. That function exists on the S7-1500T platform (see Siemens TIA V20 force/torque limiting). On S7-1200 you implement the equivalent behavior with a user FB that writes the torque limit to PROFINET telegram 750, as documented in the S7-1200 G2 torque-limiting manual.
Why is the torque limit evaluated on the Festo CMMT instead of the S7-1200?
The Festo CMMT-AS current/torque loop runs every 250 µs, while the S7-1200 OB cycle runs every 1–10 ms and PROFINET adds 1–2 ms latency. Closing the torque loop on the drive gives <1 ms reaction time; closing it on the PLC exceeds 10 ms, which is too slow for protecting the drive from overcurrent or the mechanics from over-force.
How do I convert a 50 N force limit into a Telegram 750 setpoint?
Convert force to torque using the ball-screw formula M = F × h / (2π × η), divide by rated motor torque MN, multiply by 100 to get percent, then multiply by 10 to get the 0.1%-units integer. For 50 N on a 5 mm lead, 0.9 efficiency, 2.4 Nm rated motor: M = 0.0442 Nm, %M = 1.84%, setpoint = 18.
Can I use Telegram 750 with any PROFIdrive drive, or only Festo CMMT?
Telegram 750 is a Siemens vendor-specific PZD slot supported by most PROFIdrive-compatible drives, including Festo CMMT-AS, SINAMICS, and most third-party servo drives that expose a PROFIdrive slot 750 in their GSDML. The exact signal mapping (which word carries torque limit, which word carries actual torque, etc.) must be confirmed against the specific drive's GSDML or vendor manual.
What firmware version of S7-1200 is recommended for torque limiting with telegram 750?
Firmware V4.4 or later is the minimum for stable PROFINET IRT with telegram 750. For S7-1200 G2 CPUs, firmware V1.0 or later is required to use the official Siemens torque-limiting FB (V1.0.0) from application manual 109988351. Update both the CPU and the CMMT-AS to their latest stable firmware before commissioning.