Integrating SINAMICS G120 via PROFIBUS Without FbDrive Libraries

David Krause22 min read
ProfibusSiemensTutorial / How-to
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

Integrating SINAMICS G120 via PROFIBUS Without FbDrive Libraries

Engineers commissioning SINAMICS G120 inverters on a SIMATIC PCS 7 V6.1 controller face a recurring question: can Telegram 20 or Telegram 352 be read and written directly through the I/O image produced by HW Config, or is a Siemens library (FbDrive, DriveES) mandatory? The answer is yes — both telegrams can be operated with raw word-level I/O access. This reference walks through the PROFIdrive mapping, the control-word sequencing required to start, stop, and fault-acknowledge the drive, and the practical steps to bring up two CU240 Control Units on a PCS 7 AS station without licensing a single drive library block.

System Overview and Problem Definition

The target architecture is a standard PCS 7 V6.1 automation station (AS) running on a SIMATIC S7-400 CPU (typically a CPU 417-4H or AS 410 in newer migrations), connected to two SINAMICS G120 inverters equipped with CU240B-2 DP or CU240E-2 DP Control Units. PROFIBUS DP, baud rate 1.5 Mbit/s, is the fieldbus of choice, and the goal is to extract speed setpoint, actual speed, torque, and current feedback without the FbDrive / DriveES SIMATIC libraries that the official PCS 7 APL example would normally use.

The difficulty is not in the protocol — Telegram 1, 20, and 352 are PROFIdrive-standard PPO mappings defined in the PROFIdrive profile. The difficulty is the perception that the drive library is "required." It is not. The library merely packages the standard PZD layout into a named function block (typically FB 166 in DriveES). Once you understand the underlying control word / status word (STW1 / ZSW1) bit assignments and the scaling of NSOLL_A / NIST_A, the raw I/O approach is actually smaller, easier to commission with a PROFIBus tester, and version-independent of any Siemens library hotfix.

Engineering decision point. Pick Telegram 20 when the OS faceplate must display torque, current, power, and alarm bits in addition to speed. Pick Telegram 352 only when torque limiting or extended status channels are required; Telegram 352 is also the recommended mapping if you intend to use Speed Control with Torque Limiting on a CU250S, as documented in the SINAMICS G120 with CU250S product finder entry. Telegram 1 is acceptable when only start/stop and speed setpoint are required.

Prerequisites

  • SIMATIC PCS 7 V6.1 SPx installed on the engineering station with STEP 7 V5.4+ and HW Config available.
  • Two SINAMICS G120 inverters with CU240B-2 DP or CU240E-2 DP Control Units. Firmware V4.5 or higher is recommended (V4.7 SP3 was the last released branch for the CU240B-2 line per the Siemens Industry Online Support release notes).
  • STARTER V4.3+ or SINAMICS Startdrive for parameterization of the CU.
  • PROFIBUS DP cable, PROFIBUS connectors with terminating resistors enabled at both ends of the segment.
  • GSD file for the CU: SI018111.GSD for the CU240B-2 DP / CU240E-2 DP family (GSD revision 5 or higher). Downloaded from the Siemens support portal.
  • Siemens example project, entry ID 58820849 — the free FB10 / FB11 source that can be copied into a PCS 7 CFC chart if you decide not to operate with raw I/O.

Telegram Selection: 1 vs 20 vs 352

The telegram number does two things: it sets the length of the cyclic PROFIBUS PZD payload, and it triggers the SINAMICS-side interconnection that decides which BICO source feeds each PZD word. The actual word layout in the PROFIBUS frame is what your STEP 7 program will read and write.

Telegram PZDs (out / in) Output (PLC → drive) Input (drive → PLC) Typical use
1 2 / 2 STW1, NSOLL_A ZSW1, NIST_A Basic start/stop + speed
20 6 / 6 STW1, NSOLL_A, M_LIM, reserved, reserved, reserved ZSW1, NIST_A, IAIST_GLATT, MIST_GLATT, PIST_GLATT, ZSW2 Standard speed control with actual current, torque, power, and ZSW2
352 6 / 6 STW1, NSOLL_A, M_LIM, STW2, reserved, reserved ZSW1, NIST_A, IAIST_GLATT, MIST_GLATT, WARN_CODE, ZSW2 Speed control with torque limit, warning code, and ZSW2

