Reading SINAMICS G120C Current via Telegram 352 on PROFINET

David Krause12 min read
SiemensTutorial / How-toVFD / Drives
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. Overview

The SINAMICS G120C is a compact, wall-mount / cabinet-mount frequency inverter that communicates natively with SIMATIC S7-1200 / S7-1500 controllers over PROFINET IO. When the cyclic telegram is set to Siemens Telegram 352 (PZD-6/6), the drive transmits six process data words to the PLC at every bus cycle, including a normalized actual current value (IAIST) in PZD3.

This reference covers the full signal chain:

  1. Hardware and firmware prerequisites for Telegram 352 on the G120C.
  2. Project engineering in TIA Portal (device configuration, slot assignment, IO addresses).
  3. Reading the six PZD words with DPRD_DAT or direct symbolic access.
  4. Converting the normalized IAIST to engineering units (Amps) using parameter r2002 / p2002.
  5. Commissioning verification and a troubleshooting matrix for the most common faults.

The same scaling law applies to SINAMICS G120 (with CU240E-2 / CU250S-2 Control Units), G120D, G120P and SINAMICS V20 / V90 / S210 when Telegram 352 is selected, because the normalization is a SINAMICS-platform convention rather than a G120C-specific feature.

2. Prerequisites

Item Required version / part Notes
SINAMICS G120C FW ≥ 4.7 (Control Unit CU240E-2 PN / CU240E-2 PN-F) Telegram 352 supported since FW 4.5; FW 4.7+ recommended.
STARTER / Startdrive Startdrive V15.1 or higher in TIA Portal V15.1+ Adds Telegram 352 to the G120C device catalog.
SIMATIC PLC S7-1200 (FW ≥ 4.2) or S7-1500 (any FW) DPRD_DAT exists from S7-300 onwards.
TIA Portal V15.1 / V16 / V17 / V18 G120C HSP / Support Package must be installed.
GSD file GSDML-Vx.x-Siemens-Sinamics-S120-… Not required if Startdrive is used; required for third-party masters.
Motor data p0304 / p0305 / p0307 configured and motor identification completed Drives p2002 and the IAIST normalization.
Reference current p2002. The drive reports currents normalized to p2002 (reference current, default = 150 % of motor rated current p0305). A raw PZD value of 4000H (16384dec) equals 100 % of p2002. Verify p2002 in the parameter list before scaling; it is the single most common cause of "incoherent" current readings.

3. Telegram 352 PZD Layout

Telegram 352 is a Siemens-specific, free-configurable telegram with 6 process data words in each direction. On the G120C the default interconnect is:

PZD slot PLC → Drive (receive words) Drive → PLC (send words)
PZD1 STW1 — Control Word 1 (bit-driven ON/OFF, enable, fault ack) ZSW1 — Status Word 1
PZD2 NSOLL_A — Speed setpoint (normalized to p2000) NIST_A — Actual speed (normalized to p2000)
PZD3 STW3 (optional) / free interconnect IAIST — Actual current (normalized to p2002)
PZD4 free interconnect MIST — Actual torque (normalized to p2003)
PZD5 free interconnect PIST — Actual power (normalized to p2004)
PZD6 free interconnect ZSW3 / free interconnect

The interconnect shown is the Startdrive default after inserting the drive. If the receiving PLC only sees "zero" in PZD3 while PZD1 / PZD2 update correctly, the BICO source for IAIST on the drive has been overwritten; restore it to r0068[0] in the expert list (parameter p2051[2] = 6 for IAIST, p2061[2] = 0).

3.1 Status word ZSW1 bit map (PZD1 drive → PLC)

Bit Signal Meaning when = 1
0 Ready to switch on Power section ready, no fault active
1 Ready to operate DC bus charged, ON command accepted
2 Operation enabled Pulses enabled, motor follows setpoint
3 Fault present Read fault buffer r0945/r0947/r0949
4 Coast down active OFF2 issued
5 Quick stop active OFF3 issued
6 Switch-on inhibited ON command latched, must reset
7 Alarm active r2111 contains active alarm codes
8 Speed setpoint / actual deviation |n_act - n_set| > p2161
9 Control requested PLC control (PROFINET) active
10 f or n reached / exceeded p2141/p2142 threshold

