Configuring Revolution Speed on Siemens SIMATIC S7 Motion Control
Rotational velocity (revolution speed) is a fundamental setpoint on every Siemens SIMATIC S7 motion axis. Whether the project is a winding reel, a flying shear, a rotary indexing table, or a coordinated print-mark registration, the engineering challenge is the same: how to configure the velocity initially, how to change it cleanly at runtime, and how to verify it under load without overshooting the drive. This reference consolidates the parameter mapping, technology object (TO) configuration, runtime-modification paths (including synchronous actions), and diagnostic checks that separate a working axis from a faulted one.
Unit Conversion and Engineering Data
Inside a technology object the user sees one of two velocity representations depending on the selected unit system. Mixing them is the single most common commissioning error on rotary axes.
| Selected unit | Symbol | Engineering unit | Conversion |
|---|---|---|---|
| Revolutions per minute | n | 1/min (rpm) | base unit |
| Degrees per second | v | deg/s | n = v · 60 / 360 = v / 6 |
| Radians per second | ω | rad/s | ω = 2π · n / 60 |
| Increments per second | — | inc/s | v_inc = n · incr_per_rev / 60 |
The load-side shaft speed is derived from the motor speed and the gearbox ratio. Always size n_motor against the drive's nominal speed (n_nominal) and derate by 80% to leave headroom for acceleration transients:
n_motor_set = (n_load · i_gearbox) / (i_load_gearbox)
where:
n_motor_set = motor reference speed [rpm]
n_load = required load revolution speed [rpm]
i_gearbox = gear ratio (motor-revolutions : load-revolutions)
i_load_gearbox = additional output-stage ratio (default 1)
The peak motor torque required to reach n_set inside the configured ramp time is:
T_peak = J_total · Δω / t_acc + T_load
where:
J_total = J_motor + J_gearbox + J_load / i^2 [kg·m^2]
Δω = 2π · (n_set - n_act) / 60 [rad/s]
t_acc = configured acceleration time [s]
T_load = steady-state torque demand [Nm]
If T_peak exceeds 1.6 × T_nominal, the Siemens drive will start derating and the configured revolution speed will not be achieved. Verify against the SINAMICS S120 parameter r0345 (power unit overload capability).
Prerequisites
- Hardware: SIMATIC S7-300 with CPU 315T-2 DP / 317T-2 DP / 317TF-2 DP (or compatible IM 153 / ET 200S-based T-controller). For S7-400, CPU 417T. Standard CPU 315-2/317-2 cannot host technology objects; the T-suffix is mandatory.
- Software: SIMATIC Manager Step 7 V5.5 SP4 or later, S7-Technology library V4.2 (or matching TO firmware). TIA Portal V17 with S7-1500T for forward migration.
- Firmware: T-CPU firmware ≥ V4.2 supports 8 axes per interface; ≥ V4.3 unlocks camming (MC_CamIn). Confirm in PLC → Module Information → Firmware.
- Drive side: SINAMICS S120 with Telegram 103/105/106 configured in HW Config, or third-party drive on PROFIdrive (DP/PN) using Telegram 1 / 2 / 3.
- Encoder: Incremental encoder on the load side (preferred for revolution-speed accuracy) or SSI absolute. Encoder resolution typically 220 = 1,048,576 incr/rev for high-precision winding.
- Safety: STO / SS1 wiring completed before any velocity test. Confirm F-LED off on the T-CPU and the drive's PROFIsafe channel reporting 0x00000000.
Hardware Platform Selection
| Controller | Max axes (TO) | Min IPO | Sync-action capable | Notes |
|---|---|---|---|---|
| CPU 315T-2 DP | 8 | 1 ms | Yes | Positioning + speed |
| CPU 317T-2 DP | 16 | 500 µs | Yes | Adds synchronous operation |
| CPU 317TF-2 DP | 16 | 500 µs | Yes | F-variant - integrated PROFIsafe |
| CPU 317F-2 DP + FM 357-2 | 16 | 1 ms | Limited | FM hosts TOs, not the CPU |
| CPU 417T | 32 | 250 µs | Yes | S7-400 high-end motion |
| S7-1500T (TIA) | 128 | 250 µs | Yes | Native technology objects |
Synchronous actions are bound to the IPO cycle (OB 61/OB 62 on T-CPU, OB 67/68 on S7-1500T). Their priority level (16-25) sits above OB 1, which is why they remain deterministic even under heavy cyclic load.
Configuring Revolution Speed via Technology Objects
The technology object (TO) is the canonical place to define the axis velocity envelope. Open the TO → "Configuration" dialog in SIMATIC Manager and validate the five parameters below before the first download.
Step 1: Mechanical parameters
- Open SIMATIC Manager → S7 Program → Technology Objects → Axis → Configuration.
- Select "Axis type" = Rotary.
- Set "Increments per revolution" (load-side). For a 1024-line encoder with x4 evaluation:
1024 · 4 = 4096. - Set "Gear ratio" (motor : load). Example 4.0 for a 4:1 reducer.
- Set "Position range" = 0 to 360000 ° (or 0 to 1000 rev) depending on the unit system selected.
Step 2: Drive and encoder assignment
- HW Config → T-CPU properties → Motion Control tab → assign the PROFIdrive telegram (Tele 103 for SINAMICS, Tele 2 for Micromaster).
- In the axis TO → "Drive → Interface", select the configured drive and the encoder slot (typically Slot 0 / Encoder 1).
- Set the drive reference speed (n_ref) equal to the motor's rated speed →
p2000on SINAMICS. This is the value that maps 100% of the drive's velocity setpoint.
Step 3: Velocity, acceleration and jerk
| Parameter | TO path | Typical value (rotary winder) | Constraint |
|---|---|---|---|
| Velocity unit | Configuration → Units | 1/min | Lock down before first download |
| Max velocity (n_max) | Limits → Velocity | n_motor_nom | n_max ≤ 0.8 · n_ref |
| Nominal velocity (v_set) | Limits → Velocity (default) | 0.7 · n_max | Initial PO setpoint |
| Acceleration (a_set) | Limits &riddot Dynamic | 2.0 · n_max / t_ramp | T_peak ≤ 1.6 · T_nom |
| Deceleration | Limits &riddot Dynamic | = a_set | Symmetric by default |
| Jerk limit | Limits &riddot Dynamic | 20 m/s3 | Smooth ramp; protects winding material |
Step 4: Compile and download
- Right-click the TO → Compile.
- Download the generated blocks DB-SET (axis setpoint DB) and DB-IID (axis instance) to the controller.
- Confirm TO online; the field "Status / Standstill" must appear before MC_Power is issued.
Runtime Modification via SFB Calls
The PLCopen-style function blocks from the "SIMATIC Technology" library are the de-facto runtime API. The most common MC_*** block for setting revolution speed at runtime is MC_MoveVelocity.
FUNCTION_BLOCK FB_RevolutionSpeed
VAR
Axis : TO_Axis; // axis instance handle
fbPower : MC_Power; // axis enable
fbMoveVel : MC_MoveVelocity; // velocity motion FB
fbRead : MC_ReadActualVelocity; // diagnostic feedback
fVelocityRpm: LREAL := 0.0; // setpoint in rpm
bEnable : BOOL := FALSE;
bOn : BOOL := FALSE;
END_VAR
// 1. Power-up
fbPower(Axis := Axis, Enable := TRUE, EnablePositive := TRUE, EnableNegative := TRUE, Override := 100.0);
// 2. Latch new speed value into the FB
fbMoveVel(Axis := Axis, Execute := bOn, Velocity := fVelocityRpm, Acceleration := 50.0, Deceleration := 50.0, Jerk := 100.0);
// 3. Read back actual velocity (diagnostic)
fbRead(Axis := Axis, Enable := TRUE, Velocity => rlActRpm, ActualDirection => bDir);
Key input behaviour:
-
Velocityunit must equal the TO's configured unit. Set once during commissioning, never changed at runtime. -
Acceleration / Decelerationare denormalized values. Internally these are converted to the axis's configured units (deg/s2, rad/s2, or rev/min/s depending on TO selection). -
Override(between 0 and 100) operates on top of the Velocity input. Use it instead of re-triggeringMC_MoveVelocityfor jog-style ramped changes. ApplyingOverrideless than 25 abruptly trips the drive on most S120 firmware ≤ V4.3.
For true runtime speed changes triggered by a process variable (e.g. line speed on a winder), use MC_MoveVelocity with a cyclic rewrite of the Velocity input. Do not pulse Execute each scan - this causes a toggle restart.
Runtime Modification via Synchronous Actions
Synchronous actions are real-time callbacks evaluated inside the IPO. They execute in less than 100 µs, making them the preferred channel for closing the velocity loop on encoder-interrupts or for cutting the speed based on a high-speed digital flag.
Syntax
{OB-mask | condition} action_list
Example - cap revolution speed during emergency pull
// In OB 61 (IPO1, 500 µs)
SA1: {DLY 0, "Axis1.PositionData.ActualVelocity" > 3000.0}
"Axis1.SetpointData.VelocityOverride" := 60.0;
"DB_State.EmergencyTrip" := TRUE;
SA2: {"DB_State.CoilFree"}
"Axis1.SetpointData.VelocityOverride" := 100.0;
Rules of use
- Synchronous actions may only access technology-object data structures (
Axis1.SetpointData.*,Axis1.PositionData.*) and DB memory. Direct I/O access from a synchronous action triggers a compile error. - Actions triggered by interrupt OBs (OB 40-OB 47) take precedence over the IPO cycle.
- Each synchronous action consumes a fixed program slot - the TO inspector reports the count in use. CPU 317T-2 DP supports 64 simultaneous actions; CPU 315T-2 DP supports 32.
- Use
{mode-condition}syntax (S,R,J,A,N) for set/reset/jump/assignment/edge.Jis the only construct that can branch within a sync action.
The Siemens "SIMATIC S7-300 / S7-400 Motion Control - Programming and Operating Manual" (edition 11/2006) documents the precise scoping rules for synchronous actions and the priority interaction with OB 1 (subordinate). When the controller was not able to modify the PLC program on-site, the engineered workaround was to push the velocity transition logic into synchronous actions so that changes could be made online inside the loaded binary.
Drive-Side Velocity Mapping
Every technology object writes a normalized setpoint of [-100.0%, +100.0%] across the PROFIdrive cyclic channel. The drive converts that into an actual speed using n_set_drive = n_ref · setpoint/100. Mismatch between TO unit system and SINAMICS reference speed produces an apparent "bug" where the configured revolution speed is wildly off.
| Siemens drive | Reference speed | Default | Caution |
|---|---|---|---|
| SINAMICS S120 | p2000 [rpm] | 1500 (typical) | Set p2000 to motor rated rpm, NOT to mechanical side |
| SIMOTION D / CX | P-0-0533 | 3000 | Match to TO n_max · gearbox |
| Micromaster 4 (Tele 2) | P0719 | 1500 | Older MM4 lacks Telegram 103 |
| Third-party PROFIdrive | Drive-specific | — | Verify DS47 mapping |
Verification and Diagnostics
-
Static check: With drive de-energized but TO online, force the Velocity override to 50.0 and read
Axis1.SetpointData.VelocitySetpoint. It must reflect exactly half of the configured nominal velocity. - Trace: Open the T-CPU web server ("Diagnostics") and trigger a velocity step from 25% to 100%. Confirm the rising edge reaches 95% of the target within the configured acceleration window ± 5%.
-
Overshoot check: Step change from 0 to 100%. Use
MC_ReadActualVelocityto log both Setpoint and Actual. Overshoot above +5% of target indicates Jerk limit too low or drive velocity regulator P-gain too high (p1461). - Steady-state ripple: Run at nominal speed for 60 s. The standard deviation of ActualVelocity must be ≤ 1% of n_set; otherwise check encoder coupling (resolver wobble, broken tooth) or drive smoothing time constant (p0045 ≤ 4 ms on S120).
-
Follow-up error: Set
Axis1.DynamicLimits.FollowingErrorToleranceto 5% of n_max. The axis must never report FollowError during a 10-minute no-load test. Acceptance for the winder is ≤ 1% (over-tensioned web).
Online Inspection - Repeat Last Method
Before leaving site, document the active values. Insert the snippet below into OB 1:
CALL "MC_ReadActualVelocity" (
Axis := Axis1,
Enable := TRUE,
Velocity := vAct_1,
ActualDirection := diDir_1
);
CALL "MC_ReadSetpoint" (
Axis := Axis1,
Enable := TRUE,
Velocity := vSet_1,
Acceleration:= aSet_1
);
// Dump to an HMI tag every 100 ms
"HMI_DB".Main.VelAct := vAct_1;
"HMI_DB".Main.VelSet := vSet_1;
"HMI_DB".Main.VelDir := DINT_TO_INT(diDir_1);
Capture a 30 s trace. The Setpoint and Actual curves must overlay within ± 2% of n_nominal. Persistent gap > 5% implies a drive-side bandwidth mismatch that no PLC-side tuning can fix.
Troubleshooting Matrix
| Symptom | Likely root cause | Parameter to inspect | Remediation |
|---|---|---|---|
| Velocity always 0 even after MC_Power | Drive not in operation enable | Drive status word r0899 | Issue ON at p0840 and verify p0852 from PROFIsafe |
| Velocity half expected | TO n_max not equal to drive p2000 | p2000 vs. Axis1.Config.MaxVelocity | Set p2000 = n_max (motor-side) |
| Velocity correct, drive faults F07902 | Follow-error too tight | Axis FollowingErrorTolerance | Raise tolerance OR lower acceleration |
| Spontaneous reversal on speed change | Negative direction not enabled | MC_Power.EnableNegative | Set TRUE for bidirectional axes |
| Jerk-induced web-bag break | Jerk limit > 50 m/s3 | Axis DynamicLimits.Jerk | Reduce to 10-20 m/s3 |
| Velocity overshoot during ramp | Drive P-gain too aggressive | p1460.0 / p1461.0 | Reduce P or activate p0045 |
| Speed sticks after MC_Stop | Deceleration = 0 | MC_MoveVelocity.Deceleration | Symmetric decel or set explicit nonzero |
| HMI shows velocity exactly half-set | Override applied | MC_Power.Override / MC_MoveVelocity.Override | Set 100 % or remove the call |
Migration to TIA Portal V17/V18
When upgrading a T-CPU line to S7-1500T or moving the project to TIA Portal:
- Export the TOs from SIMATIC Manager as
*.xmlusing the migration tool. - Import under TIA → Options → Migrate Project.
- Re-check the velocity unit because TIA defaults to
mm/seven on rotary axes. Force 1/min before first download. - MC_Power / MC_MoveVelocity / MC_Home map 1:1 from SIMATIC Technology to PLCopen blocks. Path: Bibliotheks-Zugriff → PLCopen MC.
- Synchronous actions become "Motion Control Tasks" - same priority scheme, but configured as a separate OB (TO-specific Task).
- Verify that the existing PROFIdrive telegram still matches; TIA names them explicitly via the device configuration.
Field-Proven Best Practice
- Lock the velocity unit system at the TO level before any 5-minute project review. Document the choice in the Functional Specification and freeze it as a guideline for the project.
- Never write to the TO instance DB from a cyclic OB with a low priority; doing so rips the IPC handshake and produces F00262 / axis error 108.
- For coordinated clusters, propagate speed changes via the master axis'
SetpointData.VelocitySetpointto ensure the slave's IPCB shares the same time base. - Keep one real-time loop in OB 1 reading the actual velocity for logging. Drive traces are useless during warranty claims when the PLC has the only timestamp.
- Add a permissive (life-bit) wiring before each MC_Power. Never enable the drive on a permissive that is true for less than 3 PLC cycles.
Revision Log
| Rev. | Date | Notes |
|---|---|---|
| 1.0 | 2006-11 | Initial release - S7 Motion Control function manual edition 11/2006 |
| 2.0 | 2015-09 | Added S7-1500T / TIA Portal V14 reference paths |
| 3.0 | 2024-02 | TIA V18 update; added MC_Power.Override behaviour and FollowError tuning |
Frequently Asked Questions
What is the difference between Velocity, Override and VelocitySetpoint in the technology object data block?
Velocity is the user-facing value in MC_MoveVelocity (in the TO's selected unit system). Override is a scaling factor of 0-100 applied on top of Velocity. VelocitySetpoint is the post-override float the drive actually receives and is sent across PROFIdrive every IPO cycle.
Can the revolution speed be changed online without re-downloading the technology object?
Yes. Rewrite the Velocity input on the active MC_MoveVelocity instance, or push a new Override into the TO setpoint data. Synchronous actions can perform the rewrite at IPO rate for deterministic transitions.
Why does the configured revolution speed come up as half the value on SINAMICS S120?
Most often p2000 (drive reference speed) is left at the default 1500 rpm while the TO MaxVelocity was set to 3000 rpm. The 100 % setpoint maps to p2000; the rest is clipped. Set p2000 equal to the motor rated rpm to resolve.
Which cyclic OB must trigger a velocity update for it to be applied immediately?
OB 61 (IPO1) at minimum. Updates issued from OB 35/36/37 are accepted but delayed one or two cycles depending on the configured offset. Avoid OB 1 for deterministic velocity changes.
What is the maximum number of axes that a synchronous action can influence per scan?
The CPU-imposed limit is one action per axis per cycle, but a single action can touch multiple axes if their TOs are part of the same cluster. Practical engineering constraint is the 64-line per IPO cycle limit on the 317T-2 DP; above that, code generation throws a warning and the action queue overflows.