1. Problem Summary
An S7-300 CPU 315-2DP (order number 6ES7 315-2AF02-0AB0, firmware V1.1) is wired by PROFIBUS DP to a SINAMICS CU305DP control unit on firmware V04.40.45, using GSD file revision V4.4.3. Telegram 111 (PZD-2/2) is configured identically on the S7-300 and on the drive, the peripheral addresses match slot for slot, and HW Config in SIMATIC Manager opens the CU305DP online with no station or diagnostic fault. Despite that, neither the control word (STW1) sent from the PLC nor the status word (ZSW1) returned from the drive changes — both remain at zero. The PLC finally writes W#16#47E then W#16#47F to STW1 with no status back from the drive.
Recovery requires two distinct fixes applied in sequence, not one:
- Program fix: the LADDR input on SFC14/SFC15 is the PROFIBUS diagnostic address (W#16#3FE, decimal 1022) instead of the cyclic PZD base address of telegram 111 (W#16#A0, decimal 160). The SFCs never touch the telegram area, so the drive receives no cyclic output and returns nothing.
- Hardware fix: a separate physical fault is found in the PROFIBUS segment (cable, connector, termination, or a damaged DP port). With the segment repaired, the same program starts working with no parameter change.
This article documents the layered diagnosis that surfaces both causes, the control word bit discipline that would have been a third trap, and the verification sequence that confirms the segment is healthy.
2. Hardware Identification and Compatibility
Before chasing bit-level symptoms, capture the exact order numbers and firmware states. Old CPU + new drive combinations are the most common cause of "nothing works at all" complaints, and most of them turn out to be a version mismatch you can rule out in five minutes.
| Item | Order number / file | Firmware / version | Role |
|---|---|---|---|
| CPU | 6ES7 315-2AF02-0AB0 | Firmware V1.1 | S7-300 DP master, two PROFIBUS interfaces (MPI/DP on X1, DP on X2) |
| Control unit | SINAMICS CU305DP | Firmware 04.40.45 | PROFIBUS slave for SINAMICS S110 (single-axis servo) with EPOS basic positioner |
| GSD file | SIEM811F.GSD (or named equivalent for V4.4.3) | Revision V4.4.3 | DP slave description, defines telegram 111 PZD layout |
| STEP 7 | SIMATIC Manager (classic) | Match CPU FW V1.1 | Configuration tool |
Reference the S7-300 CPU 31xC and CPU 31x manual for the AF02 variant's two-port behavior on the Siemens support portal and the SINAMICS S110 Control Units manual for the CU305DP slot map on the SINAMICS S110 documentation.
3. Telegram 111 PZD Layout for CU305DP
Telegram 111 on SINAMICS S110 is the standard 2-PZD/2-PZD telegram for the EPOS (basic positioner) function. Both directions are 2 words, so the cyclic I/O image is 4 bytes each way.
| Word | Direction | Signal | Width | Purpose |
|---|---|---|---|---|
| PZD1 | PLC → Drive | STW1 (Control Word 1) | 16 bits | Drive state machine control, fault acknowledge, enable |
| PZD2 | POS_STW (Positioning Control Word) | 16 bits | EPOS operating mode, MDI bits, jog, traversing block selection | |
| PZD1 | ZSW1 (Status Word 1) | 16 bits | Drive state machine status, fault bit, control requested | |
| PZD2 | POS_ZSW (Positioning Status Word) | 16 bits | EPOS status, MDI acknowledgement, setpoint reached, axis position |
Total cyclic payload is 4 words input + 4 words output. The PLC must reserve a contiguous peripheral area of at least 4 bytes for SFC14 and 4 bytes for SFC15. STEP 7 assigns the base addresses in HW Config under the CU305DP slot properties; note both the input start and the output start — they are usually equal for symmetric telegrams like 111 but can differ if the master/slave modules are not aligned.
4. Diagnostic Address vs. PZD I/O Base Address (LADDR)
The single most common mistake in this scenario is feeding SFC14/SFC15 the wrong LADDR. The PROFIBUS slave has two address areas in HW Config:
| Area | Typical value | Used by | What it does |
|---|---|---|---|
| Diagnostic address | 1022 dec (0x3FE) | SFC13 DPNRM_DG, CPU diagnostic buffer, slave diagnostics | Carries the slave's diagnostic frames; not the cyclic PZD |
| PZD I/O base address | 160 dec (0xA0) | SFC14 DPRD_DAT, SFC15 DPWR_DAT | Start of the cyclic process data window for telegram 111 |
Symptom of using the wrong LADDR: SIMATIC Manager HW Config opens the slave online with no error, the SFC returns RETVAL = 0 (no access error), and the RECORD buffer never changes. Because the diagnostic area is readable, SFC13-based diagnostics still work — masking the mistake.
Fix the program so that:
- SFC15 LADDR = W#16#A0 (output side of telegram 111, PLC → drive).
- SFC14 LADDR = W#16#A0 (input side of telegram 111, drive → PLC). For symmetric telegrams the base is the same number; for asymmetric telegrams check the input start address separately.
- RECORD points to a DB or Merker area of at least 4 bytes (one double word) for PZD-2/2.
5. SFC14 / SFC15 Consistent Data Access
PROFIBUS DP transports PZD as a consistent block. If the PLC reads or writes the I/O area with plain L PEW / T PAW instructions, the four bytes can be torn across two PLC scan cycles and you see half-old / half-new data. For drives, that manifests as STW1 bits flickering and ZSW1 latching nonsense. Use SFC14/SFC15 to read and write the entire 4-byte PZD window atomically.
5.1 Write (PLC → Drive) with SFC15 DPWR_DAT
// STW1 in DB100.DB0 (WORD)
// POS_STW in DB100.DB2 (WORD)
CALL "DPWR_DAT"
LADDR := W#16#A0 // PZD output base address
RECORD := P#DB100.DBX0 BYTE 4 // 4-byte record
RETVAL := MW200 // 0 = OK, see error table below
END_CALL
5.2 Read (Drive → PLC) with SFC14 DPRD_DAT
// ZSW1 in DB101.DB0 (WORD)
// POS_ZSW in DB101.DB2 (WORD)
CALL "DPRD_DAT"
LADDR := W#16#A0 // PZD input base address
RETVAL := MW202 // 0 = OK
RECORD := P#DB101.DBX0 BYTE 4
END_CALL
5.3 RETVAL error codes (most common)
| RETVAL (hex) | Meaning | Action |
|---|---|---|
| 0000 | No error | None |
| 80A0 | Negative acknowledgement from DP slave, or wrong LADDR | Verify LADDR against HW Config PZD base address, not the diagnostic address |
| 80A1 | DP slave not yet ready / not configured | Check SF/BF LEDs, drive state |
| 80A2 | DP slave resource error | Check telegram length matches GSD, RECORD length |
| 80B0 | DP slave not in DPM1 addressing range | Check bus address, segment, termination |
| 80B1 | Length specification error | RECORD length does not match configured PZD length |
| 80B2 | DP slave is being configured | Retry after a delay |
| 80C0 | DP slave not in S7 data transfer list | Re-run HW Config download on the master |
| 80C2 | DP slave: short circuit / no power | Investigate physical layer |
If RETVAL = 0 but the buffer still reads zero, the program is writing to the wrong LADDR. Cross-check by going online with the drive and reading parameter r2050[0..1] (PZD receive from master) — if the values are zero, the master is the problem; if the values are correct, the drive is the problem.
6. Control Word 1 - The Bit 10 Rule
Even with the correct LADDR, telegram 111 will not respond to commands if STW1 bit 10 is not set. Bit 10 is the control requested bit (also called "master control by PLC" or "BicoCtrl"): until the drive sees it, the drive ignores all other command bits and never advances the state machine. ZSW1 then sits at zero and looks like the drive is dead.
| STW1 bit | Signal | Value to start |
|---|---|---|
| 0 | ON / OFF1 | 1 |
| 1 | OFF2 (coast stop) | 1 (inactive) |
| 2 | OFF3 (quick stop) | 1 (inactive) |
| 3 | Enable pulse | 1 |
| 4 | Ramp-function generator enable | 1 |
| 5 | Ramp-function generator start | 1 |
| 6 | Setpoint enable | 1 |
| 7 | Acknowledge fault | 0 → 1 transition (rising edge) |
| 8 | Reserved / jog 1 | 0 |
| 9 | Reserved / jog 2 | 0 |
| 10 | Master control by PLC (BICO bit 0) | 1 (mandatory) |
| 11 | Direction reversal (setpoint inversion) | 0 |
| 12 | Reserved | 0 |
| 13 | Motorized potentiometer raise | 0 |
| 14 | Motorized potentiometer lower | 0 |
| 15 | Command data set changeover | 0 |
The two control word values from the failing program — W#16#47E and W#16#47F — decode as follows:
0x47E = 0000 0100 0111 1110
bit10=1, ON=1, OFF2=1, OFF3=1, EnablePulse=0 (transitioning)
0x47F = 0000 0100 0111 1111
bit10=1, ON=1, OFF2=1, OFF3=1, EnablePulse=1 (running)
Both values set bit 10 correctly, so the "missing bit 10" hypothesis is not the cause of the symptom in this case — but it is the most common reason for the same symptom on a fresh installation. Always confirm bit 10 in your outgoing STW1 before chasing the LADDR or the cable.
7. Byte Order Between the PLC and the Drive
Siemens S7 stores words in big-endian at the byte level: in DB100.DB0 (a 16-bit word), bits 15..8 are at DBX1 and bits 7..0 are at DBX0. SINAMICS drive-side parameters (r2050, p2051, r2060) also use big-endian, so for symmetric PZD-2/2 there is normally no byte swap needed — but if the project copies PZD into a byte array and rearranges it for some legacy reason, you will see the high and low bytes flipped in the drive.
How to check:
- Read the drive's r2050[0] (PZD1 from master). If the value matches the outgoing STW1 exactly, byte order is correct.
- Read r2050[1] for PZD2 (POS_STW).
- If r2050 reports 0x7E47 instead of 0x47E, the buffer passed to SFC15 is byte-swapped. Reverse the byte order in the DB before calling SFC15.
8. Online Diagnostics and the Slave Diagnostic Frame
When PZD is silent, the next step is the slave diagnostic frame. It distinguishes "the slave never received the PZD" from "the slave received PZD but did not process it".
8.1 Reading the diagnostic frame with SFC13 DPNRM_DG
CALL "DPNRM_DG"
LADDR := W#16#3FE // diagnostic address of the CU305DP
RETVAL := MW204
RECORD := P#DB110.DBX0 BYTE 32 // at least 6 bytes, 32 is safe
END_CALL
The first 6 bytes are the standard DP diagnostic header; bytes 6+ are device-specific and, for SINAMICS, follow the PROFIdrive profile diagnostic layout. Look for:
- Byte 5 bit 7 = 1 → "PZD fault", drive rejected the telegram.
- Byte 5 bit 6 = 1 → "PZD update", drive sees incoming data.
- Status byte 0x1C or higher → drive is in fault state and the state machine cannot move.
8.2 HMI Web server of the CU305DP
The CU305DP ships with a web server on default IP 169.254.11.22 (subnet 255.255.0.0) that exposes the live r2050 / r2053 values without any STEP 7 traffic. If the live r2050 is non-zero but the PLC reads zero, the issue is the receive side. If the live r2050 is zero, the issue is the send side. This is the fastest single instrument for fault isolation.
8.3 STARTER / SINAMICS commissioning tool
STARTER (or the newer Startdrive) online view of the CU305DP shows the expert list. The minimum parameters to verify:
| Parameter | Meaning | Expected |
|---|---|---|
| p0922 | IF1 PROFIdrive telegram selection | 111 |
| p2038 | STW/ZSW interface mode | 0 (SINAMICS) or 1 (SIMODRIVE 611 universal) — match p0922 semantics |
| p2042 | Telegram monitoring time | 0 = off, or 100..2000 ms (default 100 ms) |
| p2051[0..1] | PZD output from drive to master (ZSW1, POS_ZSW) | 50001 (ZSW1) for index 0, 50109 (POS_ZSW) for index 1 |
| r2050[0..1] | Live PZD received from master | Non-zero when PLC is sending |
9. Hardware Fault Isolation
The original case ended with "We find a hardware problem." That is the correct final chapter of this story. The most common physical-layer faults in this combination, in order of frequency:
- Termination missing or duplicated. A 220 Ω + 390 Ω termination is required at the start and end of the segment only. CPUs count as a node. The CU305DP must have its bus terminator ON (DIP switch on the CU305, or wired terminator on the SUB-D connector) only if it is at the end of the segment. DP repeaters (RS-485) re-isolate and re-terminate each segment.
- Cable damage. Pinch points at cabinet entries, abrasion at drag chains, and crushed cable trays are the usual suspects. A 9-pin PROFIBUS cable must keep the two data lines (pin 3 = B, pin 8 = A) twisted at a lay of roughly 1 inch (25 mm) and shielded. Reading A-B with a multimeter should show ≈ 220 Ω with terminators in and ≈ 50..70 Ω between A and B without.
- Connector wiring reversed. Pin 3 (B) on one end of the cable landing on pin 8 (A) on the other end is a classic field mistake. The bus scans as alive, but every frame is a one-bit error.
- Damaged DP port. The CPU 315-2DP X1 and X2 interfaces each have their own physical transceiver. If a transient ESD or a wiring fault killed one port, swapping to the other interface (and updating HW Config to point at that port) is the fastest check.
- Power supply sag on the drive. If the CU305DP sees 24 V below 20 V, it stays alive enough to scan on PROFIBUS but cannot actuate outputs. The BF LED will be off while the actual drive enable is rejected.
| Check | Measurement | Pass criterion |
|---|---|---|
| Bus voltage at each node, A-B | 0 V idle, ±1 V transitions | ≥ 4.5 V differential on transitions |
| DC bus resistance, end to end | With terminators in | ≈ 220 Ω across (A-B) of each terminator |
| Shield continuity | End-to-end, no breaks | Continuity < 1 Ω end to end |
| Connector pinout | Pin 3 = B, pin 8 = A on every node | Same on every node |
| CPU SF / BF LED | BF on = bus fault, SF on = CPU fault | Both off after HW Config download |
10. Step-by-Step Recovery Procedure
-
Verify the slave is reachable. Open HW Config online and read the CU305DP slot properties. Confirm the configured PZD output base address. Write it down; call it
LADDR_OUT. Do the same for the input base address; call itLADDR_IN. The diagnostic address is separate. - Patch the LADDR in the program. In every CALL "DPWR_DAT" block, set LADDR = LADDR_OUT. In every CALL "DPRD_DAT" block, set LADDR = LADDR_IN. Leave the SFC13 LADDR at the diagnostic address.
- Confirm RECORD length. For telegram 111 (PZD-2/2), RECORD must be BYTE 4. Mismatches yield RETVAL = 80B1 and a CPU diagnostic entry.
- Set STW1 with bit 10. In the application, build STW1 as 0x47E → 0x47F on the rising edge of the start command, then hold 0x47F for steady run. Bit 10 = 0x400 must always be set once control is requested.
- Download the project to the CPU and go online. Watch DB100.DBD0 in the live monitor. The first SFC15 call should now write a non-zero value to the drive's r2050[0].
- Read back the drive with STARTER or the web server. r2050[0] should equal STW1, r2050[1] should equal POS_STW. ZSW1 (r0930 internal mapping) should show bit 0 ("Ready to switch on") toggle as STW1 changes.
- Read the PLC side with SFC14. DB101.DBD0 should now change every PROFIBUS cycle. ZSW1 bit 10 ("control requested acknowledged") is the bit that proves the drive sees the master.
- Physically inspect the segment. Check terminators, connectors, cable damage, shield bonding, and 24 V at the CU305DP. This step is what surfaced the final hardware fault in the original case.
- Power-cycle the drive. After any hardware repair, repower the CU305DP and the line module so that the bus comes up in a known state.
11. Verification Checklist
| Item | How to verify | Pass criterion |
|---|---|---|
| Slave online | HW Config → online view | CU305DP slot list all green, no diagnostic icon |
| PZD sent | Drive r2050[0] in STARTER | Equals the value in the SFC15 RECORD |
| PZD received | DB101.DBD0 in STEP 7 online | Changes every bus cycle, ZSW1 bit 10 = 1 after control is requested |
| Control word bit 10 | DB100.DBW0 mask 0x4000 | Always 1 once "control by PLC" is granted |
| SFC RETVALs | MW200, MW202, MW204 | All 0x0000 |
| CPU LEDs | SF, BF on CPU front | Both off, RUN on |
| Drive state machine | STARTER control panel or r0899 | Ready → Switched on → Operation enabled as STW1 is sequenced |
| Diagnostic buffer | CPU diagnostic buffer | No DP station failure entries |
When all eight items pass, telegram 111 is alive. A typical first time from a cold bus to operation enabled with this configuration is 80..150 ms (one PROFIBUS cycle plus the drive's internal ramp-up).
12. Common Variations on the Same Symptom
Three further cases that produce the same "STW1 = 0, ZSW1 = 0" picture and worth ruling out before going to the cable tray:
- Wrong telegram selected in p0922. If p0922 does not match the HW Config telegram, the drive maps the PZD differently. Forcing p0922 = 111 and re-powering the drive is the fast check.
- Drive in commissioning mode (p0010 ≠ 0). The drive will not act on cyclic PZD while commissioning is open. Reset p0010 = 0 and copy RAM to ROM.
- BICO interconnections overridden. Manual BICO changes to p0840, p0844, p0845, or p2103 (the standard control signal sources) route the enable logic away from STW1. Restore with p0010 = 30, p0970 = 1 factory reset, or re-load a saved project.
What is the correct LADDR for telegram 111 SFC14 / SFC15 on a CU305DP?
Use the PZD I/O base address assigned by STEP 7 HW Config for the telegram slots, not the diagnostic address. For a CU305DP with telegram 111 in the typical default slot map, the base is W#16#A0 (decimal 160, hex 0xA0). The diagnostic address, often 1022 (0x3FE), is only for SFC13 DPNRM_DG. Confirm the value under CU305DP → Properties → Telegram in HW Config.
Why is bit 10 mandatory in STW1 for SINAMICS drives?
Bit 10 is the "master control by PLC" (BICO bit 0) signal. Until the drive sees bit 10 = 1, the state machine refuses to leave "Switching on inhibited" and all other control bits are ignored. The drive will also not return any meaningful ZSW1. Always set bit 10 (0x400) in STW1 the moment you want PLC-driven control.
Why does SFC15 return RETVAL = 0 but the drive still sees zero PZD?
RETVAL = 0 only confirms the master wrote to some peripheral area it considers valid. If LADDR is the diagnostic address instead of the PZD base address, the call is technically successful but writes nowhere the drive looks. Check the address you are using, then verify the drive's r2050[0] in STARTER to confirm reception.
How do I distinguish a software fault from a hardware fault when PZD is zero?
Open the CU305DP web server (default 169.254.11.22) or STARTER online view. If r2050[0] shows the value you are sending, the physical layer and PROFIBUS are healthy — the bug is in the application (LADDR, byte order, or STW1 bit 10). If r2050[0] is zero, the master is not transmitting — move from the LADDR check to the cable, terminator, and DP port.
Can the old CPU 315-2DP firmware V1.1 talk to a CU305DP on firmware V4.4.45?
Yes. PROFIBUS DP is fully back-compatible across S7-300 and SINAMICS generations, and a DPV0 master (which the V1.1 CPU 315-2DP provides) is sufficient for telegram 111 cyclic PZD. The version gap is not the root cause of the symptom; in this case both the LADDR and the physical layer were.