SINAMICS V90 Torque Reading on S7-1200 via Telegram 3 and 750

David Krause23 min read
Motion ControlSiemensTechnical Reference
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

Reading the actual torque of a SINAMICS V90 servo drive from an S7-1200 controller over PROFINET requires more than a single standard telegram. The drive reports smoothed torque through parameter r31, exposes torque-limit setpoints through the supplementary Telegram 750, and only delivers the actual torque value into the cyclic process image when that supplementary telegram is wired alongside a base telegram such as Telegram 3. This reference walks through the configuration in TIA Portal V17, the cyclic PZD layout, the acyclic parameter channel needed to fetch r31 when only the base telegram is wired, the limitations of the S7-1200 Technology Object, and the SCL code required to convert a raw torque word into a usable engineering value and trigger a digital output on a threshold event.

1. Problem Overview

The reported issue is that the actual torque value of a SINAMICS V90 cannot be seen inside TIA Portal V17 when the controller is an S7-1200 communicating over PROFINET with Telegrams 3 and 750 selected in the device configuration. Three things are usually happening at the same time:

  1. Telegram 3 is the standard speed-control telegram. It carries STW1, NSOLL_B, STW2, and NIST_B in the 32-bit speed format, but it does not contain an actual torque word. It contains the smoothed speed and a 16-bit status word, not torque.
  2. The torque value is reported by the V90 in two distinct places: in the supplementary Telegram 750 as M_ACT (smoothed torque, normalized to 0.1% of rated torque) and in the parameter image as r31 (smoothed torque, in the same engineering unit). Telegram 750 must be added to the slot mapping to see M_ACT in the cyclic I/O image; if it is not, the field is unavailable and only the acyclic channel will yield a value.
  3. The S7-1200 Technology Object for SINAMICS V90 supports position and speed-controlled operation; it does not surface a torque-controlled axis object the way the S7-1500 does. Torque limits therefore cannot be written to the TO directly. They have to be written to the V90 over PROFINET either cyclically through Telegram 750 (M_LIMIT_POS and M_LIMIT_NEG) or acyclically through p29050 family parameters.
Engineering impact: when an application only needs a torque threshold output (a torque-reached signal, a slip detector, a clamp feedback), Telegram 3 + Telegram 750 is the canonical pattern. When the application needs closed-loop torque control, an S7-1200 is the wrong controller; the V90 should be commanded from an S7-1500 with a torque-controlled TO, or the S7-1200 should run a custom limit-and-flag scheme using M_LIMIT_POS / M_LIMIT_NEG plus a polled r31 read.

2. System Architecture: S7-1200, V90, and PROFINET

Reference topology for the configuration described in this article:

  • Controller: SIMATIC S7-1200, firmware V4.4 or later (TIA Portal V17 supports firmware V4.4 and V4.5). PROFINET interface on the CPU, X1 port.
  • Drive: SINAMICS V90 PN, firmware V2.0 or later. The PROFINET variant has two RJ45 ports (X1, X2) supporting PROFINET RT with a fixed 1 ms update class on telegram 1 / 3 / 102 / 105 and 4 ms on telegram 7.
  • Servomotor: SIMOTICS S-1FL6 incremental encoder (single-turn) or absolute encoder variant. The encoder type does not change the telegram structure but does change whether the position actual value is meaningful for closed-loop applications.
  • Topology: linear, single CPU and single V90. The V90 is a PROFINET IO Device and is added to the S7-1200 PROFINET IO System. The GSDML file for V90 must be installed in TIA Portal (Options → Manage general station description files (GSD)) before the device appears in the hardware catalog.
  • Watchdog and update: send clock of the IO device is configured to 1 ms; the reduction ratio is set to 1. Telegram 3 is wired in slot 1, subslot 1; Telegram 750 is wired in slot 2, subslot 1.
Verify firmware first. The acyclic record index used in this article (0xB02E, decimal 45006) is supported from V90 PN firmware V1.04 onwards. Earlier firmware will not respond to the parameter record and will return STATUS = 0xDE80 (record not found) on every request. Update the drive with the Siemens Support entry 109747132 if in doubt.

