Problem Details
A SIMATIC S7-400 station built around a CPU 416-3 DP with a CP 443-1 Industrial Ethernet communications processor exchanges a motor speed setpoint with a second S7-400 acting as a slave. The slave uses the received speed to position a steam control valve. The user issues the setpoint from an HMI connected to the master.
Observed symptom:
- The setpoint written from the HMI appears at the slave's input area with a 15–30 second latency.
- The behavior is intermittent: a recent Ethernet patch-cable replacement (cable between the slave's CP 443-1 and the plant hub) appeared to fix the issue for 2–3 days, after which the delay returned with the same magnitude.
- STEP 7 / NetPro configuration shows no errors. The connection is established; the diagnostic buffer of the CP shows the connection as
ESTABLISHED. - The slave's control valve reacts to the late-arriving value, producing an oscillation in steam flow and unstable process pressure downstream.
Latency in the 15–30 s band is far above the normal cycle time of an S7-400 PUT/GET or USEND/URCV exchange (typically 50–500 ms over a healthy Ethernet segment). It almost always points to one of the following mechanisms: a transport-level retry, a TCP keep-alive gap, an application-level polling, or a programmed conditional gating of the SEND/RECV call.
Root Cause Analysis
Before changing any hardware, classify the failure by reading the status outputs of the active communication block. Per the Siemens SIMATIC Communication manual (CPU-CPU Communication with SIMATIC Controllers, document 78028908), every S7-400-to-S7-400 exchange over an ISO-on-TCP or TCP connection uses one of four block families:
| Block family | Direction | Acknowledged | Typical use |
|---|---|---|---|
USEND / URCV
|
Uni-directional, datagram | No | Fast, repeated broadcast-style data (e.g. speed setpoint) |
BSEND / BRCV
|
Bi-directional, length-variable | Yes | Larger or variable-length data with handshake |
PUT |
Uni-directional, client → partner | Yes | Master writes to slave DB / Merker / Process I/O |
GET |
Uni-directional, client ← partner | Yes | Master reads from slave DB / Merker / Process I/O |
For a motor speed setpoint that the master pushes to the slave, the typical implementation is one of:
- Master:
PUTblock, triggered cyclically in OB1 or OB35. - Master:
USEND+ Slave:URCVpair, triggered cyclically.
All four families expose the same output pattern: DONE, ERROR, STATUS, plus the ACT (USEND) or REQ (PUT/GET) input. A latency of 15–30 s is rarely a network fault at the physical layer; it is almost always one of the following five root causes.
Cause 1 — Trigger gate disables SEND/RECV for long stretches
If the master code gates the USEND or PUT call behind a condition (e.g. A "HMI_speed_changed" in ladder, or a IF bSpeedChg THEN in SCL), the block does not actually call the CP. The 30 s gap then represents the period between manual setpoint changes, not a fault. Verify by reading the ACT/REQ input in VAT or by tracing the call in the cross-reference.
Cause 2 — TCP keep-alive gap on the CP 443-1
Per the CP 443-1 manual (SIMATIC NET S7-CPs for Industrial Ethernet CP 443-1, document 27013386), the CP supports ISO-on-TCP (RFC 1006) and TCP. When a TCP connection sits idle, the operating layer sends keep-alive probes. The default keep-alive timer on older CP 443-1 firmware (EX10, EX11, EX20) is 30 s for the first probe, with up to 9 retries at 75 s intervals — exactly matching the observed 15–30 s gap. If USEND/URCV is being used, every gap longer than 2 s can trigger a probe burst, during which data is queued.
Cause 3 — Hub / switch port mis-configuration or half-duplex mismatch
The user replaced the patch cable and saw a 2–3 day improvement. That signature is classic for a degrading SFP/port or a port that is auto-negotiating to 10 Mbit/s half-duplex. The CP 443-1 attempts to send, gets late collisions, retries, and the ISO-on-TCP timer expires — at which point the S7-400 communication layer drops the connection and re-establishes it, producing the visible 15–30 s gap.
Cause 4 — Memory overlap at the partner DB
When the slave's receive area overlaps with a region that is being written by another OB (commonly OB1 background, OB35, OB82, OB121), the value is overwritten by the OB that runs after the receive completes. The application then appears to "lose" the new value for several cycles until the next URCV arrives. Cross-reference both DBs and any BLD / BLKMOV in OB1 to confirm the receive area is exclusive.
Cause 5 — HMI polling locks the HMI connection
WinCC / ProTool / TIA Panel HMI on the master can hold the only ISO-on-TCP connection resource on the CP 443-1. The CP 443-1 (EX20) has a hard-coded limit of 64 connection resources total, of which 1 is reserved for the PG/OP and 1 for the S7 routing. If the HMI uses 4–8 tags each on its own connection (a common misconfiguration with WinCC flexible), the master has no free resource for the PUT/GET. The CP then queues the request and only services it when an HMI tag changes, producing a 15–30 s apparent delay.
Solution
Resolve the issue in the following order. Each step can be confirmed before moving to the next.
Step 1 — Confirm the connection is healthy at the CP
- Open SIMATIC Manager > Online > Accessible Nodes and ping the slave CP from the master PG.
- Open the master CP in NetPro, right-click the connection to the slave, select Connection diagnostics. The state must read
ESTABLISHED. Record the "Bytes sent / received" counters — non-zero and incrementing values confirm the link is alive. - Open the slave's diagnostic buffer (CPU > Module Information > Diagnostic Buffer). Look for event IDs
0x4543(connection interrupted) and0x4544(connection re-established). A pair appearing every 15–30 s confirms keep-alive drops.
Step 2 — Convert the exchange from USEND/URCV to PUT/GET (or vice versa)
If the current implementation uses USEND/URCV:
- Replace with
PUT(FB 15) on the master and remove theURCVon the slave. ThePUTblock is acknowledged at the application layer; if the slave is unreachable, the master'sSTATUSoutput returns immediately with error0x0001–0x000F, allowing a clean retry every cycle. - Re-trigger
PUTon every OB1 pass with aREQ := TRUEpulse driven by a 100 ms clock merker. Do not gate it on "speed changed".
If the implementation is already PUT/GET, switch to BSEND/BRCV with a small LEN := 4 for the speed value (DINT). The BSEND family uses an ISO-on-TCP handshake that is more robust to short network interruptions than PUT.
Step 3 — Tune the CP 443-1 keep-alive and watchdog
- Open the CP 443-1 in HW Config, double-click the CP, select the Options tab.
- Set Keep-alive time to 10 s.
- Set Number of keep-alive retries to 3.
- Set Connection monitoring time to 30 s.
These values are persisted in the CP's configuration; a download + power-cycle of the CP is required to activate.
Step 4 — Free connection resources on the master CP
- In NetPro, count the connections owned by the master CP 443-1. If more than 30 active connections exist, consolidate HMI tags onto a single named connection using the S7 Communication driver (not the default Softnet driver).
- Verify in the CP's Connection statistics online view that Free resources > 4 at all times.
Step 5 — Replace the hub with a managed switch
A shared 10/100 hub is the prime suspect given the cable-replacement history. Replace with a managed switch (e.g. Siemens SCALANCE XC-208 6GK5208-0BA00-2AC2) and force both ports to 100 Mbit/s full-duplex with auto-negotiation disabled. Confirm in the switch port statistics that 0 CRC errors, 0 late collisions, and 0 runts are observed over a 30 min window.
Step 6 — Cross-reference the slave receive DB
- Right-click the slave receive DB in STEP 7, choose Cross-references.
- Filter for Writes. Every entry outside the
URCVcall site is a candidate to overwrite the received speed. - Move the receive area to a DB that is read-only outside the application OB, or use a temporary
ANYpointer at the start of OB1, then copy to the application DB after OB1 completes.
Step 7 — Add application-level monitoring
Add a watchdog merker in the slave that is toggled by the master every cycle. If the merker is not toggled for 5 s, the slave raises a process alarm. The alarm log entry will show the exact second the data stopped arriving, allowing direct correlation with the switch port statistics and the diagnostic buffer.
Verification
After applying the changes, run the following checks.
- Cycle-time check. Force a step change on the HMI setpoint, then read the slave's receive DB with VAT. The new value must appear within 2 OB1 cycles (typical OB1 = 100 ms → 200 ms).
-
Diagnostic buffer. No new
0x4543/0x4544entries during a 1-hour observation window with continuous setpoint changes. - Switch port statistics. 0 CRC errors, 0 input/output discards, line utilization < 5 %.
-
CP connection list. In the master's CP online diagnostics, the connection to the slave shows
Bytes sentandBytes receivedincrementing at the expected cyclic rate (e.g. every 100 ms × 4 bytes = 40 B/s). - Process behavior. Steam control valve tracks the setpoint with a steady-state error < 1 % and no oscillation. Plant DCS log shows no "speed late" alarms during a 24-hour shift.
Connection Configuration Reference
The reference configuration for an S7-400 to S7-400 ISO-on-TCP connection is summarized below.
| Parameter | Master (CPU 416-3 DP + CP 443-1) | Slave (CPU 416-3 DP + CP 443-1) |
|---|---|---|
| Connection type | S7 connection (ISO-on-TCP) | S7 connection (passive / server) |
| Local ID | 1 | 1 (auto-assigned) |
| Partner IP | — | 192.168.0.20 (master) |
| Local IP | 192.168.0.20 | 192.168.0.21 |
| TSAP (local) | 10.00 | 10.00 |
| TSAP (partner) | 10.00 | 10.00 |
| Active / passive | Active connection establishment | Passive (per CP 443-1 manual) |
| Block on master | PUT (FB 15) with REQ pulsed every 100 ms | — |
| Block on slave | — | URCV (FB 9) or POKE area |
| Send area (master) | DB100.DBD0 (DINT speed, RPM) | — |
| Recv area (slave) | — | DB200.DBD0 (DINT speed, RPM) |
| Keep-alive time | 10 s | 10 s |
| Connection monitoring | 30 s | 30 s |
The CP 443-1 always operates as the server for incoming connections when the partner uses fetch/write, as stated in the CP 443-1 manual. In an S7-to-S7 PUT/GET scenario, only one side (the master) is configured as the active partner; the slave's connection is auto-generated by NetPro and is implicitly passive.
PUT/GET Block Parameter Reference
| Pin | Direction | Type | Meaning |
|---|---|---|---|
REQ |
INPUT | BOOL | Level-triggered; rising edge starts the operation. Do not pulse faster than the block run-time. |
ID |
INPUT | WORD | Connection ID from NetPro (typically 1 for the first S7 connection). |
ADDR_1 |
INPUT | ANY | Pointer to partner area to write to (PUT) or read from (GET). |
SD_1 |
INPUT | ANY | Local source area (PUT) or destination (GET). |
LEN |
INPUT | INT | Length in bytes. For a DINT speed = 4 bytes. |
DONE |
OUTPUT | BOOL | Set for one cycle on success. |
ERROR |
OUTPUT | BOOL | Set for one cycle on failure. |
STATUS |
OUTPUT | WORD | 0x0000 = OK. 0x0001 = partner not reachable. 0x0007 = resource issue on CP. 0x0010 = ANY pointer error. 0x0081 = partner rejected (timed out). |
BUSY |
OUTPUT | BOOL | 1 while the operation is in progress. |
Two failure signatures are diagnostic:
- STATUS = 0x0081, ERROR = TRUE, BUSY = FALSE: the partner CPU rejected the request. Typically an ANY pointer error or a TSAP mismatch.
- STATUS = 0x0007, ERROR = TRUE: the CP has run out of connection resources. Consolidate connections on the master (Step 4 above).
USEND/URCV Block Parameter Reference
| Pin | Direction | Type | Meaning |
|---|---|---|---|
ACT |
INPUT | BOOL | Level-triggered; the block sends the configured number of bytes while ACT is high. If the cycle polls ACT only every 30 s, the speed value also arrives only every 30 s. |
ID |
INPUT | WORD | Connection ID. |
LEN |
INPUT | INT | Length to send. |
DONE |
OUTPUT | BOOL | Set for one cycle after successful send. |
ERROR |
OUTPUT | BOOL | Set for one cycle on error. |
STATUS |
OUTPUT | WORD | 0x0000 = OK. 0x0001 = communication error. 0x0009 = partner not yet ready. |
ACT is a level, not an edge. If the master only sets ACT := TRUE when a setpoint change is detected, the slave will not receive periodic refreshes. The valve then operates on a stale value for the full duration between changes. Always drive ACT with a periodic clock merker when the data is time-critical.Diagnostic Buffer Event IDs
| Event ID | Meaning | Action |
|---|---|---|
0x4543 |
Connection interrupted | Check physical link, switch port, partner CPU state. |
0x4544 |
Connection re-established | Normal recovery; if it pairs with 0x4543 every 15–30 s, suspect keep-alive or duplex mismatch. |
0x4905 |
CP module fault | Replace CP or update firmware. |
0x38C4 |
STOP due to communication failure | Inspect active job in the diagnostic buffer; usually a TSAP collision. |
0x8304 |
I/O access error on receive | Pointer or DB length error in URCV / BRCV. |
Firmware and Catalog Reference
| Component | Order number (MLFB) | Firmware ≥ | Notes |
|---|---|---|---|
| CPU 416-3 DP | 6ES7416-3XS07-0AB0 | V7.0 | Supports up to 64 S7 connections. |
| CP 443-1 (EX20) | 6GK7443-1EX20-0XE0 | V3.2 | Industrial Ethernet, ISO-on-TCP + TCP, max 64 connections. |
| CP 443-1 (EX11) | 6GK7443-1EX11-0XE0 | V2.6 | Legacy, supports 32 connections only. |
| CP 443-1 Advanced (EX41) | 6GK7443-1EX41-0XE0 | V3.0 | Recommended for new installations; 128 connections, integrated security. |
| SCALANCE XC-208 | 6GK5208-0BA00-2AC2 | — | Managed switch, 8 × RJ45 100 Mbit/s, recommended replacement for hubs. |
Cycle-Time and Latency Math
Expected end-to-end latency for a single PUT call over a healthy 100 Mbit/s ISO-on-TCP link:
- OB1 cycle: 100 ms (master)
- Block run-time: 2–8 ms (PUT)
- TCP send on CP 443-1: 1–3 ms
- Network one-way: < 1 ms (100 m Cat 5e)
- Slave OB1 receive: 100 ms
- Total: ≈ 200–215 ms
Anything above 1 s indicates an application-level or transport-level issue. 15–30 s points to a periodic retry / re-establishment mechanism, not a steady-state performance problem.
Field-Proven Diagnostic Procedure
- Open VAT on the master and add
DB100.DBD0(send area),FB15.DB15.REQ,FB15.DB15.BUSY,FB15.DB15.DONE,FB15.DB15.ERROR,FB15.DB15.STATUS. - Force a step change on the HMI setpoint from 0 → 1500 RPM.
- Time how long
DONEtakes to flash TRUE after the change. If it is < 500 ms, the master side is healthy. The issue is on the slave side (overwrite, conditional URCV, OB1 ordering). - If
BUSYstays high for 15–30 s beforeDONE, the CP is re-establishing the connection — go to the diagnostic buffer on both CPUs and correlate timestamps with the switch port statistics. - On the slave, add
DB200.DBD0to VAT. If the value appears correctly within 1 s ofDONEon the master, the receive path is healthy and the issue is the valve control logic (e.g. integrator windup, valve hysteresis).
Common Pitfalls
- Two HMI connections and a single PUT. WinCC can open a connection per tag if the project was migrated from a ProTool configuration. Each connection consumes a CP 443-1 resource.
-
ISO-on-TCP TSAP collision. If the slave also acts as a server for a second master, both masters must use a different TSAP. The default TSAP
10.00on both ends is fine if there is only one master. - CP firmware < V2.4 on EX11. Older firmware does not honor keep-alive time changes; upgrade to ≥ V2.6.
- Auto-MDIX disabled on the switch port. The CP 443-1 does not support Auto-MDIX on all firmware versions; use a straight-through cable on uplink ports.
- Loop through a managed switch with STP enabled. When the switch re-elects the root bridge (typically every 30 s if the bridge priority is unstable), the ISO-on-TCP connection drops. Disable STP on the S7-400 port or enable Fast Spanning Tree on the switch.
Why does the slave's speed value arrive 15–30 seconds late when the S7 connection is shown as ESTABLISHED in NetPro?
The ESTABLISHED state in NetPro reflects the transport layer only. The application-level PUT or USEND can still be gated by a 30 s clock merker, a slow HMI tag refresh, or a CP resource shortage. Read the BUSY/ERROR/STATUS outputs of the active block — STATUS 0x0007 indicates resource exhaustion on the CP 443-1, which is the most common cause of a periodic 15–30 s gap when the connection is otherwise healthy.
What is the difference between PUT/GET and USEND/URCV for an S7-400 to S7-400 speed setpoint?
PUT/GET is acknowledged at the application layer; the master receives a DONE/ERROR confirmation per call. USEND/URCV is unacknowledged — the master has no way to know the slave received the data, and the slave must be polled cyclically to refresh. For a single DINT speed value updated at 100 ms, USEND/URCV is the lighter protocol, but the ACT input must be driven continuously, not on change-of-value.
How many S7 connections can a CP 443-1 EX20 handle?
The CP 443-1 (6GK7443-1EX20-0XE0) supports a maximum of 64 S7 connections in firmware V3.2 and later, of which 1 is reserved for the PG/OP and 1 for routing. In practice, 30–40 active connections should be the operational ceiling to leave headroom for retries and diagnostics. Exceeding this produces STATUS 0x0007 on PUT/GET and the characteristic 15–30 s delay.
What is the default TCP keep-alive time on CP 443-1 and how do I change it?
The default is 30 s for the first probe with up to 9 retries at 75 s intervals. Open HW Config > CP 443-1 properties > Options tab and set Keep-alive time to 10 s, retries to 3, and connection monitoring to 30 s. Download the HW Config and power-cycle the CP for the change to take effect.
How can I tell if the 30 s delay is a network problem versus a program problem?
Read the slave CPU's diagnostic buffer and look for paired events 0x4543 (connection interrupted) and 0x4544 (connection re-established) at exactly 15–30 s intervals — that confirms a transport-level drop. If no such events appear, the issue is application-level: trigger gating, OB ordering, DB overwrite, or HMI connection lockout. The CP 443-1 manual describes the keep-alive parameters and connection monitoring fields that control this behavior.