CP 343-1 Communication: Programming S7-300 Data Exchange Blocks

David Krause13 min read
Industrial NetworkingSiemensTechnical Reference
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

Overview of the CP 343-1 Family

The CP 343-1 is a Siemens communications processor for the SIMATIC S7-300 PLC family that connects the CPU to Industrial Ethernet and PROFINET networks. The variant referenced in field service, 6GK7-343-1EX11-0XE0, was superseded by later revisions with extended functionality, identical mechanical footprint, and backward-compatible firmware. Every CP 343-1 occupies one slot in the S7-300 rack and operates as an intelligent communication node — frame handling and connection management run on the module itself, leaving the CPU free for the application program.

Common CP 343-1 ordering variants (Industrial Ethernet / PROFINET)
Order Number (MLFB) Function Protocols
6GK7 343-1EX11-0XE0 CP 343-1 (original) TCP, UDP, ISO, S7
6GK7 343-1CX00-0XE0 CP 343-1 Lean TCP, UDP, ISO, S7, PROFINET IO Controller
6GK7 343-1EX21-0XE0 CP 343-1 TCP, UDP, ISO, S7, PG/OP, HTTP server
6GK7 343-1EX30-0XE0 CP 343-1 TCP, UDP, ISO, S7, PG/OP, HTTP server, FTP
6GK7 343-1GX00-0XE0 CP 343-1 IT Adds IT functions (FTP, HTTP, email)
6GK7 343-1HX00-0XE0 CP 343-1 PN PROFINET IO Controller, IRT
6GK7 343-1K* CP 343-1 Advanced Security, IPv6, all features

Communication Services and Connection Types

The CP 343-1 supports multiple OSI Layer 4–7 services. Selecting the right service dictates which block the user program must call. The catalog below matches each transport to its SIMATIC_NET_CP block; the S7 protocol (ISO-on-TCP, port 102) is the default for controller-to-controller exchange, while raw TCP and UDP serve third-party integrations.

Connection services and matching SIMATIC_NET_CP blocks
Service Transport Active Blocks (CP 343-1 side) Use Case
S7 Communication ISO-on-TCP (port 102) or TCP FB14 GET, FB15 PUT, FB12 BSEND, FB13 BRCV, FB8 USEND, FB9 URCV Controller-to-controller data exchange
Open TCP/IP TCP (RFC 793) FC5 AG_SEND, FC6 AG_RECV, FC10 AG_CNTRL 3rd-party device integration
Open UDP UDP (RFC 768) FC5 AG_SEND, FC6 AG_RECV Broadcast/multicast, low overhead
ISO Transport ISO 8073 FC5 AG_SEND, FC6 AG_RECV Native Siemens-to-Siemens on Ethernet
PROFINET IO Real-time Ethernet I/O image, no user FBs Distributed I/O

SIMATIC_NET_CP Library: Block Catalog

All S7-300/400 communication blocks that drive a CP live in the SIMATIC_NET_CP library (STEP 7 V5.x) or in the equivalent TIA Portal "Communication Blocks" palette. Blocks with identical numbers in the IEC standard library (e.g., FB14 from Standard Library > Communication Blocks) have a different interface and must not be substituted. The CP-aware blocks begin all parameter names with the same prefix conventions (REQ, ID, NDR, DONE, ERROR, STATUS) and accept the connection ID assigned in NetPro.

SIMATIC_NET_CP blocks for the CP 343-1 (STEP 7 V5.x)
Block Type Function Direction
FB14 GET FB Read variable from partner CPU Client (active)
FB15 PUT FB Write variable to partner CPU Client (active)
FB12 BSEND FB Send up to 32 KB segmented Sender
FB13 BRCV FB Receive up to 32 KB segmented Receiver
FB8 USEND FB Uncoordinated send (≤ 4 bytes) Sender
FB9 URCV FB Uncoordinated receive (≤ 4 bytes) Receiver
FC5 AG_SEND FC Send raw Ethernet frame TCP/UDP/ISO
FC6 AG_RECV FC Receive raw Ethernet frame TCP/UDP/ISO
FC10 AG_CNTRL FC Connection control (status, disconnect) Any
FC50 AG_LSEND FC Send data (legacy, ISO/TCP) Sender
FC60 AG_LRECV FC Receive data (legacy) Receiver

STEP 7 V5.x vs TIA Portal Block Equivalence

When the same project is migrated to TIA Portal V13 or later, the SIMATIC_NET_CP FBs are replaced by instruction extensions of the same name. The interface is unchanged; only the call mechanism differs (single-instance DB, no need to open the project library). The reference manual for CPU-CPU communication with SIMATIC controllers is published as Siemens support entry 78028908 — Communication with SIMATIC.