All three telegrams conform to the PROFIdrive application class 1 (AC1) model with PROFIdrive-typical signal scaling:

  • NSOLL_A and NIST_A are normalized to 4000 hex = 100 % of p2000 (reference speed, default 1500 rpm).
  • IAIST_GLATT (current) is normalized to 4000 hex = 100 % of p2002 (reference current, default driven by motor data).
  • MIST_GLATT (torque) is normalized to 4000 hex = 100 % of p2003 (reference torque, default driven by motor rated torque).

Because Telegram 20 already provides MIST_GLATT and IAIST_GLATT, it is the typical choice for a PCS 7 faceplate that displays motor current and torque. Telegram 352 trades the power word (PIST) for a torque limit (M_LIM) and warning code (WARN_CODE), which is more useful if the drive is in a tension-control or winder application.

PROFIBUS GSD Installation in PCS 7 V6.1

  1. Copy SI018111.GSD and the matching bitmap file (SI0B8111.bmp or similar) into the STEP 7 GSD directory: C:\Program Files\Siemens\Automation\S7\S7HWCNF\SDB\GSD or the equivalent PCS 7 path.
  2. Launch HW Config and choose Options → Install GSD File. Browse to the file, install, and confirm that "SINAMICS G120 CU240B-2 DP" or "CU240E-2 DP" appears in the catalog tree under PROFIBUS DP → Drives → SIEMENS AG.
  3. Drag the G120 slave onto the PROFIBUS subnet. Assign a unique PROFIBUS address (typical: 4 and 5 to leave headroom for HMI and engineering tools).
  4. Double-click the slave icon, switch to the Configuration tab, and select the telegram. For Telegram 20, choose PPO type 6 / PZD 6/6 (Telegram 20); the slot in the slave's slot configuration will then display six PZD slots in each direction.
  5. Note the I and Q addresses assigned by HW Config — for example IW 256..267 and QW 256..267. These are the raw process values that the CFC program will read and write.

Repeat for the second drive. A two-drive PROFIBUS line typically looks like this:

S7-400 CPU AS 417 / PCS 7 V6.1 CFC + SCL blocks PROFIBUS DP 1.5 Mbit/s, DP-V1 G120 Drive 1 CU240E-2 DP @ PB addr 4 Telegram 20, 6/6 PZD G120 Drive 2 CU240B-2 DP @ PB addr 5 Telegram 20, 6/6 PZD I/O image 1 (drive 1): IW256..IW267 / QW256..QW267 I/O image 2 (drive 2): IW272..IW283 / QW272..QW283 PZD layout (Telegram 20, both directions) PZD1: STW1 / ZSW1 — control & status word 1 PZD2: NSOLL_A / NIST_A — speed setpoint / actual (4000h = p2000) PZD3: M_LIM / IAIST — torque limit / actual current (4000h = p2002) PZD4: rsvd / MIST_GLATT — actual torque (4000h = p2003) PZD5: rsvd / PIST_GLATT — actual power (4000h = r2004) PZD6: rsvd / ZSW2 — status word 2 (extended diagnostics)

Control Word and Status Word (PROFIdrive Profile)

STW1 and ZSW1 follow the PROFIdrive application class 1 state machine. The transition graph is non-trivial because bits 0–3 are "level-controlled" for some transitions and "edge-controlled" for others, and the OFF2 / OFF3 bits are "0 = active" fail-safe bits. The complete bit layout:

Bit STW1 (PLC → drive) ZSW1 (drive → PLC)
0 ON / OFF1 (edge: 0→1 = ON, 1→0 = OFF1 ramp) Ready to switch on
1 OFF2 (1 = coast stop enable, 0 = immediate coast) Ready for operation
2 OFF3 (1 = enable, 0 = quick stop on ramp) Operation enabled
3 Enable operation (inverter pulses enable) Fault present (active)
4 Enable ramp-function generator (RFG) OFF2 active
5 Unfreeze / start RFG (continue ramp) OFF3 active
6 Enable setpoint (apply NSOLL_A to RFG) Switching-on inhibited (internal interlock)
7 Fault acknowledge (0→1 edge = reset fault) Alarm present (non-fatal)
8 Jog bit 0 (jog 1 via fixed setpoint 7) Speed setpoint / actual deviation outside tolerance
9 Jog bit 1 (jog 2 via fixed setpoint 15) Control requested (PLC must keep bit 10 of STW1 set)
10 Control by PLC (1 = PLC owns control) f or n comparison value reached (within tolerance)
11 Reserved / set to 0 I, M, or P limit reached
12 Reserved / set to 0 Open holding brake / brake released
13 Reserved / set to 0 Alarm: motor overtemperature
14 Reserved / set to 0 Motor rotates forward (n_act ≥ 0)
15 Reserved / set to 0 CDS bit (active command data set)

