1. CP 443-1 Module Overview and Performance Scope
The SIMATIC NET CP 443-1 is the communications processor for the S7-400 family that connects an S7-400 station to Industrial Ethernet. It offloads TCP/IP, ISO-on-TCP, UDP, and PROFINET I/O stack processing from the CPU and exposes a set of configurable connection resources (S7 connections, S7-H connections, SEND/RECV connections, FETCH/WRITE, and open IE communication) that are parameterized in the SDBs loaded into the CP at startup.
When field engineers ask how to "parametrize the performance of the Ethernet module" — meaning packet size, send frequency, jitter, and cycle time — the answer is split between two distinct areas:
- CP firmware-controlled parameters — packet size, internal buffer thresholds, keep-alive timing, and the number of simultaneously usable connection resources. These are fixed in firmware and not adjustable from STEP 7.
- Application-controlled parameters — when the PLC is the client (active communication partner), the calling rate, the block (FC/FB) used, the protocol (TCP vs ISO-on-TCP), and the data length per call are entirely under the user-program's control.
Understanding this split is the foundation of every CP 443-1 performance tuning exercise. The remainder of this document maps the available levers in each area, the diagnostic procedure to quantify current behavior, and a verification workflow for the tuned configuration.
2. Block Container Architecture in the CP 443-1
The "Blocks" container visible in the CP 443-1's STEP 7 hardware project (under the CP node in the project tree) is reserved for the CP's own system data blocks and downloaded firmware-related blocks. It is not a place to drop application logic.
Specifically, this container holds:
- The SDBs (System Data Blocks) generated by STEP 7 from the HW Config (connection configuration, IP parameters, port settings, keep-alive, PROFINET device assignments).
- The CP firmware itself, downloaded as a single binary via SIMATIC Manager → Options → Edit Ethernet Node → Firmware Update, or via the Web-Based Management (WBM) page on the CP.
No user FC, FB, OB, or DB belongs in this container. Per the official SIMATIC NET S7-CPs documentation for Industrial Ethernet, the CP's local blocks are strictly used to store the SDBs that the CP interprets at run time. Inserting application blocks here will produce a download error or, at worst, be silently discarded by the CP's loader. The complete CP manual and block version table are available in the SIMATIC NET S7-CPs for Industrial Ethernet CP 443-1 manual (PDF).
3. Application-Side Communication Function Blocks
When the S7-400 is the active partner (client) that initiates SEND/RECV operations, performance is set by the user program through the call frequency, the data length per call, and the block family selected. The CP 443-1 supports the following user-callable interface blocks (libraries shipped with SIMATIC NET):
| Block Pair | Library | Max User Data per Call | Transport Protocol | Connection Type |
|---|---|---|---|---|
| AG_SEND / AG_RECV (FC 50 / FC 60) | SIMATIC_NET_CP | 240 bytes | ISO-on-TCP (RFC 1006) | SEND/RECV |
| AG_LSEND / AG_LRECV (FC 50 / FC 60, length-extended) | SIMATIC_NET_CP | 8192 bytes | ISO-on-TCP (RFC 1006) | SEND/RECV |
| AG_SSEND / AG_SRECV | SIMATIC_NET_CP | 240 bytes (with sync) | ISO-on-TCP | SEND/RECV synchronous |
| B_SEND / B_RECV (FB 12 / FB 13) | SIMATIC_NET_CP | 240 bytes per segment, max 64 KB segmented | ISO-on-TCP or TCP | SEND/RECV, configurable |
| U_SEND / U_RECV (FC 65 / FC 66) | SIMATIC_NET_CP | 2048 bytes | UDP (connectionless) | Datagram |
| PUT / GET (FB 14 / FB 15) | Standard S7-400 system | 160 bytes (PUT) / 160 bytes (GET) per call | S7 function (ISO-on-TCP underneath) | S7 connection |
| FETCH / WRITE (S7 services) | Configured in NetPro | Variable, up to 64 KB per request | S7 function | S7 connection |
Control knobs available at the application layer:
- Call rate — Place the SEND/RECV FC/FB calls inside a cyclic OB (OB 1, OB 30–OB 38) at a known interval. Calling them from OB 1 every scan gives you scan-rate throughput; calling from a 100 ms OB30 gives deterministic 10 Hz.
- Data length per call — Larger payloads (AG_LSEND up to 8 KB, B_SEND segmented up to 64 KB) amortize the per-packet Ethernet header and TCP/ISO-on-TCP overhead. The CP's internal buffer can hold multiple outstanding SEND jobs; the firmware default is sufficient for typical control workloads.
- DONE/NERROR evaluation — Each block returns a status word. Polling this at known intervals instead of blocking on it lets you implement a clean rate-limited loop.
- Connection multiplexing — Multiple SEND/RECV jobs over the same ISO-on-TCP connection are serialized by the CP. If jitter is a concern, open parallel connections and split the I/O image across them.
4. Protocol Selection: TCP vs ISO-on-TCP vs UDP
The protocol choice is the single largest controllable variable affecting throughput and latency on the CP 443-1.
| Characteristic | TCP (native RFC 793) | ISO-on-TCP (RFC 1006) | UDP (RFC 768) |
|---|---|---|---|
| Connection model | Stream, byte-oriented | Stream, message-oriented (TPDU length preserved) | Datagram, connectionless |
| Data framing inside the block | Not preserved — CP/FC may buffer multiple user calls into one TCP segment, or split one call across segments | Preserved — each AG_SEND call arrives at the partner as a discrete message | Preserved per datagram |
| Typical use on CP 443-1 | Third-party PC sockets, open IE communication | Native SEND/RECV with Siemens partners, HMI panels, SCADA | Broadcast/multicast, time-critical publish, low-overhead telemetry |
| Overhead per packet | ~40 bytes (TCP + IP + Ethernet) | ~44 bytes (RFC 1006 header + TCP + IP + Ethernet) | ~28 bytes (UDP + IP + Ethernet) |
| Jitter | Higher — Nagle algorithm may coalesce small writes | Lower — message boundaries are explicit | Lowest — no handshake, no retransmit |
| Recommended for deterministic cyclic traffic | No | Yes | Conditional (no retransmit, no delivery guarantee) |
For context, when comparing Industrial Ethernet control protocols on throughput, a useful formula is the bandwidth demand per connection:
BW_per_connection = (header_bytes + payload_bytes) × pps
where pps is packets per second. For a cyclic RMC-style 50 ms RPI on EtherNet/IP, this gives 1 / 0.050 = 20 pps, and a typical 80-byte EtherNet/IP packet yields ~1.6 kB/s per connection (per the Delta Motion EtherNet/IP I/O performance reference). The same arithmetic applies to CP 443-1 ISO-on-TCP traffic once the header is computed.
5. Firmware-Controlled Parameters (Not Adjustable from STEP 7)
The following CP 443-1 behaviors are fixed in firmware and cannot be changed by the user program, SDB edits, or HW Config:
- Maximum Ethernet frame size — Standard 1518 bytes (1522 with VLAN tag). The CP does not support jumbo frames.
- Internal CP buffer depth — Firmware-defined queue length per connection; the user cannot tune it.
- TCP keep-alive interval — SDB-configurable on the connection's properties dialog (default 30 s), but the underlying keep-alive mechanism is implemented in firmware.
- Nagle algorithm behavior — Internally controlled. On native TCP connections, the CP may apply Nagle-style coalescing; on ISO-on-TCP it generally does not, because the TPDU length is preserved and the user calls AG_SEND per message.
- PROFINET I/O cycle time floor — Determined by the configured send clock (1 ms is typical minimum) and the firmware's internal handling.
Attempting to use non-Siemens third-party utilities to "patch" these values is not supported and will violate the device's operational certification.
6. Diagnostic Procedure: Wireshark Packet Capture
When tuning is required, the first step is always to measure the current traffic rather than guess. Wireshark is the standard tool.
- Mirror the CP 443-1 port. Configure the managed switch the CP is attached to with a SPAN / mirror session that copies the CP's port to a laptop NIC. On a SCALANCE XC/XB/XR, this is under "Information > Port Mirroring" (a SPAN source of the CP port, destination the laptop port).
-
Set the capture filter to isolate the CP's traffic. Example:
host 192.168.0.10 and tcp port 102for ISO-on-TCP/port 102 S7 traffic, orhost 192.168.0.10 and tcpfor the full TCP stream from the CP. - Capture for at least one full shift or one full process cycle to get representative statistics.
- Use Statistics > Conversations to identify the top talkers, average and burst packet sizes, and inter-packet timing.
- Use Statistics > I/O Graph to plot packets per second over time. The graph will show whether traffic is bursty (concentrated in OB 1 scan bursts) or smooth (called from a time-driven OB).
-
Filter for retransmissions:
tcp.analysis.retransmission. A non-zero rate indicates network congestion, duplex mismatch, or a faulty cable. Retransmits collapse effective throughput.
Targeted captures should answer three questions: What is the peak pps? What is the peak payload per second? How much of the link capacity is used at peak?
link_utilization_% = (peak_pps × avg_frame_size_bytes × 8) / link_bitrate_bps × 100
For a 100 Mbit/s link, sustained utilization above 60% with growing jitter is a strong signal that the application is calling SEND/RECV faster than the CP can drain the buffer, and a slower OB or a larger payload per call is required.
7. CP 443-1 Built-in Diagnostics
The CP 443-1 exposes several diagnostic surfaces; none of them tune the CP, but all of them reveal whether the tuning is taking effect.
| Diagnostic Surface | How to Access | What It Shows |
|---|---|---|
| CP diagnostic buffer | STEP 7 → CP 443-1 → Diagnostics → Diagnostic Buffer | Connection up/down events, error codes, restart reasons |
| NCM S7 diagnostics | SIMATIC Manager → Options → Set PG/PC Interface → Diagnostics | Connection status, online CP firmware version, MAC/IP |
| Web-Based Management (WBM) | Browser → http://<CP-IP> | Port statistics, connection list, firmware version, security settings (on supported FW) |
| SNMP | Any MIB browser; private MIB from Siemens | Interface counters, octet in/out, discards |
| HW Config → CP → Diagnostics | Online view in STEP 7 HW Config | Operating mode, connection status, error state |
The diagnostic buffer in particular uses Siemens-standard event IDs. A few common ones:
- Event 0x0101 — CP startup completed.
- Event 0x0A01 / 0x0A02 — Connection established / connection terminated. The accompanying diagnostic word identifies the connection number from NetPro.
- Event 0x0B01 — SEND/RECV error reported back to the user program; the diagnostic word will be the same value returned at the AG_SEND/AG_RECV NERROR output.
- Event 0x0E01 / 0x0E02 — Watchdog or firmware fault.
If the diagnostic buffer shows repeated 0x0B01 errors with status W#16#80A1 ("connection not established") or W#16#8085 ("timeout") immediately after a tuning change, the application is calling SEND/RECV faster than the partner can accept, and the OB period must be lengthened.
8. Network Segmentation with Dual NIC Architecture
For SCADA systems where the same PC both reads PLC data and serves other unrelated network traffic (plant MES, e-mail, internet, file shares), the cleanest performance fix is physical network isolation using a second NIC.
- Add a second PCI/PCIe Ethernet NIC to the SCADA PC, e.g. Intel I210-T1 or Intel I350-T2 for a server-grade option.
- Assign the new NIC a dedicated subnet, e.g.
192.168.10.0/24, and connect it point-to-point to the CP 443-1. - Bind the SCADA software's Siemens driver (e.g. S7Comm, libnodave, OPC-DA server) to only the new NIC's IP. On Windows this is the binding order in Network Connections > Advanced > Advanced Settings; on Linux it is achieved by the application explicitly opening the socket on that interface.
- Keep the original NIC on the corporate/plant LAN for MES, file shares, etc. These two networks should never share a switch unless a deterministic firewall/bridge is inserted.
This isolation eliminates cross-traffic contention, broadcast storms from the corporate side reaching the CP, and ARP-table churn caused by the SCADA PC's other network activity. For control networks with deterministic cycle requirements, this is the single most effective change available.
9. Verification and Commissioning Checklist
After tuning, walk this checklist before sign-off:
- Confirm in the CP 443-1 diagnostic buffer that the relevant connection(s) reached the "established" state (event 0x0A01) and that no error events followed.
- Capture a Wireshark trace for 10 minutes under normal load. Confirm:
- Inter-packet timing matches the OB period (or expected jitter envelope).
- No TCP retransmissions.
- No out-of-order segments.
- Force a CP restart (power cycle the S7-400 rack) and confirm the CP reconnects all configured connections within 60 s. This validates that the SDBs are valid and the firmware block is compatible with the CPU firmware.
- Verify the latest block versions are in use. Siemens ships periodic updates to AG_SEND, AG_LSEND, B_SEND, etc. The current version matrix is published in the SIMATIC NET CP 443-1 manual; mixing old blocks on a new CP firmware is a common source of NERROR = W#16#80C3 ("block version not supported").
- Run a sustained soak test for 24–72 hours and review SNMP interface counters for input/output discards. Any non-zero discard counter means the CP's firmware buffer is being overrun and the OB period is still too short.
10. Troubleshooting Matrix
| Symptom | Likely Root Cause | Corrective Action |
|---|---|---|
| AG_SEND returns NERROR = W#16#80A1 immediately on first call | Connection not yet established; SDB mismatch | Verify NetPro connection is downloaded to both stations; check for duplicate connection IDs |
| AG_SEND returns W#16#8085 under load | Partner cannot accept data as fast as the PLC sends it | Lengthen OB period, or use AG_LSEND with larger payload, or open a second parallel connection |
| Wireshark shows many small TCP segments back-to-back | Nagle-related coalescing; multiple small AG_SEND calls | Switch to ISO-on-TCP and consolidate data into fewer larger sends per OB |
| Intermittent Wireshark retransmits, ping works fine | Duplex mismatch or bad cable | Force both ends to full duplex (or both auto), replace patch cable |
| CP diagnostic buffer shows 0x0E01/0x0E02 firmware fault | CP firmware corruption or hardware fault | Reflash firmware via WBM; if recurring, replace the CP |
| Connection drops after exactly 30 s of idle | Keep-alive / idle timeout mismatch between stations | Align keep-alive and idle timeout in the connection's SDB properties on both ends |
| Performance good with one HMI, degrades with two | Shared S7 connection contention | Configure separate S7 connections per HMI in NetPro; do not multiplex through a single connection |
| SCADA on same PC as corporate apps sees variable latency | NIC and protocol stack contention | Install second NIC, bind SCADA driver to it, isolate the CP network as in Section 8 |
11. Putting It Together — A Practical Tuning Recipe
For a typical S7-400 → SCADA link over the CP 443-1, the highest-yield tuning sequence is:
- Confirm both stations run the latest CP firmware block versions per the SIMATIC NET CP 443-1 documentation.
- Use ISO-on-TCP (port 102) unless the SCADA driver requires native TCP.
- Call AG_LSEND / AG_LRECV from OB 35 (100 ms) or OB 32 (500 ms) — time-driven, not scan-driven.
- Consolidate all per-cycle I/O into one or two large sends (close to the 8 KB AG_LSEND maximum) rather than many small ones.
- Physically separate the SCADA PC's PLC network from the corporate network with a second NIC.
- Validate with Wireshark and the CP's own diagnostic buffer; iterate on OB period and payload size until the measured pps matches the design intent and the link utilization stays below 50% on a 100 Mbit/s segment.
With those steps, the S7-400's CP 443-1 will deliver deterministic, low-jitter Ethernet communication bounded by the application code's call rate and the firmware's internal buffer behavior — exactly the levers available to the control engineer.
Can the CP 443-1 packet size be changed in firmware or in the Blocks container?
No. The maximum Ethernet frame size (1518 / 1522 bytes) and the CP's internal buffer behavior are fixed in the CP 443-1 firmware. The Blocks container shown under the CP in STEP 7 stores only the CP's SDBs and firmware; user application code must live in the S7-400 CPU's block container.
Which function block should I use for high-volume cyclic data to a SCADA server?
Use AG_LSEND / AG_LRECV (up to 8192 bytes per call) over an ISO-on-TCP connection (port 102). For multi-segment payloads up to 64 KB, use B_SEND / B_RECV. Reserve PUT / GET for short S7 function reads/writes; they top out at 160 bytes per call and are inefficient for streaming data.
Why does Siemens recommend ISO-on-TCP over native TCP on the CP 443-1?
ISO-on-TCP (RFC 1006) preserves the message boundary defined by the AG_SEND call, so each user-program send arrives at the partner as a discrete message. Native TCP is a byte stream and the CP may coalesce multiple small sends or split one send across segments, increasing jitter and complicating partner-side parsing.
How do I measure actual throughput from the CP 443-1?
Mirror the CP's switch port to a laptop and run Wireshark with a capture filter such as host <CP-IP> and tcp port 102. Use Statistics > I/O Graph to plot packets per second, Statistics > Conversations for the largest flows, and filter tcp.analysis.retransmission to detect link-level errors. Cross-check with the CP's WBM page counters.
Can I install a second network card in the SCADA PC to isolate the PLC network?
Yes. This is the recommended pattern for deterministic control networks. Add a dedicated NIC, assign it a private subnet point-to-point with the CP 443-1, and bind the SCADA's Siemens driver to that NIC's IP. This eliminates contention with corporate traffic and is the single most effective change when SCADA latency is variable.
What does NERROR = W#16#80C3 mean on AG_SEND?
It means "block version not supported" — the AG_SEND/AG_RECV FC version in the CPU does not match the CP 443-1 firmware's expected interface. Update the SIMATIC NET library to the version listed in the CP 443-1 manual and re-download the blocks to the CPU.