STEP 7 V5.x → TIA Portal block map
STEP 7 V5.x Block TIA Portal Instruction Notes
FB14 GET GET (S7 communication) Drop into OB1; instance DB auto-generated
FB15 PUT PUT (S7 communication) Same call signature
FB12 BSEND BSEND (S7 communication) Max length 32 768 bytes
FB13 BRCV BRCV (S7 communication) Max length 32 768 bytes
FC5 AG_SEND TSEND / TUSEND Split by TCP vs UDP
FC6 AG_RECV TRECV / TURCV Split by TCP vs UDP

Project-Spanning Data Exchange: Connection Setup in NetPro

When two CP 343-1 modules live in different STEP 7 projects and exchange data across an Industrial Ethernet / PROFINET subnet, the connection must be configured in NetPro (STEP 7 V5.x) or in the "Devices & Networks" editor (TIA Portal). The connection is the S7 connection type, identified by its connection ID used as the ID input on the FB. The full procedure is documented in Siemens support entry 78028908.

  1. Open NetPro in the project that owns the CP 343-1 acting as the active partner (the partner that calls PUT/GET/BSEND).
  2. Right-click the CP 343-1 module and choose Insert New Connection > S7 Connection.
  3. In the connection dialog, enter the partner IP address, partner rack, and partner slot of the remote CPU. Do not select "Establish connection actively" on both ends — exactly one end is active, the other is passive.
  4. Note the local connection ID shown in the connection properties (typical range 1..16). This same ID is passed to the FB.
  5. Compile and download the NetPro configuration; the CP 343-1 stores the connection in its project database.
  6. If the partner lives in a separate project, export it as a station (.s7p / .tnf) and import it under "Partner" in the active project so NetPro can resolve the IP at compile time.
Connection limit: The CP 343-1EX11 supports up to 16 S7 connections; the EX21/EX30 and CP 343-1 PN raise this to 32. Exceeding the limit returns STATUS 0x0002 (insufficient resources) on the calling FB.

Programming the GET / PUT Pair

FB14 GET and FB15 PUT are the simplest mechanism for cross-project data exchange. Both run on the active partner; the remote side needs only the S7 connection resource but no program changes. Each call moves a contiguous data area, so a 200-byte DB block is moved in one FB call without segmentation.

FB15 PUT Call (STL / SCL)

CALL FB15, DB15 (
REQ    := M100.0,             // Trigger: rising edge
ID     := W#16#0001,          // Connection ID from NetPro
DONE   := M110.0,
ERROR  := M110.1,
STATUS := MW112,
ADDR_1 := P#DB100.DBX0.0 BYTE 40,  // Remote DB100 bytes 0..39
SD_1   := P#DB200.DBX0.0 BYTE 40   // Local source DB200 bytes 0..39
);

FB14 GET Call (STL / SCL)

CALL FB14, DB14 (
REQ    := M120.0,
ID     := W#16#0001,
NDR    := M130.0,
ERROR  := M130.1,
STATUS := MW132,
ADDR_1 := P#DB100.DBX50.0 BYTE 80,
RD_1   := P#DB300.DBX0.0 BYTE 80
);

ADDR_1 through ADDR_8 (eight variable slots) extend the transfer up to 462 bytes per call when used concurrently. STATUS should always be evaluated in OB1 or OB35; STATUS W#16#0000 signals success, while any non-zero value should be evaluated against the FB15/FB14 error table in the manual.

BSEND / BRCV: Segmented Transfers up to 32 KB

When the payload exceeds 462 bytes — or the application must synchronize blocks with a defined start/stop — use FB12 BSEND and FB13 BRCV. BSEND fragments up to 32 768 bytes into multiple ISO-on-TCP packets; BRCV reassembles them and signals completion with DONE. Each BSEND call is acknowledged end-to-end by the receiver, making the pair well suited to recipe download and bulk diagnostics transfer.

CALL FB12, DB12 (
REQ    := M200.0,            // Trigger
ID     := W#16#0002,
R_ID   := DW#16#DEADBEEF,    // Arbitrary, must match BRCV
DONE   := M210.0,
ERROR  := M210.1,
STATUS := MW212,
SD_1   := P#DB500.DBX0.0 BYTE 8192,
LEN    := 8192
);