3. Telegram Selection for Torque Feedback

The V90 supports the following PROFINET telegrams out of the box:

Telegram Name Length OUT → IN Carries torque?
1 Standard Telegram 1 (speed, 16-bit) 2 PZD → 2 PZD No
2 Standard Telegram 2 (speed, 32-bit) 4 PZD → 4 PZD No
3 Standard Telegram 3 (speed, 32-bit + torque reduction) 5 PZD → 5 PZD Indirect (M_RED)
5 Standard Telegram 5 (DSC, dynamic servo control) 9 PZD → 5 PZD No
7 Standard Telegram 7 (positioning, single-turn) 5 PZD → 5 PZD No
102 Vendor-specific speed, with torque limits 5 PZD → 5 PZD Yes (limits)
105 DS402 CiA 402 speed, with current actual value 5 PZD → 5 PZD Current only
750 Vendor-specific supplementary telegram (torque) 3 PZD → 3 PZD Yes (limits and actual)

The standard recipe for a torque-threshold application on S7-1200 is Telegram 3 (slot 1) + Telegram 750 (slot 2). Telegram 3 owns the motion control words (STW1, NSOLL_B, STW2, NIST_B) and is what the S7-1200 TO binds to. Telegram 750 owns the torque data (M_LIMIT_POS, M_LIMIT_NEG, M_ACT, plus reserved / status words depending on firmware). Mounting them in separate slots keeps the S7-1200 axis object addressable while still exposing the torque process data to user program code.

4. Telegram 3 PZD Structure (Standard Speed Control)

Telegram 3 is the default for V90 PN speed control. Process data layout (PROFINET is big-endian over the wire, little-endian word order in the S7-1200 process image when little-endian byte swap is disabled):

PZD # Direction Name Size Scaling Description
1 OUT STW1 16 bit Bit field Control word 1 (bit 0 = ON/OFF1, bit 3 = enable, bit 6 = enable setpoint, bit 10 = control by PLC, bit 11 = ramp-function generator enable, etc.)
2 OUT NSOLL_B 32 bit 0x40000000h = 100% rated speed Speed setpoint, normalized. 0x40000000h = M_rated. 0xC0000000h = -M_rated.
3 OUT STW2 16 bit Bit field Control word 2
4 IN ZSW1 16 bit Bit field Status word 1 (bit 0 = ready, bit 2 = operation enabled, bit 3 = fault, bit 7 = warning, bit 10 = control requested, bit 11 = I x t warning, bit 13 = closed-loop torque controlled, etc.)
5 IN NIST_B 32 bit 0x40000000h = 100% rated speed Speed actual, smoothed

None of the five PZDs in Telegram 3 carry the actual torque. The standard speed setpoint NSOLL_B drives the speed controller, and the speed controller output becomes the torque setpoint. The actual torque that the drive is producing at that moment is reported in the supplementary Telegram 750, not in Telegram 3 itself.

5. Telegram 750 PZD Structure (Supplementary Torque Telegram)

Telegram 750 is a vendor-specific (Siemens) supplementary telegram. The V90 PN implements it with three PZDs in each direction. Layout per the SINAMICS V90 PROFINET Operating Instructions:

PZD # Direction Name Size Scaling Description
1 OUT M_LIMIT_POS 16 bit 16384 = 100% M_max Positive torque limit, written by PLC. Capped by p29050/p29051 if smaller. Effective only when p29050[0..3] selects a torque limit source other than fixed value.
2 OUT M_LIMIT_NEG 16 bit 16384 = 100% M_max Negative torque limit, written by PLC. Same rules as M_LIMIT_POS.
3 OUT Reserved / M_ADD 16 bit n/a Reserved on most V90 firmware versions, or a supplementary torque offset when available. Drive documentation for the active firmware is authoritative for the exact meaning.
4 IN M_ACT 16 bit 16384 = 100% M_max Smoothed actual torque. The value the application is asking for.
5 IN Status / M_RMS 16 bit n/a Status word / RMS torque. Behavior is firmware-revision dependent; consult the firmware function manual.
6 IN Actual current / current limit 16 bit 16384 = 100% I_max Smoothed actual current or current limit, firmware-revision dependent. Useful when the application really wants a current trip rather than a torque trip.
Always read the active firmware manual. The PZD assignment for Telegram 750 has been revised between V90 PN firmware V1.04 and V2.00. The list above is the canonical layout for the V1.05 / V2.00 line. Drives on V1.04 use a slightly different mapping where PZD 5/6 of the input side are reserved. Confirm by opening Telegram 750 in the device view of TIA Portal and reading the signal list in the inspector pane.

6. Wiring Telegram 3 + 750 in TIA Portal V17

  1. Open the V90 PN device view in the project tree. Switch to Device view → Properties → PROFINET interface → Telegram configuration.
  2. In Slot 1 / Subslot 1, set telegram to Standard Telegram 3. The S7-1200 Technology Object will bind to this slot when a speed-controlled axis is commissioned.
  3. Click Add telegram. In Slot 2 / Subslot 1, set telegram to Supplementary Telegram 750. The drive now exposes a second I/O area of three words in each direction.
  4. Mark Slot 2 in the device view. The Inspector → IO Tags tab will list all the PZDs. Drag the following into a global data block (DB "V90_IO") to get symbolic names: "V90".M_ACT, "V90".M_LIMIT_POS, "V90".M_LIMIT_NEG, "V90".M_ACT_Status, "V90".M_ACT_Current.
  5. Set the send clock for the PROFINET IO system to 1.0 ms. The V90 update time on the supplementary telegram follows the same send clock; lowering it below 1 ms is rejected by the drive with a configuration fault.
  6. Compile hardware. Watch the log for the warning "PROFINET IO: Telegram 750 requires V90 firmware ≥ V1.04". If it appears, update the drive.
  7. Download hardware to the S7-1200. Confirm the V90 goes to RUN / green link on both ports with the cyclic I/O handshake ticking (Slot 1 and Slot 2 both have cyclic data).

7. Reading r31 (Smoothed Actual Torque) Acyclically

The cyclic M_ACT from Telegram 750 is the same physical quantity as parameter r31 in the V90. r31 is the smoothed torque actual value reported in 0.1% of M_max (16384 = 100% M_max on the PROFINET scale, 1000 = 100% M_max on the parameter scale). When the application cannot mount Telegram 750 – for example because the slot budget is full or because the V90 firmware is older – the same value can be fetched over the DPV1 acyclic parameter channel using the S7-1200's RDREC instruction. The mechanism is identical to what S7-1500 controllers do with the SINA_PARA_S library block; the S7-1200 path is a manual RDREC call.

Mechanics of the V90 acyclic channel:

  • Logical address of the slot: the slot that the V90 occupies in the PROFINET IO system. In a Telegram 3 + 750 layout, slot 1 (Telegram 3) is the one bound by the TO; the acyclic request is normally pointed at slot 1 because Telegram 3 also accepts the parameter channel.
  • Record index: 47 (0x002F) is the standard PROFINET record index for DPV1 parameter access. Some Siemens V90 firmwares also accept index 0xB02E (45006) for the legacy parameter channel – if 47 returns 0xDE80, fall back to 0xB02E.
  • Record data layout (request, 8 bytes minimum):
    Byte Value Meaning
    0 0x01 Function = request parameter
    1 0x01 Number of parameters = 1
    2 0x01 Attribute = value (1) or text (2) or description (3)
    3 0x00 Number of elements = 1 (for non-array parameters)
    4 0x00 Parameter number high byte (r31 = 31, → 0x00)
    5 0x1F Parameter number low byte (31 = 0x1F)
    6 0x00 Index high byte (subindex 0)
    7 0x00 Index low byte (subindex 0)
  • Record data layout (response, 12 bytes for one parameter):
    Byte Value Meaning
    0 0x01 Function = response, no fault
    1 0x01 Number of parameters = 1
    2..3 format + count 0x02, 0x01 = one word (16-bit value)
    4 0x00 Parameter number high (r31 = 0x001F)
    5 0x1F Parameter number low
    6..7 0x0000 Subindex
    8..9 0x0000 Reserved
    10..11 0xVVVV Value (r31 raw, little-endian word, 0.1% units)