4. Configuring Telegram 352 in TIA Portal

  1. Open the device view of the G120C and select the PROFINET interface submodule.
  2. In the Properties pane under PROFINET interface → Telegram configuration, click Add telegram and pick SIEMENS telegram 352, PZD-6/6.
  3. Confirm the IO addresses the compiler assigns. For a typical project you will see:
    • Inputs: IW256 … IW266 (six 16-bit words → 12 bytes starting at 256).
    • Outputs: QW256 … QW266.
  4. Download the HW config to the PLC and the drive.
  5. Open the drive's online dialog and verify in Communication → Telegram monitoring that the cyclic frame is present and r2050[0..5] mirror the received setpoints.
Address pinning. PROFINET IO addresses are assigned in slot order. If you insert a G120C after another PROFINET device, the input base address will not be 256; inspect the device properties and replace the constant offset in every code sample below with the actual base address.

5. Reading the PZD with DPRD_DAT

The standard, vendor-neutral approach is to call DPRD_DAT (Read consistent data of a DP standard slave / PROFINET IO device) once per telegram slot. Telegram 352's six PZD words are consistent only if read in a single call when the input area starts on a word boundary.

5.1 Ladder (FBD) variant

// One call reads all 12 input bytes (6 PZD words) into DB "DriveTlg".TlgIn
CALL DPRD_DAT(
    LADDR := 256,                    // PROFINET input start address
    RET_VAL := "DriveTlg".retVal,    // Return code (W#16#0000 = OK)
    RECORD := "DriveTlg".TlgIn       // ANY pointer to 12 bytes
);

Define DriveTlg.TlgIn as a 12-byte ARRAY[0..11] of BYTE or a structure with six INT members:

TYPE Telegram352_In :
    STRUCT
        ZSW1    : INT;   // Status word 1
        NIST_A  : INT;   // Actual speed
        IAIST   : INT;   // Actual current (normalized to p2002)
        MIST    : INT;   // Actual torque (normalized to p2003)
        PIST    : INT;   // Actual power (normalized to p2004)
        ZSW3    : INT;   // Status word 3 / free
    END_STRUCT;
END_TYPE

5.2 Symbolic IO access (preferred on S7-1500)

Starting with TIA Portal V14 and S7-1500 FW 1.8, PROFINET subslots can be addressed symbolically. After activating IO device substitution → symbolic name, the PLC tags are generated automatically:

#Status_Word  := "G120C".PROFINET_Interface.Telegram_352.ZSW1;
#Speed_Hz     := "G120C".PROFINET_Interface.Telegram_352.NIST_A;
#Current_raw  := "G120C".PROFINET_Interface.Telegram_352.IAIST;
#Torque_raw   := "G120C".PROFINET_Interface.Telegram_352.MIST;
#Power_raw    := "G120C".PROFINET_Interface.Telegram_352.PIST;

6. Scaling the IAIST to engineering units

The IAIST value arriving in PZD3 is a signed 16-bit integer normalized to p2002 (reference current, in Amps). The official Siemens normalization is 100 % = 16384 (4000H). One LSB therefore represents:

I_LSB = p2002 / 16384 [A]

Actual current in Amps:

I_actual = IAIST_raw × p2002 / 16384 [A]

If you want a percentage of motor rated current (for bar graphs, HMI faceplates), use:

I_percent = 100 × I_actual / p0305 [%]

Because p2002 is normally pre-loaded to 150 % of p0305, an IAIST reading of 10923 (≈ 2/3 of 16384) corresponds to:

I_actual = 10923 × (1.5 × 1.5 A) / 16384 = 1.50 A (100 % of motor rated)

Sign convention. IAIST is signed; negative values represent motoring regeneration (energy returned to the DC bus on a four-quadrant drive). For a standard G120C (no Active Line Module) the value will be clamped to ≥ 0 when the brake chopper is dissipating or when the ramp is preventing overshoot.

6.1 Closed-loop SCL implementation

// Inputs
#IAIST_raw    : INT;     // From PZD3
#p2002        : REAL;    // Reference current, normally 1.5 × p0305
#p0305        : REAL;    // Motor rated current
#I_act_A      : REAL;
#I_act_pct    : REAL;

#I_act_A   := INT_TO_REAL(#IAIST_raw) * #p2002 / 16384.0;
#I_act_pct := 100.0 * #I_act_A / #p0305;

6.2 Ladder alternative

      ITD                       // Convert IAIST INT → DINT
      DTR                       // DINT → REAL (in accumulator 1)
      L 1.5e+0                 // Load default p2002 multiplier placeholder
      *R                       // Multiply
      L 1.6384e+4             // Load 16384.0
      /R                       // Divide
      T "Drive".I_act_A        // Store REAL
      L "Drive".p0305          // Load rated current
      /R                       // → fraction
      L 1.0e+2                // 100 %
      *R                       // → %
      T "Drive".I_act_pct