The PROFIdrive state machine is what your CFC chart must reproduce. The canonical control-word sequence for a normal start is:

S0 Not ready STW1=047E S1 Switch-on inhibit STW1=047F S2 Ready to switch on STW1=047F S3 Switched on STW1=047F S4 Operation Hex control-word literals 047E hex = 0000 0100 0111 1110 b10=0, OFF2=1, OFF3=1, Enable_op=0, RFG_en=0, RFG_start=0, Setpoint_en=0 047F hex = 0000 0100 0111 1111 same as above with bit 0 (ON) and bit 3 (Enable_op) set 0C00 hex = bit 10 = Control by PLC. Often ORed permanently to keep PLC in command. 0C7F hex = 047F + 0C00 = bits 0-3,6,10 all set. Held in S4 to keep drive enabled. Failure paths Drop bit 1 (OFF2) → drive coasts regardless of state. Always held by latched PLC word. Drop bit 2 (OFF3) → drive ramps down on quick stop (p1135). Re-arm requires bit 1 then bit 0 re-edge. Drop bit 0 (ON/OFF1) → drive ramps down on normal stop (p1121). Bit 3 may stay high. Rising edge on bit 7 → fault acknowledge. Required after every ZSW1 bit 3 = 1 transition.

The 047E → 047F → 0C7F sequence is the same one used inside the FbDrive FB 166, but you can produce it with a simple word-arithmetic block in CFC. There is nothing magical about the library FB; it is just a state machine plus scaling.

Direct I/O Addressing in HW Config

Once the telegram is selected, HW Config gives each PZD a unique I and Q address. The mapping for Telegram 20 starting at input address 256 is:

PZD word Q address (PLC → drive) Signal IW address (drive → PLC) Signal
PZD1 QW 256 STW1 — control word 1 IW 256 ZSW1 — status word 1
PZD2 QW 258 NSOLL_A — speed setpoint IW 258 NIST_A — actual speed
PZD3 QW 260 M_LIM — torque limit IW 260 IAIST_GLATT — actual current
PZD4 QW 262 Reserved IW 262 MIST_GLATT — actual torque
PZD5 QW 264 Reserved IW 264 PIST_GLATT — actual power
PZD6 QW 266 Reserved IW 266 ZSW2 — status word 2

The PLC programmer reads IW 256 to obtain the drive's status word 1, masks bit 3 to detect a fault, and writes QW 256 with a literal hex value of 0x047F or 0x0C7F to enable the inverter. There is no library call in this code path; the CFC chart is just:

  1. An FB or FC written in SCL (or FBD) that owns the 6-word PZD for one drive. Place two instances of it — one per inverter — into the master CFC chart of the unit.
  2. An "enable" boolean tag (e.g. CMD_ENABLE) and a "fault reset" rising edge tag (e.g. CMD_FAULT_ACK) at the chart boundary.
  3. An SCL FB that:
    1. Holds STW1 = 16#047E while the drive is not requested to run.
    2. Switches to STW1 = 16#0C7F on the rising edge of CMD_START, but only if ZSW1 bit 6 ("switching-on inhibited") is 0 and bit 0 ("ready to switch on") is 1.
    3. Pulses bit 7 of STW1 for one PROFIBUS cycle on the rising edge of CMD_FAULT_ACK, with bit 3 already high so the drive accepts the reset.
    4. Writes NSOLL_A from a scaled REAL tag (RPM ÷ p2000 × 16384), defaulting to zero on stop.
    5. Reads back ZSW1 / NIST_A / IAIST / MIST into process tags that the OS can render.

An SCL template is included below for direct copy-into-the-CFC. The naming is intentionally minimal so that the chart can be re-used for both inverters.

// FB "G120_PZD20" — Telegram 20 raw I/O handler for SINAMICS G120
// Inputs are process tags; In/Out are HW Config I/O addresses
// No library dependency on FbDrive or DriveES