8. SCL Implementation: Generic Parameter Read

This block reads any single V90 parameter over the acyclic channel. The ID is the PROFINET hardware identifier of the V90's PROFINET interface; pick it from PLC tags → System constants → <PROFINET IO system> → <V90 PN> → <Interface_1> → Hardware identifier.

FUNCTION_BLOCK "FB_V90_ReadParam"
VAR_INPUT
  i_Execute        : BOOL;          // rising edge triggers a read
  i_HW_ID          : HW_IO;         // hardware identifier of the V90 PROFINET interface
  i_ParamNumber    : UINT;          // parameter number, e.g. 31 for r31
  i_ParamIndex     : UINT := 0;     // subindex, 0 for non-array parameters
END_VAR
VAR_OUTPUT
  o_Done           : BOOL;
  o_Busy           : BOOL;
  o_Error          : BOOL;
  o_Status         : WORD;          // RDREC status
  o_Value          : INT;           // returned 16-bit value (sign-extended to INT for torque)
  o_ValueUDInt     : UDINT;         // returned 32-bit value if format = 0x04
  o_Fault          : BOOL;
END_VAR
VAR
  s_Request        : ARRAY[0..15] OF BYTE; // request header
  s_Response       : ARRAY[0..31] OF BYTE; // response buffer
  s_RDREC_instance : RDREC;        // SFB / instruction instance
  s_State          : INT;          // 0 = idle, 1 = send, 2 = wait
  s_Tick           : TIME;