6.3 PEEK_WORD direct access (S7-1500 only)

On S7-1500 the input area can be polled without DPRD_DAT by peeking the process-image partition directly. This is useful when integrating the read inside an existing function block that already runs in OB1 with the process image in PIP 0.

#Current_raw := PEEK_WORD(
    area       := 16#81,                              // Process image inputs (PIP 0)
    byteOffset := UINT_TO_DINT(#I_DRIVE_BASE_ADDR) + 4, // +4 bytes = 2 words past ZSW1
    dbNumber   := 0
);

#Current_A := INT_TO_REAL(#Current_raw) * #p2002 / 16384.0;
#Current_pct := 100.0 * #Current_A / #RatedCurrent;
PEEK_WORD vs DPRD_DAT. PEEK_WORD reads directly from the process image and therefore does not re-trigger a PROFINET read. It is faster but assumes the IO has already been updated by the OB1 / OB6x cycle. Use DPRD_DAT when you must guarantee a fresh sample inside a slow OB (e.g. OB35) or when the input area falls into a PIP other than 0.

7. Putting it together — a reusable Telegram 352 FB

The Siemens application example "SINAMICS G120 / S120 Telegram 352 with SIMATIC S7" (entry ID 70155469) provides FB11 SINA_TLG352 as a reference implementation. The signature is:

Parameter Direction Type Description
LADDR IN INT PROFINET IO base address of the drive (e.g. 256)
SEND INOUT STRUCT 6-word output structure (STW1, NSOLL_A, …)
RECV INOUT STRUCT 6-word input structure (ZSW1, NIST_A, IAIST, MIST, PIST, ZSW3)
Fault / Warn OUT WORD / BOOL Aggregate fault / warning
Busy OUT BOOL TRUE while the FB is updating the buffers

The FB internally calls DPRD_DAT and DPWR_DAT once and unpacks the six words. The scaling math (IAIST → Amps) is intentionally not inside the FB; do it downstream so the block stays reusable for VFDs with different p2002.

