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:
- Hardware and firmware prerequisites for Telegram 352 on the G120C.
- Project engineering in TIA Portal (device configuration, slot assignment, IO addresses).
- Reading the six PZD words with
DPRD_DATor direct symbolic access. - Converting the normalized IAIST to engineering units (Amps) using parameter
r2002 / p2002. - 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. |
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
- Open the device view of the G120C and select the PROFINET interface submodule.
- In the Properties pane under PROFINET interface → Telegram configuration, click Add telegram and pick SIEMENS telegram 352, PZD-6/6.
- 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.
- Inputs:
- Download the HW config to the PLC and the drive.
- 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.
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)
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;
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
- 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. - 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
- Reverse the rotation. The IAIST remains positive (regen is signed on 4-Q hardware, but G120C unipolar).
- In Startdrive trace, compare IAIST × p2002 / 16384 against r0027 (smoothed absolute current). The two traces must overlay within ± 1 %.
- 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.