FUNCTION_BLOCK G120_PZD20
VAR_INPUT
    iStart        : BOOL;    // Start command from OS
    iStop         : BOOL;    // Stop command from OS
    iFaultAck     : BOOL;    // Rising edge → fault acknowledge
    iSpeedRpm     : REAL;    // Speed setpoint in engineering units (RPM)
    iTorqueLimPct : REAL;    // Torque limit in % of p2003
END_VAR
VAR_OUTPUT
    oRunning      : BOOL;    // TRUE when ZSW1 bit 2 = 1 (operation enabled)
    oFaulted      : BOOL;    // TRUE when ZSW1 bit 3 = 1
    oActualRpm    : REAL;    // NIST_A scaled back to RPM
    oActualAmps   : REAL;    // IAIST_GLATT scaled back to % of p2002
    oActualTorqNm : REAL;    // MIST_GLATT scaled back to % of p2003
    oActualPower  : REAL;    // PIST_GLATT scaled back to % of r2004
END_VAR
VAR_IN_OUT
    pioSTW1   : WORD;        // QW 256,  QW 272, etc.
    pioNSOLL  : WORD;        // QW 258
    pioMLIM   : WORD;        // QW 260
    pioZSW1   : WORD;        // IW 256
    pioNIST   : WORD;        // IW 258
    pioIAIST  : WORD;        // IW 260
    pioMIST   : WORD;        // IW 262
    pioPIST   : WORD;        // IW 264
    pioZSW2   : WORD;        // IW 266
END_VAR
VAR
    sState     : INT := 0;   // 0=OFF1, 1=RUN, 2=FAULT
    sFaultAck  : BOOL;
    sFaultAckP : BOOL;       // edge memory
    sRunCmd    : BOOL;
END_VAR