// Excerpt: drive-side control word set
"DriveDB".STW1.0 := TRUE;   // ON / OFF1
"DriveDB".STW1.1 := FALSE;  // OFF2 (1 = no OFF2)
"DriveDB".STW1.2 := FALSE;  // OFF3
"DriveDB".STW1.3 := TRUE;   // Enable operation
"DriveDB".STW1.7 := FALSE;  // Fault acknowledge pulse (set TRUE for one cycle)
"DriveDB".NSOLL_A := REAL_TO_INT(#n_set_Hz * 16384.0 / #p2000);

8. Verification & commissioning checks

  1. Stop the drive (no enable, OFF1 = 0) and read IAIST — the value must be exactly 0 with low jitter. Any offset indicates the BICO source on p2051[2] has been re-wired.
  2. Enable the drive with a small positive setpoint and load the motor to ~50 % rated current with a brake / dynamometer. Confirm:
    • ZSW1 bit 2 = 1 (operation enabled)
    • NIST_A follows NSOLL_A
    • IAIST ≈ 0.5 × 16384 = 8192 ± 50
  3. Reverse the rotation. The IAIST remains positive (regen is signed on 4-Q hardware, but G120C unipolar).
  4. In Startdrive trace, compare IAIST × p2002 / 16384 against r0027 (smoothed absolute current). The two traces must overlay within ± 1 %.
  5. Verify on the HMI that the bar graph reads 100 % at motor rated current.

9. Troubleshooting matrix

Symptom Likely root cause Diagnostic step Fix
All PZD words read 0 even though drive is enabled Wrong base address passed to DPRD_DAT or PIP not updated Online → Monitor & Force Table: inspect IW256..IW266 in raw form Re-check LADDR; ensure the same PROFINET subnet is online
ZSW1 updates, NIST_A updates, IAIST always 0 BICO source of p2051[2] overwritten in expert list Read r2050[2] online Set p2051[2] = 6 (IAIST) and p2061[2] = 0
Current reads 0–27000 but motor is 1.5 A Scaling by 0–27648 instead of 0–16384 Inspect scaling constant Divide by 16384 (Sinamics reference) not 27648 (S7 analog-norm)
Current sign wrong or wraps at ±32767 INT overflow because p2002 set too low Read p2002; calculate expected peak IAIST Increase p2002 to ≥ 1.5 × p0305
DPRD_DAT RET_VAL ≠ 0 (e.g. 80A1H) IO fault or device not in cyclic data exchange Online → Diagnostics → PROFINET diagnostics Check device name, IP, and that Telegram 352 is selected in the drive
Current value jumps ±20 % randomly Calling DPRD_DAT more than once per OB cycle breaks consistency Cross-reference occurrences of DPRD_DAT Read once per cycle, copy to working buffer
Current reads correctly in OB1 but wrong in OB35 PIP ownership wrong; OB35 has its own process image Check OB35 PIP settings Either read from PIP 1 in OB35 or move data in OB1 and use PIP 0 everywhere
Drive goes into F08501 after enabling PROFINET watchdog timeout — cyclic frame missing Inspect r2050 and PROFINET diagnostics buffer Reduce p2042 (watchdog) or fix PLC scan time

10. Parameter quick-reference

Parameter Meaning Default Used for
p0305 Motor rated current From nameplate Motor thermal model, scaling %
p2000 Reference speed p0310 (rated speed) NSOLL_A / NIST_A normalization
p2002 Reference current 1.5 × p0305 IAIST normalization — central to this article
p2003 Reference torque 1.5 × p0333 MIST normalization
p2004 Reference power r2004 (calc) PIST normalization
p2042 PROFINET watchdog time (ms) 100 Cyclic timeout — see F08501
p2051[0..15] BICO source for each PZD sent to PLC see list Restore default if PZD3 returns 0
r2050[0..5] Live view of received process data — Drive-side trace
r0027 Smoothed absolute current — Reference for IAIST sanity check

11. Notes on related telegrams and platforms

Telegram 352 is the most convenient choice for G120C because all four key actuals (speed, current, torque, power) are pre-wired. The other options behave as follows:

Telegram PZD length IAIST position When to use
Standard 1 2/2 Not included Simple V/Hz with speed only
Standard 3 5/9 PZD4 Vector control with encoder
Standard 6 6/6 PZD4 Speed + torque limiting
Siemens 352 6/6 PZD3 All four actuals + free interconnect
Free telegram 999 1..32 Configurable Legacy / non-TIA masters

On SIMATIC S7-300 / S7-400 with classic STEP 7 the same scaling formula applies, but you must generate the GSD file manually from the G120C GSDML and use SFC14 / SFC15 instead of DPRD_DAT / DPWR_DAT.

On third-party PROFINET masters (e.g. Allen-Bradley, Beckhoff, B&R) keep the 16384 normalization constant; do not substitute the S7 analog-input 27648 scaling unless you also re-scale the drive-side reference parameter, which is not possible.

How do I read the actual current from a SINAMICS G120C over PROFINET?

Configure Telegram 352 (PZD-6/6) on the G120C and call DPRD_DAT with the drive's IO base address. The current is in PZD3 (IAIST) as a signed 16-bit INT normalized to p2002. Convert to Amps with I_A = IAIST × p2002 / 16384. See the example FB11 at Siemens entry ID 70155469.

What is parameter p2002 on a SINAMICS G120 / G120C?

p2002 is the reference current used for normalizing all current-related process data (IAIST, torque, power). Its default value is 150 % of the motor rated current (p0305) and it is the basis of the 16384 normalization used by Telegram 352. Change it only when you need a finer resolution for a high-current motor.

Why does my G120C current reading show 0–27000 instead of 0–1.5 A?

You are applying the S7 analog-input 0–27648 scaling instead of the SINAMICS 0–16384 normalization. Replace the divisor with 16384 and multiply by p2002; the result will then match the motor nameplate current (e.g. 1.5 A at full load).

PZD3 (IAIST) is always 0 but ZSW1 and NIST_A update correctly — what is wrong?

The BICO source for the third send-PZD has been re-wired in the expert list. Set p2051[2] = 6 to restore IAIST and p2061[2] = 0. After download, the IAIST will appear immediately.

Can I use PEEK_WORD instead of DPRD_DAT on S7-1500?

Yes. PEEK_WORD(area := 16#81, byteOffset := baseAddr + 4, dbNumber := 0) reads the IAIST word directly from the process image and is faster, but it cannot re-trigger a PROFINET read and assumes the PIP has already been refreshed. Use DPRD_DAT when you need a guaranteed fresh sample inside a slow OB.

Back to blog