CALL FB13, DB13 (
EN_R   := TRUE,
ID     := W#16#0002,
R_ID   := DW#16#DEADBEEF,
NDR    := M220.0,
ERROR  := M220.1,
STATUS := MW222,
RD_1   := P#DB600.DBX0.0 BYTE 16384
);
R_ID discipline: Both ends of a BSEND/BRCV pair must use the same R_ID. Multiple pairs on a single connection require distinct R_IDs; reusing an R_ID causes the receiver to interpret a new BSEND as a continuation of the previous transfer and corrupt the data block.

USEND / URCV: Uncoordinated 4-Byte Handshake

FB8 USEND and FB9 URCV move up to four bytes without coordination or acknowledgment. They are intended for status flags and handshake signals, not for payload data. The receiver must be ready (URCV in the cycle) before USEND fires, or the data is lost silently. Because of this race condition, prefer BSEND/BRCV or GET/PUT for any data that must not be dropped.

ISO Transport vs TCP Connections

The CP 343-1 can be programmed to use either ISO-on-TCP (RFC 1006, port 102) or raw TCP for S7 communication. The choice is made in NetPro under connection properties > "Address Details". Use ISO-on-TCP unless the partner requires raw TCP — for example, a third-party application speaking S7 communication over a non-Siemens firewall or NAT boundary.

Connection type selection criteria
Criterion ISO-on-TCP (recommended) Raw TCP
Port 102 2000..4999 (configurable)
Header overhead 4 bytes 0 bytes
Firewall friendly Limited (single port) Flexible
S7 partner required Yes Yes (still S7 protocol)
Diagnostic depth Full ISO-on-TCP counters Basic TCP counters

Cross-Project Exchange via S7 Routing

When the two CP 343-1 modules reside in different STEP 7 projects but share a common Ethernet subnet, NetPro establishes the connection across project boundaries. The active partner must hold the partner IP address; the passive partner needs only its own CP configuration. If the two projects are owned by different engineering teams, export the partner project as a station (.s7p / .tnf) and import it under "Partner" in the active project. This is the Siemens-recommended workflow and the only supported route for a cross-project S7 connection. The S7 routing table — see entry 78028908 for the routing rules — must permit the gateway CP 343-1 to forward frames addressed to either subnet.

Data Exchange Between Standard User Program and Safety Program

On an S7-300F / S7-300F CPU (e.g., CPU 317F-2 PN/DP) or on a CP 343-1 installed in an F-CPU rack, data exchange between the standard user program and the safety program uses fixed channels rather than the SIMATIC_NET_CP FBs. The mechanism is described in the TIA Portal help and the SIMATIC Safety Configuring and Programming manual, available at TIA Portal — Data exchange between standard user program and safety program.

Standard ↔ Safety data exchange channels
Mechanism Direction Use Case
DB (standard) ↔ F-DB (safety) Bidirectional, mirrored Process values shared between standard and F-runtime
Bit memory (M) One-way only, into safety program Commands to safety routine (with validity flag)
Process image of inputs (PII) Into safety program Sensor data acquisition
Process image of outputs (PIQ) Out of safety program Actuator commands
The CP 343-1 itself cannot terminate safety-relevant data exchange directly — the F-runtime on the CPU is the only authority for safety data. The CP simply transports the DB contents after the F-CPU has released them; it does not enforce SIL.

Per the TIA Portal Safety manual: "Tags can be transferred using DBs, F-DBs and bit memory." When a tag is written by the standard program and consumed by the safety program, the standard program must provide both the data and a separate validity flag, and the F-program must check the validity flag on a defined cycle before acting on the data. The pairing of data + validity is mandatory; a single untagged tag may never cross the standard/safety boundary.

Status and Error Codes

Common CP 343-1 status / error codes (FB14, FB15, FB12, FB13)
STATUS (hex) Meaning Corrective Action
0000 Job complete without error None
0001 Reserved / transitional None
7000 No job active None
7001 Job active, first call None
7002 Job active, subsequent call None
8085 / 8185 Connection ID or R_ID mismatch Verify NetPro and FB ID parameter
80A1 / 80A2 Partner rejected or not available Check partner CPU run state, IP, rack/slot
80B1 / 80B2 Data length exceeds partner limit Reduce SD_1 / RD_1 byte count
80C3 / 80C4 Temporary resource shortage Retry; check partner CPU load
80D0 / 80D1 Connection aborted Check NetPro online diagnostics