BEGIN
    // ---- Decode status ----
    oFaulted   := (pioZSW1 AND 16#0008) <> 0;     // ZSW1.3
    oRunning   := (pioZSW1 AND 16#0004) <> 0;     // ZSW1.2
    oActualRpm := INT_TO_REAL(WORD_TO_INT(pioNIST)) / 16384.0 * 1500.0;   // p2000 default
    oActualAmps := INT_TO_REAL(WORD_TO_INT(pioIAIST)) / 16384.0 * 100.0;  // % of p2002
    oActualTorqNm := INT_TO_REAL(WORD_TO_INT(pioMIST)) / 16384.0 * 100.0; // % of p2003
    oActualPower := INT_TO_REAL(WORD_TO_INT(pioPIST)) / 16384.0 * 100.0;  // % of r2004

    // ---- Edge-detect fault acknowledge ----
    sFaultAck := iFaultAck AND NOT sFaultAckP;
    sFaultAckP := iFaultAck;

    // ---- Encode control word ----
    sRunCmd := iStart AND NOT iStop;

    IF oFaulted THEN
        // Pulse STW1 bit 7 for one scan, with bit 0 = 0
        pioSTW1 := 16#0C7E OR (sFaultAck * 16#0080);
    ELSIF sRunCmd THEN
        // Bits 0,1,2,3,6,10 set  → 0C7F (held in S4)
        pioSTW1 := 16#0C7F;
    ELSE
        // 047E = OFF1 ramp; OFF2/3 still held high
        pioSTW1 := 16#047E;
    END_IF;

    // ---- Scale setpoint and torque limit ----
    pioNSOLL := REAL_TO_WORD( LIMIT(0.0, iSpeedRpm / 1500.0, 1.0) * 16384.0 );
    pioMLIM  := REAL_TO_WORD( LIMIT(0.0, iTorqueLimPct / 100.0, 1.0) * 16384.0 );
END_FUNCTION_BLOCK

This block has no external library dependency; it compiles against the standard PCS 7 S7-SCL compiler shipped with V6.1. The two inverters become two FB instances with different InOut pointer addresses. The PCS 7 OS picture picks up the outputs through standard chart I/O — no DriveES, no FbDrive.

Free Function Blocks FB10 and FB11 Approach

The Siemens example project published under support entry ID 58820849 contains a pair of free FBs (FB10 and FB11) for the S7-300/400 platform with STEP 7 V5.x. FB10 handles a standard Telegram 1 mapping, and FB11 handles Telegram 532 (an extended mapping useful for the G120P). Although the project was written for STEP 7 and not for PCS 7, the FBs are pure SCL sources without any PCS 7-specific APL dependency, so they can be copied into a PCS 7 V6.1 S7 program as a stand-alone unit.

  1. Download the ZIP from the Siemens support entry. Extract FB10 and FB11 (SCL source files).
  2. Open the S7 program in PCS 7. Use Options → SCL Compiler to import and compile the SCL sources. They will appear in the program as new FB blocks numbered 10 and 11 (or any free number that does not collide with the existing master data library).
  3. Create an instance DB for each drive (e.g. DB10 for drive 1, DB20 for drive 2).
  4. Call the FB from a CFC chart with the InOut parameter wired to the same PZD addresses used in the raw I/O example. The FB's Boolean I/O (start, stop, fault, fault acknowledge, ready, running) can be wired straight to the OS faceplate inputs and outputs.

The advantage of the FB approach over raw I/O is that the FB already implements the 047E → 047F → 0C7F state machine and the NIST_A scaling with the correct p2000 reference. The disadvantage is that the FB ships with a fixed telegram (532) and a fixed PROFIdrive class; for Telegram 20 with CU240B-2 DP, the raw I/O method is shorter.

Pitfall. FB10 and FB11 from the example project do not validate that you have actually configured Telegram 532 in HW Config. If you set Telegram 1 in HW Config and still call FB11, the inputs will not map to the addresses you think — the FB will read from PZD3 instead of PZD1, and the drive will never leave state S2. Always verify with a PROFIBus diagnostic tool (S7-PCT, Amprolyzer, or netANALYZER) that the PZD payload coming out of the slave matches the FB's expected layout.

PCS7 V6.1 CFC Integration Steps

  1. Open the unit's master CFC chart (e.g. UNIT_AGT1).
  2. Insert a new chart for "Drive I/O" (e.g. UNIT_AGT1_DRV). This isolates the drive logic from the process logic and makes the OS picture assignment cleaner.
  3. Place the SCL FB G120_PZD20 twice — once for drive 1, once for drive 2. Wire the InOut pioSTW1, pioNSOLL, etc. to the symbolic names of the PZD process I/O. PCS 7 V6.1's CFC compiler will resolve these symbols to the absolute addresses QW 256..266 and IW 256..266.
  4. From the OS picture, route the operator's "Start" and "Stop" buttons to the chart inputs. Route oRunning, oFaulted, and oActualRpm to the faceplate's status icons and numerical display.
  5. For a touch-panel style of interlocking, the chart input iStart should be qualified with the unit-level permissive (e.g. PERMISSIVE_AGT1 AND EMERGENCY_OK). The chart itself should not embed any higher-level interlocks — that belongs in the process chart.
  6. Compile the S7 program and the OS. The standard PCS 7 download sequence (AS → OS) is sufficient. There is no DriveES compilation step and no FbDrive instance DB generation step.

Commissioning and Verification

Bring-up order matters. Use this sequence, with the SINAMICS STARTER tool connected to the CU240's service interface (X127) over Ethernet for diagnostics and parameterization.

  1. Bus up. Confirm PROFIBUS handshake with both drives by reading the diagnostic buffer in HW Config. The slaves should report "DP-Slave OK" and the cyclic I/O should turn green in netPROFIBUS or in the S7 diagnostic view.
  2. Drive OK with no control. Issue a manual QW 256 = 16#047E from the S7 variable table. The drive should remain in state S2 (Ready to switch on) with ZSW1 = 0x0631 (typical: bit 0, 1, 6 = 1; alarm bits 7, 15 may also be present).
  3. Enable with no setpoint. Set QW 256 = 16#0C7F. The drive should transition S2 → S3 → S4. ZSW1 should change to 0x0E37 (bits 0, 1, 2, 4, 6 = 1; bit 3 = 0). The motor will not move because NSOLL_A is 0.
  4. Run. Apply QW 258 = 16#2000 (50 % of 0x4000 = 50 % of p2000 = 750 rpm by default). Monitor IW 258 — NIST_A should ramp up at the rate set by p1120 (default 10 s for 1500 rpm).
  5. Stop. Set QW 256 = 16#047E (drop bit 0). The drive should ramp down at p1121, transition S4 → S3 → S2, and the motor should stop.
  6. Fault inject and reset. Use STARTER to inject a fault (e.g. toggle a digital input wired to the CU's external fault input). ZSW1 bit 3 should go to 1. The drive should drop to S1 (Switch-on inhibit). In the CFC, set iFaultAck := TRUE; the FB should pulse STW1 bit 7 and the fault should clear.
  7. Bus loss. Pull the PROFIBUS connector. The drive should run to OFF1 (if p0852 = 1) or OFF2 (if configured to follow bus-fail). Verify that the OS faceplate shows the bus diagnostic.

Diagnostic Tools and LED Indicators

The CU240B-2 DP and CU240E-2 DP have a four-LED front panel: RDY (ready), BF (bus fault), SAFE (safety), and a drive-specific status LED. The PROFIBus-related states are:

RDY BF Meaning Action
Green, steady Off Cyclic I/O active Normal operation
Green, 0.5 Hz Off No cyclic I/O, drive ready PLC not yet sending data; check OB82 / OB86
Green, 0.5 Hz Red, 0.5 Hz PROFIBUS master not found Check connector, address, baud rate
Green, 2 Hz Red, 2 Hz PROFIBUS configuration mismatch Telegram selected in HW Config differs from drive parameter p0922
Yellow, 0.5 Hz Red, steady Bus fault, drive is in S0 or S1 PLC stopped; check CPU run/stop

For an in-depth look at the device-side parameter view, use the SINAMICS G120 in TIA Portal documentation as a cross-reference for parameter p0922 (IF1 PROFIdrive telegram selection) and p2030 (fieldbus interface protocol). On PCS 7 V6.1 with STEP 7 V5.x, the same parameters are set with STARTER over the X127 service port, not from inside TIA Portal.

Troubleshooting Matrix

Symptom Likely root cause Verification Correction
Drive does not leave S2 even with STW1 = 0x0C7F Bit 10 (Control by PLC) not set, or p0852 ≠ 1 Read ZSW1: bit 9 "Control requested" should be 1 OR bit 10 into STW1 every cycle; in STARTER, set p0852 = 1 (inhibit OFF via fieldbus)
Drive runs, but NIST_A returns 0x0000 always Different telegram selected in HW Config than in p0922 STARTER → Configuration → Telegram; should match HW Config Set p0922 = 20 (or 352) in the drive; reload HW Config
BF LED red, RDY green flashing 2 Hz Configuration frame mismatch Use PROFIBus diagnostic tool to dump slave diag Re-check the PZD count in HW Config; must equal what STARTER shows
Drive trips with F07901 immediately on first start Motor data incomplete (p0344, p0350…p0362) Read fault buffer in STARTER Run motor data identification (p1910) with the motor decoupled
BF stays red after CPU stop No substitute value behavior configured Check p2042 and p2045 Set p2042 = 1 (last value) or 0 (zero setpoint) and re-start the CPU
Actual current scales incorrectly Engineering unit is % of p2002, not amps Check p2002 (reference current) Recompute scaling as IAIST_GLATT / 0x4000 × p2002
Torque limit takes no effect Telegram 1 selected (M_LIM not present) Inspect HW Config PZD3 output Switch to Telegram 20 or 352, where PZD3 is M_LIM
Fault acknowledge has no effect STW1 bit 7 toggled while STW1 bit 3 = 0 Hold bit 3 high in SCL during the ack pulse Issue 0x0C7F + 0x0080 for one PROFIBus cycle, then drop bit 7
Motor ramps, but reverses direction unexpectedly NIST_A sign convention depends on p1300 control mode Check p1300 in STARTER For p1300 = 21 (sensorless vector), forward command = positive NSOLL_A
PLC loses drive, OS faceplate freezes OB86 (rack failure) not loaded Check S7 diagnostic buffer for OB86 call Load OB86 with a default block (SFC51 to log the bus failure) and wire to OS fault indicator

Performance and Cycle Time Considerations

Two G120 slaves at 1.5 Mbit/s on a single PROFIBus segment do not stress the bus. The total cyclic payload for two Telegram 20 drives is 12 PZD words per direction, or 24 bytes of useful data. At 1.5 Mbit/s this is well under 1 ms of bus time, and the S7-400 OB1 cycle of a PCS 7 AS is typically 50–150 ms, so the drive update is invisible.

The relevant timing is the drive-side ramp generator. With p1120 = 10 s (default) and p2000 = 1500 rpm, a full 0 → 1500 rpm setpoint change takes ten seconds. The PROFIBus cycle of 1–4 ms is not the bottleneck; the setpoint refresh rate from the PLC is.

Field note. When the application needs the drive to follow a high-dynamics speed profile (textile, packaging), the p1120 / p1121 ramps should be reduced to the drive's actual mechanical response, not the bus cycle. The bus will always be faster than the ramp.

Comparison With Library-Based Approach

Aspect Direct I/O (this article) FbDrive / DriveES library
Library license required No Yes, DriveES PCS 7 license
Code path length ~1 FB instance per drive FB 166 / FB 267 instance per drive plus DriveES wizard
Standard telegram support Any (1, 2, 3, 4, 5, 6, 20, 352…) Mostly Telegram 1, 4, 6, 102, 103, 105, 106, 116
Traceability of the STW1 / ZSW1 bits Visible in your SCL source Hidden inside the library FB
Online fault diagnosis Standard S7 variable table Library-specific I/O names
PCS 7 APL integration Requires manual faceplate generation Pre-built APL faceplates available
Library hotfix / firmware compatibility Not applicable Dependent on DriveES version

The library approach is justified when the OS faceplate must be a standard PCS 7 APL drive faceplate and the team is large enough that the abstraction pays for itself. For a small retrofit of two agitators or pumps, the direct I/O method produces a smaller, easier-to-debug program.

Summary of Key Numbers

Item Value
Control word literal (run, S4 held) 16#0C7F (also written 0x0C7F)
Control word literal (off, S2 held) 16#047E
Fault acknowledge (one-cycle pulse) STW1 OR= 0x0080 with bit 3 high
Speed scaling (NSOLL_A / NIST_A) 0x4000 = 100 % of p2000 (default 1500 rpm)
Current scaling (IAIST_GLATT) 0x4000 = 100 % of p2002 (drive default)
Torque scaling (MIST_GLATT) 0x4000 = 100 % of p2003 (drive default)
Power scaling (PIST_GLATT) 0x4000 = 100 % of r2004 (derived from motor)
PROFIBus baud rate (recommended) 1.5 Mbit/s, DP-V1
CU240B-2 DP / CU240E-2 DP GSD SI018111.GSD (revision 5+)
Recommended telegram 20 (current, torque, power, ZSW2)

Frequently Asked Questions

Can Telegram 20 and Telegram 352 be read and written without FbDrive or DriveES?

Yes. Telegrams 1, 20, and 352 are PROFIdrive-standard PZD layouts; the HW Config cyclic I/O image exposes them as ordinary input and output words (for example QW 256 / IW 256 for STW1 and ZSW1). A small SCL FB is sufficient to implement the 047E → 047F → 0C7F state machine and the NIST_A scaling.

What is the minimum control word value to start a SINAMICS G120 via PROFIBus?

0x0C7F (hex). Bits 0, 1, 2, 3, 6, and 10 must be set; bit 10 ("Control by PLC") tells the drive that the fieldbus is the active command source. For "ready to switch on" the safe intermediate value is 0x047E (bits 1, 2, 6 set, bit 0 cleared).

How do I acknowledge a drive fault from PCS 7?

Set STW1 bit 7 for one PROFIBus cycle while bit 3 ("Enable operation") is held high. The SCL template in this article pulses 0x0C7F OR 0x0080 on the rising edge of the operator's fault-acknowledge button. ZSW1 bit 3 falling from 1 to 0 confirms the reset.

Why does Telegram 20 show zero actual current even though the motor is loaded?

IAIST_GLATT is normalized to 0x4000 = 100 % of p2002 (reference current). If p2002 was left at the factory default and the actual motor is much smaller, the scaled value will be a large fraction. If p2002 was set too high, the scaled value will be small. Verify p2002 in STARTER and recompute the engineering-unit conversion in the CFC chart.

Can the same SCL FB be used for both a CU240B-2 DP and a CU240E-2 DP?

Yes, as long as both drives are configured with the same telegram (Telegram 20 is the common choice). The CU240E-2 supports more telegrams and offers safety I/O, but the standard Telegram 20 PZD layout is identical between the two Control Units. Only the InOut pointer addresses change per drive.

Do I need the DriveES SIMATIC library for a PCS 7 V6.1 APL drive faceplate?

Only if you want a pre-built APL faceplate with the standard PCS 7 drive icons and operator dialogs. If you are willing to draw a custom faceplate, the direct I/O method gives you the same ZSW1 bits, NIST_A, and MIST_GLATT values and eliminates the DriveES license dependency. The Siemens example project under support entry ID 58820849 provides a free FB10 / FB11 pair that fills the middle ground: pre-built, no DriveES, but tied to Telegram 1 / 532 layouts.

Back to blog