1. Problem Overview
When an SIMATIC S7-300 CPU 315-2 PN/DP is paired with WinCC 7.2 over TCP/IP and the application uses the BSEND function block (FB12 / SFB12) to push raw data into the HMI/SCADA archive, the most common symptom is the block returning STATUS = 1 on the very first call and never advancing. The WinCC side reports a TCP connection UP (standard tags poll fine), but the raw data tag tied to the BSEND partner never receives data, and the BSEND job never transitions out of the BUSY state.
This is a classic S7-communication misconfiguration on CPU 315-2 PN/DP. Three independent faults typically stack on top of each other:
- The S7 connection in NetPro is configured as a one-way connection instead of a two-way connection.
- The BSEND instance FB12 was copied from the wrong library (S7-400 family rather than the S7-300 family), so the internal time/ID handling diverges from the PLC firmware expectation.
- The connection endpoint in NetPro points to the wrong resource (rack/slot) — typically defaulting to rack 0, slot 0 instead of the PN port at rack 0, slot 2.
Each fault alone produces STATUS = 1. Together they guarantee a non-functional link.
2. Affected Hardware, Firmware, and Software
| Component | Version(s) in scope | Notes |
|---|---|---|
| CPU | SIMATIC S7-300 CPU 315-2 PN/DP (6ES7315-2EH14-0AB0 and earlier) | PN port is the PROFINET interface, not the DP/MPI port |
| Firmware | V3.x (typical for 315-2 PN/DP) | Firmware < V3.0 cannot use BSEND/BRCV for S7 communication in all cases |
| STEP 7 | STEP 7 V5.5 + SP2 / HF7 or later | NetPro must be edited from STEP 7, not from WinCC |
| WinCC | WinCC 7.2 (incl. ASIA, Update Rollup variants) | WinCC 7.2 ships the S7DOS / S7CHN channel; AR_SEND path requires CPU 400 |
| Library | SIMATIC_NET_CP / Standard Library → Communication Blocks | FB12 BSEND family MUST be the S7-300 variant (no SFB prefix mismatch) |
| PC interface | TCP/IP via CP 1613 / CP 1623 / standard NIC with ISO-on-TCP | WinCC station uses S7DOS channel driver; protocol = ISO-on-TCP (TCP port 102) |
3. BSEND Status / Error Code Reference
STATUS (RET_VAL) of FB12 / SFB12 BSEND returns one of the following values. The values below are extracted from the STEP 7 online help and the Siemens S7-300/400 BSEND/BRCV application example (entry ID 37873547).
| STATUS | Meaning | Likely root cause on CPU 315-2 PN/DP + WinCC |
|---|---|---|
| 0000h | Job completed without error | — |
| 0001h | Communication job not yet processed (connection not established or wrong direction) | One-way connection in NetPro, wrong rack/slot, wrong library family |
| 0002h | Negative acknowledgement from partner (BRCV side) — wrong R_ID | R_ID mismatch between PLC FB12 and WinCC raw data tag |
| 0003h | Receive confirmation pending (job still active) | Normal transient — BUSY = TRUE; do not re-trigger |
| 0004h | Negative acknowledgement — temporary resource error | BSEND called too fast; insert OB1 cycle check or DONE/NDR polling |
| 0005h | Negative acknowledgement — partner not yet ready | WinCC raw data tag not configured or runtime not started |
| 0006h | Negative acknowledgement — partner rejected (R_ID duplicate) | Same R_ID reused for another connection |
| 0007h | Negative acknowledgement — data length error | LEN on FB12 > 32 KB or LEN odd on some firmware |
| 0008h | Negative acknowledgement — partner CPU in STOP / no resource | Check WinCC channel diagnostic; verify S7DOS state machine |
| 7000h | First call — BSEND idle, no job active | Trigger edge missing on REQ |
| 7001h | First call — job running, BUSY = TRUE | Normal during transmission |
| 7002h | Job running; partner cannot accept yet | WinCC not polling; CPU and HMI out of sync |
| 8090h | Block ID invalid / wrong family | FB12 copied from S7-400 library into an S7-300 project |
| 80A0h | Negative acknowledgement — receive confirmation error | BRCV side never executed; check raw data tag processing |
| 80B0h | Object ID error / resource busy | Connection ID not unique in NetPro |
| 80C0h | Temporary resource error | Reduce call frequency; check OB1 priority |
| 80F1h | Wrong LEN or ADDR_1 pointer | ANY pointer alignment error |
| 80F2h | Internal error — connection fault | Delete and re-create the NetPro connection |
4. Root Cause Analysis
4.1 One-way vs Two-way Connection
BSEND/BRCV require an S7 two-way connection (bidirectional). If NetPro is configured with the partner as "Unspecified" or with "One-way" selected, the CPU opens an outgoing transport but the WinCC channel cannot bind to a partner ID, so STATUS = 1 persists. The same applies if the connection is typed as a PUT/GET only passive connection on the HMI side.
4.2 Rack and Slot for the PN Port
On the CPU 315-2 PN/DP, the PROFINET port is logically addressed as Rack 0, Slot 2. The MPI/DP port occupies Slot 3 in some firmware variants. If the S7 connection target is left at the default rack 0, slot 0, the connection is opened against an empty resource (which corresponds to resource ID 02 — accessible for read-only standard tag polling without a configured partner, hence the misleading "connection UP" indicator on WinCC).
4.3 FB12 Library Family
The block instance carries an internal family identifier in the FB header. If the FB12 was dragged from the S7-400 standard library and dropped into an S7-300 program, the family bits do not match the CPU 315 firmware's expected type signature, and the call is rejected. Open the FB properties in STEP 7 — the Family attribute must read S7300 (or specifically S7-300/400 for cross-platform variants, never S7400 only).
4.4 R_ID Mismatch
BSEND/BRCV use a 16-bit R_ID (DWORD LSB) as the job discriminator. The WinCC raw data tag must reference the exact same R_ID as the PLC FB12 instance. R_ID is hexadecimal on the PLC side and integer on the WinCC side — converting R_ID = DW#16#12345678 on the PLC means 305419896 (0x12345678) on the WinCC tag dialog.
5. Prerequisites for a Working BSEND Channel
- STEP 7 V5.5 SP2 or later installed with the S7-300 Communication Blocks library.
- WinCC 7.2 with the S7DOS / S7CHN channel package.
- PLC and PC on the same IP subnet; PN port IP reachable via
pingfrom the WinCC station. - PG/PC interface set to TCP/IP (Auto) on the engineering station.
- The PLC project is open in STEP 7 (NetPro cannot be edited from WinCC Explorer for S7-300 connections — only TIA Portal or STEP 7 classic allows NetPro editing).
- A second PC or PLC is not required for testing — WinCC can act as the BSEND partner on the same hardware.
6. Step-by-Step Resolution
6.1 Rebuild the NetPro Connection
- Open the STEP 7 project. Right-click the S7-300 station → Open with NetPro.
- Locate the existing S7 connection to the WinCC station. Right-click → Delete.
- Insert a new connection: select the CPU 315-2 PN/DP → Insert New Connection → partner = WinCC station (Unspecified).
- Set Type = S7 Connection.
- In the connection properties dialog, set the partner endpoint to Rack 0, Slot 2 (PN port). Verify the CPU-local endpoint is also Rack 0, Slot 2.
- Set the connection direction to Bidirectional (Two-way). This is the default for new connections — if it reads "One-way", the partner was misidentified; cancel and re-select the partner as the WinCC station.
- Note the Connection ID (local) and Connection Resource — these will populate the WinCC channel configuration.
- Download the NetPro configuration to the PLC (online → Download to Target Station). Stop CPU only if required by the firmware build.
6.2 Insert the Correct FB12 into the S7 Program
- In the STEP 7 project, right-click Blocks → Insert → Standard Library → Communication Blocks for S7-300.
- Drag FB12 BSEND into the project blocks container.
- Open FB12 properties — confirm Family = S7300 and Author = SIEMENS. If the family reads S7400, replace the block.
- Call FB12 from OB1 (or the cyclic archive OB). Standard call signature for raw data transfer to WinCC:\li>
CALL "BSEND", DB100
REQ := M 100.0
R := M 100.1
ID := W#16#0001 // local connection ID from NetPro
R_ID := DW#16#00000001 // must match WinCC raw tag R_ID
DONE := M 110.0
ERROR := M 110.1
STATUS := MW 112
SD_1 := P#DB200.DBX0.0 BYTE 200
LEN := MW 120 // length in bytes, <= 32 KB and even
- Compile and download to the PLC.
6.3 Configure the WinCC Raw Data Tag
The WinCC side uses a Raw Data Tag on the S7DOS / S7CHN channel. Per the Siemens documentation for raw data tags for BSEND/BRCV functions of S7 communication (RT Professional) and the WinCC 7.2 information system, the procedure is:
- Open WinCC Explorer → Tag Management.
- Select the S7DOS channel unit (or S7CHN for legacy installations). Add a new connection if one does not exist, pointing to the WinCC station defined in NetPro with the IP address of the CPU 315-2 PN/DP.
- Right-click the connection → New Tag.
- Set Type = Raw Data Tag.
- Set the R_ID to match the PLC value. If the PLC uses
DW#16#00000001, set WinCC R_ID = 1 (decimal). If the PLC usesDW#16#12345678, set WinCC R_ID = 305419896. - Configure the buffer length to match the PLC LEN field, in bytes.
- Activate WinCC Runtime.
6.4 Verify with Status/Force Table
With the corrected connection in place, FB12 should transition to STATUS = 7001 (busy), then DONE = TRUE / STATUS = 0000 within one to three OB1 cycles, depending on PLC scan and WinCC poll interval.
7. Connection Endpoint Reference (CPU 315-2 PN/DP)
| Port | Rack | Slot | Interface type | Typical use |
|---|---|---|---|---|
| X1 (PROFINET) | 0 | 2 | TCP/IP / ISO-on-TCP | BSEND/BRCV, PUT/GET, S7 connection to WinCC |
| X2 (MPI/DP) | 0 | 3 | MPI / PROFIBUS-DP | PG communication, HMI over MPI |
| Internal virtual resource | 0 | 0 | PG-mode read-only | Diagnostic / online view only — not usable for BSEND |
8. Verification Procedure
- Open STEP 7 → Monitor/Modify. Force REQ TRUE, then FALSE.
- Observe STATUS = 0000, DONE = TRUE on the next cycle.
- In WinCC Explorer → Tag Management → right-click the raw data tag → Properties shows the last successful transfer timestamp.
- In the WinCC channel diagnostics (right-click connection → Status), confirm the connection state is Established rather than Establishing or Error.
- Toggle a known bit in the source DB and confirm the change is visible in WinCC via the raw data tag raw view.
9. Alternative: AR_SEND for Process-Driven Archiving
If the ultimate goal is process-driven archiving (automatic WinCC archive entries triggered by PLC events), the proper Siemens path is SFB37 (AR_SEND). However, SFB37 AR_SEND requires the AR_SEND mode in WinCC and is only supported with CPU 400 / S7-400. On CPU 315 the BSEND/BRCV workaround described in this article is the documented substitute. Reference: Siemens entry ID 23629327 — How do you use SFB37 (AR_SEND) for process-driven archiving.
For TIA Portal projects on newer S7-1500 hardware, use the native ArchiveData functions in the WinCC Unified / RT Professional configuration. The raw data tag documentation for S7 communication covers the TIA-side variant.
10. Troubleshooting Matrix
| Symptom | Likely cause | Action |
|---|---|---|
| STATUS = 1 immediately, BUSY = 0 | Wrong rack/slot in NetPro or one-way connection | Set partner to Rack 0 Slot 2, switch to two-way |
| STATUS = 8090 | FB12 from wrong library family | Replace with S7-300 BSEND FB |
| STATUS = 2 / 3 / 6, WinCC raw tag stays empty | R_ID mismatch | Verify R_ID on both sides (hex/decimal) |
| STATUS = 0 but WinCC raw tag stays empty | LEN mismatch or ANY pointer alignment | Match LEN with raw tag buffer size; use byte-aligned DB area |
| WinCC channel status = Error | CPU in STOP, or wrong partner IP | Bring CPU to RUN, ping PN port |
| Connection UP but BSEND never triggered | REQ not a rising edge | Use edge-detect flag or one-shot |
| STATUS = 80F1 / 80F2 | LEN > 32 KB or odd length | Limit LEN to 32768 bytes, round down to even |
| BSEND works once, then STATUS = 1 again | REQ held TRUE; sending on top of an active job | Wait for DONE/NDR before re-triggering |
11. Field-Engineering Notes
- On older CPU 315 firmware (V2.x), BSEND is supported only via the CP 343-1 external PROFINET/Industrial Ethernet CP, not via the integrated PN port. If STATUS = 1 persists after fixing rack/slot, check whether the project is targeting the integrated PN or an external CP; the connection endpoint must match the physical interface.
- WinCC 7.2 Update Rollups later than UR5 changed the default S7CHN handshake behavior. After upgrading WinCC, re-test the connection to ensure the partner endpoint resource ID is still matched. Recreating the WinCC connection (delete + re-add) forces a fresh resource negotiation.
- If multiple WinCC clients must receive the same payload, BSEND supports only one BRCV partner per R_ID. Use separate R_IDs and separate raw data tags, or move to AR_SEND on a CPU 400 station.
- For very large archives, segment the DB into 30 KB chunks. Each chunk is a separate BSEND call with a unique R_ID. Avoid >32 KB per call — STATUS = 80F1 fires immediately on overflow.
- Do not use BSEND to send raw data to a third-party HMI panel. BSEND is S7-protocol-specific; the partner must implement the S7 BSEND/BRCV handshake, which WinCC and TIA Portal HMI panels do natively.
- If the PLC is behind a managed switch, disable flow control negotiation on the PN port — some switches throttle TCP port 102 and delay the BSEND handshake beyond the firmware watchdog, causing STATUS = 1.
What does BSEND STATUS = 1 mean on a CPU 315-2 PN/DP talking to WinCC?
STATUS = 1 from FB12 BSEND means the connection is not yet established from the partner side. On a CPU 315-2 PN/DP this is almost always caused by the NetPro connection pointing to the wrong rack/slot (typically rack 0 slot 0 instead of the PN port at rack 0 slot 2), by the connection being configured as one-way instead of two-way, or by FB12 being copied from the S7-400 library. Fix the connection, not the payload.
How do I configure a raw data tag in WinCC 7.2 for BSEND/BRCV?
Open WinCC Explorer → Tag Management, select the S7DOS (or S7CHN) channel unit, right-click the connection, and add a new tag of type Raw Data Tag. Set the R_ID to match the PLC value exactly — if the PLC uses DW#16#00000001, set R_ID = 1 decimal in WinCC. The buffer length must match the LEN parameter on FB12 in bytes.
Which rack and slot should the S7 connection to the PN port of a CPU 315-2 PN/DP use?
Use rack 0, slot 2 for the PROFINET (PN) port of the CPU 315-2 PN/DP. The MPI/DP port uses slot 3 on some firmware variants, but for BSEND/BRCV and S7 communication to WinCC over TCP/IP, target the PN port at slot 2.
Why does BSEND work on CPU 400 but not on CPU 315?
BSEND itself works on both. The difference is that CPU 400 supports SFB37 AR_SEND, which is the proper Siemens path for process-driven WinCC archiving. On CPU 315, AR_SEND is not available, so engineers substitute BSEND/BRCV with a Raw Data Tag in WinCC. The troubleshooting is the same — connection must be two-way and point to the PN port.
Can I use BSEND to send data to a TIA Portal HMI instead of WinCC 7.2?
Yes. BSEND is an S7-protocol primitive and works with any HMI that exposes a BSEND/BRCV partner, including TIA Portal WinCC RT and RT Professional. For RT Professional the configuration is documented under raw data tags for S7 communication — see the Siemens TIA documentation for the R_ID and connection settings.