Diagnostics and Verification

  1. Open NetPro, right-click the CP 343-1 and choose Connection Status. All configured S7 connections should show "Established".
  2. In the partner project, open the same CP's online diagnostics: PLC > Online & Diagnostics > Communication. Byte counters for sends and receives confirm live data flow.
  3. Force a GET/PUT with a watch table on the active side: writing DB200.DBD0 = 12345 on the remote CPU should appear in the partner DB after one cycle of the calling FB.
  4. Trigger a BSEND/BRCV pair; verify DONE toggles on both sides and the receiver DB shows the exact byte count equal to LEN.
  5. Cross-check the F-CPU's F-Change History if a safety program is involved; CP 343-1 transport errors do not appear here, but invalid tag validity flags do.
  6. Use the CP 343-1's Web diagnostics page (if enabled: http://<CP-IP>/diag) for live connection state without needing STEP 7 online access.

Troubleshooting Matrix

Symptom → Cause → Action
Symptom Likely Cause Action
STATUS = 8185 on every call Wrong connection ID, wrong library Recheck FB source: must be SIMATIC_NET_CP, not Standard Library
STATUS = 80A1, no traffic on partner Connection active on both ends Switch one side to passive in NetPro
STATUS = 80D0 after a few seconds Connection resource exceeded Reduce concurrent jobs; CP 343-1EX11 has 16 S7 conns max
Receiver DB never fills R_ID mismatch Match R_ID exactly on BSEND and BRCV
Data scrambled after a long run URCV missed a USEND cycle Switch to BSEND/BRCV or use a done flag
Safety program sees 0 from standard DB Validity flag not set Provide flag bit, evaluate in F-program
High CPU load on OB1 cycle FBs called every OB1 scan without job gating Trigger REQ on edge; gate with handshake bit
PUT finishes, partner DB unchanged Partner DB write-protected or optimized access Set DB attribute "Non-optimized" in TIA Portal partner project

Field-Commissioning Checklist

  • Confirm CP 343-1 firmware version under Online & Diagnostics > Module Information; firmware ≥ 2.0 is recommended for EX11 variants running modern TIA Portal projects.
  • Reserve the CP 343-1's Ethernet port exclusively for S7 communication if PG/OP traffic is heavy; use a managed switch with VLAN to separate the two traffic classes.
  • Document connection IDs (1..16) in the project functional specification; collisions are a common startup fault when several engineers add connections in parallel.
  • For cross-project exchange, attach a partner stub (.s7p / .tnf) to each project and check it into version control so connection changes are reviewed.
  • Configure SNTP time sync via the CP 343-1 if both sides timestamp events; mismatched timestamps confuse audit logs and sequence-of-event reconstruction.
  • Disable unused services (FTP, HTTP, SMTP) on the CP 343-1 IT variants to reduce attack surface — the Advanced firmware adds an integrated firewall for this purpose.
  • Schedule a periodic backup of the CP's project file via the Web diagnostics > "Backup" page; replacing an EX11 in the field without a project file can cost a full day of commissioning.

Which library should I take the FB14 / FB15 from for a CP 343-1?

Always use the SIMATIC_NET_CP library (STEP 7 V5.x) or the Communication Blocks / S7 Communication palette (TIA Portal). The identically numbered FB14 in the Standard Library > Communication Blocks has a different interface and does not drive a CP — it is intended for direct CPU-to-CPU links without a CP.

How many S7 connections can a CP 343-1EX11 hold?

The CP 343-1EX11 supports 16 S7 connections. The EX21, EX30, and CP 343-1 PN raise this to 32. Exceeding the limit returns STATUS 0x0002 (insufficient resources) on the calling FB.

Can the CP 343-1 exchange data with a third-party PLC?

Yes, but only via raw TCP or UDP using the FC5 AG_SEND / FC6 AG_RECV blocks, or via an open S7-communication implementation on the partner side. The CP 343-1 cannot natively speak Modbus TCP, EtherNet/IP, or any non-Siemens fieldbus — those require either a dedicated CP (e.g., CP 343-1 Lean for PROFINET IO controller) or an external gateway.

What is the maximum data length of a PUT or GET call?

Each PUT or GET call moves up to 462 bytes in up to eight address areas (ADDR_1..ADDR_8). BSEND / BRCV extend this to 32 768 bytes per call but require paired setup on both ends and matching R_ID values.

How do I move a tag from a standard program into the safety program?

Declare a standard DB and an F-DB with identical names and tag types; the F-runtime automatically mirrors writes from the standard program into the F-DB. For a one-way write, you may also use a bit-memory flag plus a separate validity flag evaluated by the F-program. Direct access to I/O from a standard DB into a safety program is not permitted — the safety program must read from its own process image, and every transferred tag must carry a paired validity flag.

Back to blog