END_VAR
BEGIN
  IF s_State = 0 AND i_Execute THEN
    // Build DPV1 read request: function 01, count 1, attribute value (1), element count 1
    s_Request[0]  := 16#01;
    s_Request[1]  := 16#01;
    s_Request[2]  := 16#01;
    s_Request[3]  := 16#01;
    s_Request[4]  := WORD_TO_BYTE(SHR(IN:=INT_TO_WORD(i_ParamNumber), N:=8));
    s_Request[5]  := WORD_TO_BYTE(INT_TO_WORD(i_ParamNumber) AND 16#00FF);
    s_Request[6]  := WORD_TO_BYTE(SHR(IN:=INT_TO_WORD(i_ParamIndex), N:=8));
    s_Request[7]  := WORD_TO_BYTE(INT_TO_WORD(i_ParamIndex) AND 16#00FF);
    FOR n := 8 TO 15 DO s_Request[n] := 16#00; END_FOR;
    o_Busy := TRUE; o_Done := FALSE; o_Error := FALSE;
    s_State := 1;
  END_IF;

  IF s_State = 1 THEN
    s_RDREC(REQ := TRUE, ID := i_HW_ID, INDEX := 47,
            MLEN := 16, RECORD := s_Request,
            VALID => o_Done, BUSY => o_Busy, ERROR => o_Error, STATUS => o_Status);
    IF o_Done OR o_Error THEN
      s_State := 2;
    END_IF;
  END_IF;

  IF s_State = 2 THEN
    IF o_Error THEN
      o_Fault := TRUE;
    ELSE
      // Response: byte 0 = 0x81 means fault, otherwise 0x01 = OK
      IF s_Response[0] = 16#81 OR s_Response[0] = 16#82 THEN
        o_Fault := TRUE; o_Status := s_Response[8] OR (s_Response[7] * 256);
      ELSE
        // Value is at offset 10 (16-bit) or 10..13 (32-bit); format byte at offset 2
        IF s_Response[2] = 16#02 THEN
          o_Value      := WORD_TO_INT(BYTE_TO_WORD(s_Response[10]) + BYTE_TO_WORD(s_Response[11]) * 256);
        ELSIF s_Response[2] = 16#04 THEN
          o_ValueUDInt := DWORD_TO_UDINT(BYTE_TO_DWORD(s_Response[10])
                          + BYTE_TO_DWORD(s_Response[11]) * 256
                          + BYTE_TO_DWORD(s_Response[12]) * 65536
                          + BYTE_TO_DWORD(s_Response[13]) * 16777216);
        END_IF;
        o_Fault := FALSE;
      END_IF;
    END_IF;
    s_State := 0;
  END_IF;
END_FUNCTION_BLOCK
Note on the RECORD assignment. The snippet above shows a symbolic structure. When typed into TIA Portal, declare a temporary ARRAY OF BYTE tag, pass it into RDREC.RECORD, then decode the bytes. Do not pass a data block with overlapping use; the RDREC buffer must not be edited by the user program while BUSY is true.

9. SCL Implementation: Torque Threshold Detection

The two typical uses of the V90 torque data are: a "torque reached" output for a press-fit or clamp application, and a torque-limit-monitor for a winding or tensioning application. The following code works on top of the cyclic M_ACT from Telegram 750, scaled in 0.1% units, with a configurable threshold and a hysteresis to prevent chatter.

FUNCTION_BLOCK "FB_Torque_Detect"
VAR_INPUT
  i_M_ACT_Raw      : INT;           // V90.IO.M_ACT (raw, 0.1% units, signed)
  i_ThresholdPct   : REAL := 80.0;  // trip threshold, percent of M_max
  i_HysteresisPct  : REAL := 2.0;   // release margin, percent of M_max
  i_Enable         : BOOL;
END_VAR
VAR_OUTPUT
  o_TorquePct      : REAL;          // engineering value, percent of M_max
  o_TorqueNm       : REAL;          // engineering value in Nm, if M_max known
  o_TorqueReached  : BOOL;
  o_TorqueLatched  : BOOL;          // set on trip, reset by i_Reset
END_VAR
VAR
  s_State          : BOOL;
END_VAR
BEGIN
  // 0.1% raw → percent: divide by 10.0
  o_TorquePct := INT_TO_REAL(i_M_ACT_Raw) / 10.0;
  o_TorqueNm  := 0.0; // populate externally if a M_max constant is known

  IF NOT i_Enable THEN
    o_TorqueReached := FALSE; o_TorqueLatched := FALSE; RETURN;
  END_IF;

  IF NOT s_State THEN
    // not yet tripped — trip on threshold
    IF o_TorquePct >= i_ThresholdPct THEN
      s_State := TRUE; o_TorqueReached := TRUE;
    END_IF;
  ELSE
    // already tripped — release on threshold minus hysteresis
    IF o_TorquePct <= (i_ThresholdPct - i_HysteresisPct) THEN
      s_State := FALSE; o_TorqueReached := FALSE;
    ELSE
      o_TorqueReached := TRUE;
    END_IF;
  END_IF;

  // Latch for "ever tripped since last reset" semantics
  IF o_TorqueReached THEN o_TorqueLatched := TRUE; END_IF;
END_FUNCTION_BLOCK

For a digital output assignment in OB1:

"FB_Torque_Detect"(i_M_ACT_Raw := "V90".M_ACT,
                   i_ThresholdPct := 75.0,
                   i_HysteresisPct := 3.0,
                   i_Enable := TRUE,
                   o_TorquePct => "dbRun".TorquePct,
                   o_TorqueReached => "dbRun".TorqueTrip,
                   o_TorqueLatched => "dbRun".TorqueLatched);

IF "dbRun".TorqueTrip THEN
  Q0.0 := TRUE;   // output "torque reached"
END_IF;
IF "dbRun".ResetLatch THEN
  "dbRun".TorqueLatched := FALSE; "dbRun".ResetLatch := FALSE;
END_IF;

10. Applying Torque Limits via Telegram 750

Two failure modes have to be addressed when writing M_LIMIT_POS and M_LIMIT_NEG from the S7-1200:

  1. Limit is ignored. The V90 only honors the cyclic torque limits when p29050[0] (torque limit upper source) and p29050[1] (torque limit lower source) are set to a value that allows the PROFINET Telegram 750 to win. The default settings on V90 PN firmware V2.0 are p29050[0] = 4 (Telegram 750 M_LIMIT_POS) and p29050[1] = 5 (Telegram 750 M_LIMIT_NEG), but a V-Assistant import or a previous V90 test bench setup can leave them at 1 (fixed) or 3 (analog input). Verify with the V-Assistant parameter list or by reading p29050 acyclically before commissioning.
  2. Limit applied, but motion stalls. Writing 0 as the limit stalls the axis. The drive will sit at I/t current limit and ZSW1 bit 11 (I x t warning) will be set. This is normal and is the only way the cyclic limit can force a stall; do not interpret it as a fault.

Safe-default write pattern (called once during startup or on parameter change):

// Convert a percent value (0..100) to 16-bit torque limit word (16384 = 100%)
"V90".M_LIMIT_POS := REAL_TO_INT(16384.0 * i_PosLimitPct / 100.0);
"V90".M_LIMIT_NEG := REAL_TO_INT(16384.0 * i_NegLimitPct / 100.0);
// Reserved word 3 stays at 0; the drive ignores it on V1.05 / V2.00
"V90".M_ADD := 0;
Direction sign convention. M_LIMIT_NEG is the magnitude of the negative-direction limit, not a signed value. To allow 80% of rated torque in either direction, write 0x4000 (16384 × 0.8 = 13107) into both M_LIMIT_POS and M_LIMIT_NEG. Writing -13107 (0xCDB5) into M_LIMIT_NEG is a common mistake and is silently clamped to 0 by the V90, so the axis can stall in the negative direction.

11. Alternative: Reading r27 (Actual Current) for Trip Detection

When the application only needs a current rise detector (jam detection, broken-tool detection) rather than a true torque trip, parameter r27 (smoothed actual current) is a faster signal and does not require the motor torque constant. r27 is reported in 0.1% of I_max, same scaling as r31. Telegram 105 (DS402) carries a current actual value in the cyclic image; Telegram 750's PZD 6 also carries a current-related value on the V2.00 firmware. The RDREC block in section 8 reads r27 with i_ParamNumber := 27 and no other changes.

Note that r27 is current, not torque. For a constant load torque, the two are related by I ∝ M, but during acceleration / deceleration the current actual value includes the dynamic component. For mechanical jam detection this is acceptable and often desirable. For an accurate torque trip, use r31 / M_ACT instead.

12. S7-1200 Technology Object Limitations

The S7-1200 axis object (TO) supports two modes against the V90 PN: position-controlled (positioning axis with Telegram 7) and speed-controlled (speed axis with Telegram 1 / 2 / 3). It does not support a torque-controlled axis object. The implications are:

  • Torque limits must be written to the V90 by the user program (Telegram 750 or acyclic p29050). The TO has no "set torque limit" instruction.
  • A torque-controlled motion (e.g. constant-torque winding) cannot be commanded from an S7-1200 TO. It can be approximated by limiting the speed setpoint inside Telegram 3 and accepting a velocity-controlled motion with torque saturation, or by closing the torque loop entirely in the S7-1200 user program against a polled r31 value.
  • Real closed-loop torque control with a current / torque pre-control channel and a torque PI controller is only available on S7-1500 with the TControl TO and Telegram 5 (DSC) or Telegram 102. Move to an S7-1500 if true torque control is required.
Toolchain pin. TIA Portal V17 installs the technology object templates in Technology objects → SINAMICS V90 PN. The wizard asks which telegram to bind to. Picking Telegram 3 here is the correct choice; the wizard does not ask about Telegram 750 because it is supplementary and is read by user code, not by the TO.

13. V-Assistant Parameters: Importing to TIA Portal

The V-Assistant tool (Siemens part number 6SL3270-0CA00-0AG0 for the configuration version, distributed with Starter / Startdrive) configures the V90 offline and produces a parameter set in *.dnx or *.pdpx format. TIA Portal V17 does not import those files directly. The supported import path is:

  1. Use the V-Assistant to identify the parameters that need to be set on the drive (p29050, p29060, p29075, p29076, encoder type, p29004 control mode, etc.).
  2. Export the parameter set from V-Assistant as a CSV or text file.
  3. Use the SINAMICS V90 PN function manual (the official source is the operating instructions linked below) to map each V-Assistant parameter to its corresponding TIA Portal device parameter view entry. The V90 parameter view in TIA Portal V17 is read-only – it shows what is currently in the drive – but it is the canonical source for the on-line configuration.
  4. Apply the parameters in one of three ways: (a) upload from the drive to the project with Device → Upload to PG/PC after the V-Assistant has written them to the drive, (b) use the BOP (Basic Operator Panel) to enter them by hand, or (c) write them acyclically from the S7-1200 startup OB using RDREC's sibling instruction WRREC.

14. Commissioning and Verification Checklist

  1. Drive powers up, both PROFINET ports show green link. CPU online diagnostics → V90 shows green check on all configured slots (slot 0 = the head module, slot 1 = Telegram 3, slot 2 = Telegram 750).
  2. ZSW1 bit 0 (ready) and bit 2 (operation enabled) are both 1 after STW1 bit 0 and bit 3 are set. Without this, the actual torque word M_ACT reads 0 regardless of mechanical load.
  3. Force the motor to a known mechanical load (e.g. clamp a hand-tight coupling). Read M_ACT and verify it changes with load. A change of less than 0.5% (5 raw LSBs) under hand pressure is acceptable. No change means Telegram 750 is not being read – check the slot mapping.
  4. Write a small M_LIMIT_POS (e.g. 1638 = 10%). Accelerate the motor; verify that the speed actual stalls and ZSW1 bit 11 (I x t warning) is set. Restore the limit; the motor should resume.
  5. Trigger an r31 acyclic read using FB_V90_ReadParam with i_ParamNumber := 31. Verify the returned word matches the cyclic M_ACT to within 2 LSB. If they disagree by more than 50 LSB, the acyclic record index is wrong (47 vs 0xB02E) or the slot is wrong.
  6. Commission a small motion (a slow MC_MoveVelocity with v_target = 50 rpm). Verify that NIST_B follows NSOLL_B, ZSW1 bit 10 is set, and M_ACT remains within ±100% during the move.
  7. Check the S7-1200 cycle time. With 1 ms PROFINET send clock and RDREC running every 50 ms, the OB1 cycle must stay below 8 ms on a CPU 1214C / 1215C. Higher OB1 cycle times cause PROFINET jitter and ZSW1 bit 3 (fault, communication failure) on the drive.

15. Fault and Diagnosis Matrix

Symptom Likely cause Diagnostic step Remedy
M_ACT is always 0 STW1 bit 0 or bit 3 not set; drive not enabled Online → V90 IO tags → STW1 word: bits 0 and 3 must be 1 Drive the TO or write STW1 from user program: STW1.0 := 1, STW1.3 := 1
M_ACT is 0 even with STW1 bits set Telegram 750 not wired in slot 2; only Telegram 3 (slot 1) mapped Device view → Slot overview: confirm slot 2 = Telegram 750 Add supplementary telegram 750 to slot 2, recompile HW, download
M_ACT is non-zero but never reaches the set threshold Threshold entered as percent, but M_ACT scale is 0.1%; threshold 80 was treated as 0.08% Watch o_TorquePct in online watch; verify the percent value matches the percent of M_max Set i_ThresholdPct in percent units, not raw 0.1% units
RDREC for r31 returns STATUS = 0xDE80 Wrong record index or wrong slot hardware identifier Try INDEX := 16#B02E (45006) and verify i_HW_ID matches the V90 PROFINET interface (not the head module slot 0) Use the correct HW identifier from the system constants; fall back to 0xB02E if 47 is rejected
M_LIMIT_POS accepted, but motor still produces full torque p29050[0] not pointing to Telegram 750 (could be fixed value, BI, or analog input) Read p29050[0] acyclically (parameter number 29050, subindex 0) and verify value 4 Write p29050[0] := 4 via WRREC or V-Assistant
ZSW1 bit 3 (fault) is set, drive F30001 / F7800 / F08501 PROFINET watchdog tripped, cycle time on S7-1200 too long, or telegram configuration mismatch Online → Diagnostics buffer; check the OB1 max cycle time in the CPU web server or trace Reduce OB1 cycle time below 8 ms, increase PROFINET update time to 2 ms, fix any hardware compilation warning
Torque trip latches and never releases i_Enable is held FALSE and the latch reset is never pulsed Watch the latch reset bit; check that i_Enable rises and falls as expected Add a one-shot on the HMI "reset" button; pulse the latch-reset input
Reading r27 instead of r31 and wondering why the values look small r27 is current, not torque, and is in 0.1% of I_max, not 0.1% of M_max Compare a no-load M_ACT and a no-load r27: r27 will be the I_q offset, M_ACT will be near 0 Use r31 / M_ACT for torque trips; reserve r27 for current-only trip logic (jam, broken tool)

Reference Material and Official Documentation

Authoritative Siemens documents to verify the behavior above against the active firmware revision:

Which Telegram exposes the actual torque of a SINAMICS V90 on PROFINET?

The actual torque is exposed by the supplementary Telegram 750 as the input word M_ACT, scaled 16384 = 100% of M_max. Standard Telegram 1, 2, 3, 5, and 7 do not carry torque feedback. Mount Telegram 3 in slot 1 (speed control) and Telegram 750 in slot 2 to see both the motion data and the torque data in the cyclic I/O image.

How do I read V90 parameter r31 (actual torque) from an S7-1200 acyclically?

Use the S7-1200 RDREC instruction with the hardware identifier of the V90's PROFINET interface, record index 47 (0x002F, or 0xB02E on older firmware), and an 8-byte DPV1 read request: bytes [0..3] = 0x01 0x01 0x01 0x01 and bytes [4..7] = parameter number 0x001F (31) followed by subindex 0x0000. Decode the 16-bit value at offset 10 of the response. r31 reports smoothed torque in 0.1% of M_max.

Can the S7-1200 Technology Object write torque limits to a SINAMICS V90?

No. The S7-1200 axis object supports speed-controlled and position-controlled modes only. Torque limits must be written from user code, either cyclically into Telegram 750's M_LIMIT_POS / M_LIMIT_NEG words, or acyclically to p29050[0] and p29050[1]. The drive must be configured so that p29050[0] = 4 and p29050[1] = 5 for the cyclic limit to be honored.

Why does M_ACT read 0 even though Telegram 3 and Telegram 750 are configured?

ZSW1 bits 0 (ready) and 2 (operation enabled) must both be 1 for the drive to compute and report torque. Drive STW1 bit 0 (ON/OFF1) and bit 3 (enable) high. If the S7-1200 TO has not yet enabled the axis, M_ACT will be exactly 0. Verify the enable path through the TO or, in standalone tests, by setting STW1 from a watch table.

What is the difference between reading r27 (current) and r31 (torque) for a trip output?

r27 (smoothed actual current) reacts faster and includes the dynamic component, so it is preferred for jam and broken-tool detection. r31 (smoothed actual torque) tracks the motor torque and is preferred for press-fit, clamp, and winding-tension applications. r27 scales with the motor current, r31 with M_max; the two are related by the torque constant but only for steady-state conditions. Use the S7-1200 RDREC pattern with i_ParamNumber := 27 or 31 accordingly.

Back to blog